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

正在检查

if ( object == null )
      Do something

if ( !object )
      Do something

?

还有:

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


当前回答

(name is undefined)

你:你叫什么名字?(*) JavaScript:名字?名字是什么?我不知道你在说什么。你从来没提过任何名字。你在(客户端)看到其他脚本语言了吗?

name = null;

你:你叫什么名字? JavaScript:我不知道。

简而言之,未定义是指事物没有概念存在;它没有类型,在此范围内从未被引用过;Null是已知对象存在的位置,但不知道值是多少。

需要记住的一件事是,null在概念上与false或""或诸如此类的不一样,即使它们在类型转换后相等,即。

name = false;

你:你叫什么名字? 布尔值为false。

name = '';

你:你叫什么名字? JavaScript:空字符串


*: name在此上下文中的意思是一个从未定义过的变量。它可以是任何未定义的变量,然而,name是几乎任何HTML表单元素的属性。它可以追溯到很久以前,在id之前就设立了。它很有用,因为id必须是唯一的,但名称不必是唯一的。

其他回答

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

下面的函数说明了原因,并能够计算出差异:

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

如果你打电话

test();

你要

未定义的 零

第一个console.log(…)尝试在myObj尚未定义时从myProperty获取myProperty -因此它返回“未定义”。在将其赋值为null后,第二个console.log(…)显然返回“null”,因为myProperty存在,但它的值为null。

为了能够查询这种差异,JavaScript有null和undefined:而null就像在其他语言中是一个对象一样,undefined不能是一个对象,因为没有可用的实例(甚至不是空实例)。

什么是类型?

类型是对值进行分类的一种方式。下面是一个包含有问题的类型及其typeof结果的表格。

Type Values type contains typeof result Is typeof result a lie?
Undefined Only: undefined "undefined" No
Null Only: null "object" Yes
Object Infinite amount of values: {}, {a: "b"}, ... "object" No

null不是一个对象,它是一个null类型的值。

typeof操作符在说谎!它返回“object”为空在JavaScript语言中是一个错误。

我在我的开源电子书中写了一章。你可以在这里阅读https://github.com/carltheperson/advanced-js-objects

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

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

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

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

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