为什么null在JavaScript中被认为是一个对象?

正在检查

if ( object == null )
      Do something

if ( !object )
      Do something

?

还有:

null和undefined之间的区别是什么?


当前回答

Undefined意味着一个变量已经声明,但它没有被赋值,而Null可以赋给一个变量,表示“没有值”。(Null是赋值运算符)

2.Undefined是一个类型本身,而Null是一个对象。

3.Javascript本身可以将任何未赋值的变量初始化为undefined,但它永远不能将变量的值设置为null。这必须通过编程来完成。

其他回答

差异可以总结为以下代码片段:

alert(typeof(null));      // object
alert(typeof(undefined)); // undefined

alert(null !== undefined) //true
alert(null == undefined)  //true

检查

Object == null与检查if (! Object)不同。

后者等于!布尔(对象),因为一元!运算符自动将右操作数转换为布尔型。

因为布尔(null)等于false,那么!false === true。

因此,如果对象不是null,而是false或0或"",检查将通过 因为:

alert(Boolean(null)) //false
alert(Boolean(0))    //false
alert(Boolean(""))   //false

摘自Nicholas C. Zakas的《面向对象的Javascript原理》

但是为什么对象类型是空的呢?(事实上,TC39(设计和维护JavaScript的委员会)已经承认这是一个错误。你可以推断null是一个空对象指针,使“object”成为一个逻辑返回值,但这仍然令人困惑。)

尼古拉斯·扎卡斯(2014-02-07)。面向对象JavaScript的原则(Kindle位置226-227)。没有淀粉机。Kindle版。

也就是说:

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.

一些精度:

Null和undefined是两个不同的值。一个表示没有名称的值,另一个表示没有名称。


对于if(o), if中发生的事情如下所示:

括号o中的表达式被求值,然后if语句开始对括号中的表达式的值进行类型强制——在我们的例子中是o。

JavaScript中的Falsy(将被强制为false)值为:",null, undefined, 0和false。

null和undefined的主要区别在于null表示 一个缺失的对象,而undefined表示变量的未初始化状态。

你可以认为null是一个未定义的对象,但未定义只是未定义的 因为它的类型没有定义。

let a; 
console.log(a); //undefined, since it is declared but not initialized

console.log(null == undefined) //true
console.log(null === undefined) // false

console.log(typeof null) //object
console.log(typeof undefined) //undefined

与未定义相比,null的另一个有趣之处在于它可以递增。 X = undefined x + + Y = null y + + console.log(x) // NaN .log Console.log (y) // 0

这对于为计数器设置默认数值非常有用。你有多少次在声明中把一个变量设为-1 ?