为什么null在JavaScript中被认为是一个对象?
正在检查
if ( object == null )
Do something
和
if ( !object )
Do something
?
还有:
null和undefined之间的区别是什么?
为什么null在JavaScript中被认为是一个对象?
正在检查
if ( object == null )
Do something
和
if ( !object )
Do something
?
还有:
null和undefined之间的区别是什么?
当前回答
Null是一个对象。它的类型是null。Undefined不是一个对象;其类型是未定义的。
其他回答
例如窗口。someWeirdProperty是未定义的
”窗口。someWeirdProperty === null"的值为false时
”窗口。someWeirdProperty === undefined"的值为true。
此外,checkif if (!o)与检查if (o == null)是否为假并不相同。
问题的第一部分
为什么null在JavaScript中被认为是一个对象?
这是他们现在无法修复的JavaScript设计错误。它应该是null类型,而不是object类型,或者根本没有它。在检测真实对象时,需要进行额外的检查(有时会忘记),这是bug的来源。
问题的第二部分:
正在检查 If (object == null) 做某事 和 如果对象(!) 做某事
这两个检查总是都是假的,除了:
对象未定义或为空:均为true。 对象是原语,0,"",或false:第一次检查为假,第二次检查为真。
如果对象不是一个原语,而是一个真实的对象,比如new Number(0)、new String("")或new Boolean(false),那么两个检查都为假。
因此,如果'object'被解释为一个真实的对象,那么两个检查总是相同的。如果允许使用原语,则对0、""和false进行不同的检查。
在object==null这样的情况下,不明显的结果可能是bug的来源。不建议使用==,请使用===代替。
问题的第三部分:
还有: null和undefined之间的区别是什么?
在JavaScript中,一个区别是null的类型是object,而undefined的类型是undefined。
在JavaScript中,null==undefined为真,如果忽略type则认为相等。为什么他们决定,但是0 ""和false不相等,我不知道。这似乎是一个武断的观点。
在JavaScript中,null===undefined不为真,因为在===中的类型必须相同。
实际上,null和undefined是相同的,因为它们都表示不存在。0和“”也是如此,也许还有空容器[]和{}。如此多相同的“无”是滋生bug的秘诀。一种或完全没有是更好的。我会尽量少用。
'false', 'true'和'!'是另一个可以简化的问题,例如,如果(!x)和如果(x)单独是充分的,你不需要真和假。
如果没有给出值,则声明的var x是未定义的类型,但它应该与从未声明x相同。另一个错误源是空容器。所以最好同时声明和定义它,比如var x=1。
人们绕着圈子转来转去,试图弄清楚所有这些不同类型的虚无,但它们都是同样的东西,只是穿着复杂的不同衣服。现实是
undefined===undeclared===null===0===""===[]==={}===nothing
也许所有都应该抛出异常。
为了补充“undefined和null之间的区别是什么”的答案,请参阅JavaScript权威指南第6版,本页第41页:
你可能认为undefined表示系统级的,意外的, 或者类似错误的无值和null表示程序级, 正常的,或预期的价值缺失。如果你需要分配一个 将这些值传递给变量或属性或将其中一个值传递给 一个函数,null几乎总是正确的选择。
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
在Javascript中,null不是对象类型,而是原始类型。
有什么不同? Undefined指的是一个没有被设置的指针。 Null指的是空指针,例如有人手动将一个变量设置为Null类型