Почему null является объектом и в чем разница между null и undefined? - PullRequest
846 голосов
/ 29 апреля 2009

Почему null считается object в JavaScript?

Проверяет

if ( object == null )
      Do something

так же, как

if ( !object )
      Do something

А также:

В чем разница между null и undefined?

Ответы [ 20 ]

4 голосов
/ 30 апреля 2009

Некоторые точности:

null и undefined являются двумя разными значениями. Один представляет отсутствие значения для имени, а другой представляет отсутствие имени.


То, что происходит в if, выглядит следующим образом для if( o ):

Выражается выражение в скобках o, а затем if запускает приведение типа к значению выражения в скобках - в нашем случае o.

Ложные (которые будут приведены к ложному) значения в JavaScript: '', null, undefined, 0 и false .

1 голос
/ 29 апреля 2009

Например, window.someWeirdProperty не определено, поэтому

"window.someWeirdProperty === null" оценивается как ложное, а

"window.someWeirdProperty === undefined" оценивается как истинное.

Кроме того, checkif if (!o) - это не то же самое, что проверка if (o == null) для o, являющегося false.

1 голос
/ 08 мая 2014

Следующая функция показывает, почему и способна определить разницу:

function test() {
        var myObj = {};
        console.log(myObj.myProperty);
        myObj.myProperty = null;
        console.log(myObj.myProperty);
}

Если вы позвоните

test();

Вы получаете

1010 * не определено *

1012 * нуль *

Первый console.log(...) пытается получить myProperty из myObj, пока он еще не определен - поэтому он возвращается "неопределенным". После присвоения ему значения null второй console.log(...) возвращает, очевидно, значение «null», поскольку myProperty существует, но ему присвоено значение null.

Чтобы иметь возможность запрашивать эту разницу, JavaScript имеет null и undefined: хотя null - как и в других языках объект, undefined не может быть объектом, потому что нет экземпляра даже не экземпляр null).

1 голос
/ 15 июля 2017

Посмотрите на это:

   <script>
function f(a){
  alert(typeof(a));
  if (a==null) alert('null');
  a?alert(true):alert(false);
}
</script>
                                          //return:
<button onclick="f()">nothing</button>    //undefined    null    false
<button onclick="f(null)">null</button>   //object       null    false
<button onclick="f('')">empty</button>    //string               false
<button onclick="f(0)">zero</button>      //number               false
<button onclick="f(1)">int</button>       //number               true
<button onclick="f('x')">str</button>     //string               true
1 голос
/ 29 апреля 2009

null это объект. Его тип является нулевым. undefined не является объектом; его тип не определен.

1 голос
/ 28 августа 2016

In Javascript null - это не тип object, а тип primitave.

В чем разница? Undefined относится к указателю, который не был установлен. Нуль относится к нулевому указателю, например, что-то вручную установило переменную типа null

1 голос
/ 10 февраля 2016

Еще одна забавная вещь в нуле, по сравнению с неопределенным, заключается в том, что его можно увеличивать.

x = undefined
x++
y = null
y++
console.log(x) // NaN
console.log(y) // 0

Это полезно для установки числовых значений по умолчанию для счетчиков. Сколько раз вы устанавливали переменную на -1 в ее объявлении?

0 голосов
/ 11 марта 2016
  1. Undefined означает, что переменная была объявлена, но ей не было присвоено какое-либо значение, в то время как Null может быть назначен переменной, представляющей «нет значения». (Null является оператором присваивания)

2.Undefined - это сам тип, а Null - объект.

3.Javascript может сам инициализировать любую неназначенную переменную как неопределенную, но он никогда не может установить значение переменной равным нулю. Это должно быть сделано программно.

0 голосов
/ 06 января 2016

Лучший способ подумать о «нулевом» - это вспомнить, как похожая концепция используется в базах данных, где это указывает на то, что поле содержит «вообще никакого значения».

  • Да, стоимость предмета известна; это определено 'определено.' инициализирован .
  • Значение предмета: "нет значения."

Это очень полезный метод для написания программ, которые легче отлаживать. Переменная 'undefined' может быть результатом ошибки ... (как вы узнали бы?) ... но если переменная содержит значение "null", вы знаете этого "кого-то" где-то в эта программа, , задает для него значение «ноль». «Поэтому я предлагаю, чтобы, когда вам нужно избавиться от значения переменной, не« удалять »... установите его в« ноль » «. Старое значение будет потеряно и скоро будет собрано для мусора; новое значение «нет значения (сейчас)». В обоих случаях состояние переменной определено: «она, очевидно, умышленно получила этот путь».

0 голосов
/ 28 августа 2014

Из «Принципов объектно-ориентированного JavaScript» Николая С. Закаса

Но почему объект с нулевым типом? (Фактически, это было признано ошибкой в ​​TC39, комитете, который разрабатывает и поддерживает JavaScript. Вы можете предположить, что null является пустым указателем объекта, что делает «object» логическим возвращаемым значением, но это все еще сбивает с толку.)

Закас, Николас С. (2014-02-07). Принципы объектно-ориентированного JavaScript (Kindle Locations 226-227). Нет крахмального пресса. Kindle Edition.

Это говорит:

var game = null; //typeof(game) is "object"

game.score = 100;//null is not an object, what the heck!?
game instanceof Object; //false, so it's not an instance but it's type is object
//let's make this primitive variable an object;
game = {}; 
typeof(game);//it is an object
game instanceof Object; //true, yay!!!
game.score = 100;

Неопределенный регистр:

var score; //at this point 'score' is undefined
typeof(score); //'undefined'
var score.player = "felix"; //'undefined' is not an object
score instanceof Object; //false, oh I already knew that.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...