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

正在检查

if ( object == null )
      Do something

if ( !object )
      Do something

?

还有:

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


当前回答

Null不是一个对象,它是一个基本值。例如,不能向其添加属性。有时人们错误地认为它是一个对象,因为typeof null返回“object”。但这实际上是一个错误(甚至可能在ECMAScript 6中被修复)。

null和undefined的区别如下:

undefined: used by JavaScript and means “no value”. Uninitialized variables, missing parameters and unknown variables have that value. > var noValueYet; > console.log(noValueYet); undefined > function foo(x) { console.log(x) } > foo() undefined > var obj = {}; > console.log(obj.unknownProperty) undefined Accessing unknown variables, however, produces an exception: > unknownVariable ReferenceError: unknownVariable is not defined null: used by programmers to indicate “no value”, e.g. as a parameter to a function.

检查变量:

console.log(typeof unknownVariable === "undefined"); // true

var foo;
console.log(typeof foo === "undefined"); // true
console.log(foo === undefined); // true

var bar = null;
console.log(bar === null); // true

作为一般规则,在JavaScript中应该总是使用===,而永远不要使用==(==执行各种可能产生意外结果的转换)。检查x == null是一个边缘情况,因为它适用于null和undefined:

> null == null
true
> undefined == null
true

检查变量是否有值的一种常见方法是将其转换为布尔值,然后看它是否为真。该转换由if语句和布尔运算符!(“不”)。

function foo(param) {
    if (param) {
        // ...
    }
}
function foo(param) {
    if (! param) param = "abc";
}
function foo(param) {
    // || returns first operand that can't be converted to false
    param = param || "abc";
}

这种方法的缺点:以下所有值的计算结果都是false,所以你必须小心(例如,上面的检查不能区分undefined和0)。

定义,零 布尔值:假 数字:+0,-0,NaN 弦:“”

你可以通过使用boolean作为函数来测试到boolean的转换(通常它是一个构造函数,用于new):

> Boolean(null)
false
> Boolean("")
false
> Boolean(3-3)
false
> Boolean({})
true
> Boolean([])
true

其他回答

在Javascript中,null不是对象类型,而是原始类型。

有什么不同? Undefined指的是一个没有被设置的指针。 Null指的是空指针,例如有人手动将一个变量设置为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

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

没有定义的属性是未定义的。null是一个对象。它的类型是object。Null是一个特殊值,表示“没有值”。Undefined不是一个对象,它的类型是Undefined。

你可以声明一个变量,将其设置为null,除了你会看到“null”和“undefined”打印出来之外,行为是相同的。你甚至可以将一个未定义的变量与null进行比较,反之亦然,条件将为真:

 undefined == null
 null == undefined

更多细节请参考JavaScript null和undefined之间的差异。

还有你的新编辑,是的

if (object == null)  does mean the same  if(!object)

当测试object是否为false时,它们都只满足测试是否为false时的条件,而不满足测试是否为true时的条件

检查这里:Javascript抓住你了

Null是一个对象。它的类型是null。Undefined不是一个对象;其类型是未定义的。

Null和undefined对于值相等都是false (Null ==undefined):它们都崩溃为布尔值false。它们不是同一个对象(null!==undefined)。

Undefined是全局对象(浏览器中的“window”)的一个属性,但它是一个基本类型,而不是对象本身。它是未初始化的变量和函数的默认值,没有返回语句。

null是Object的一个实例。null用于返回集合对象以指示空结果的DOM方法,该方法提供false值而不指示错误。