此问题在此处已有答案:
What is the difference between null and undefined in JavaScript?(39答案)
8年前就关门了。
我很困惑JavaScript何时返回null
或undefined
。不同的浏览器似乎也会返回不同的结果。
我正在寻找一些null
/undefined
的例子,以及返回它们的浏览器。
虽然我现在清楚了undefined
方面,但我仍然没有100%清楚null
。是否类似于空白值?
例如,您有一个没有设置任何值的文本框。现在,当你尝试访问它的值时,它会是null
还是undefined
,它们相似吗?
6条答案
按热度按时间kgqe7b3p1#
我发现其中一些答案是模糊和复杂的,我发现弄清楚这些事情的最好方法肯定是打开控制台,自己测试它。
字符串
所以这绝对是JavaScript的一个更微妙的细微差别。正如您所看到的,您可以覆盖
undefined
的值,使其与null
相比有些不可靠。使用==
运算符,就我所知,您可以可靠地互换使用null
和undefined
。但是,由于null
不能重定义的优点,我可能会在使用==
时使用它。例如,如果
variable
等于null
或undefined
,则variable != null
将始终返回false,而如果variable
等于null
或undefined
,则variable != undefined
将返回false,除非预先重新分配undefined
。如果需要确保值实际上是
undefined
(而不是null
),则可以可靠地使用===
运算符来区分undefined
和null
。根据ECMAScript 5规范:
***
Null
和Undefined
**都是六种内置类型中的两种。4.3.9未定义值
原始值,用于变量尚未赋值时
4.3.11空值
表示有意缺少任何对象值的基元值
lmyy7pcs2#
当调用不返回节点对象时,DOM方法
getElementById()
、nextSibling()
、childNodes[n]
、parentNode()
等返回null
(已定义但没有值)。属性已定义,但其引用的对象不存在。
这是为数不多的几次你可能不想测试相等性的情况之一-
if(x!==undefined)
对于空值为true但是
if(x!= undefined)
将(仅)对于不是undefined
或null
的值为真。zi8p0yeb3#
对于各种场景,您会得到undefined:
你用var声明了一个变量,但从来没有设置过它。
字符串
试图访问从未设置过的对象的属性。
型
您试图访问从未提供的参数。
型
正如cwolves在对另一个答案的评论中指出的那样,不返回值的函数。
型
null通常必须在变量或属性上故意设置(参见注解,了解在没有设置的情况下可以出现的情况)。此外,null的类型为
object
,undefined的类型为undefined
。我还应该注意,null在JSON中是有效的,但undefined不是:
型
8aqjt8rx4#
我可能错过了一些东西,但afaik,你只能得到
undefined
**更新:**好的,我错过了很多,正在尝试完成:
你得到了
undefined
......当您尝试访问不存在的对象的属性时:
字符串
...当您已宣告变数但尚未初始化它时:
型
...当您存取未传递任何值的参数时:
型
...当函数未返回值时:
型
有些内置函数可能会在发生错误时返回
null
,但如果是这样,则会记录下来。null
是JavaScript中的具体值,而undefined
不是。通常情况下,您不需要区分这些。根据变量的可能值,使用
if(variable)
来测试是否设置了值就足够了(null
和undefined
的计算结果都是false
)。而且,不同的浏览器似乎返回这些不同的。
请给予一个具体的例子。
osh3o9ms5#
关于这个主题的规范(ECMA-262)是相当清楚的
我发现它非常有用和简单,所以我分享它:- 在这里你会发现平等算法-在这里你会发现严格平等算法
我在阅读Mozilla开发者网站上的“抽象相等、严格相等和相同值”时偶然发现了它,section sameness。
希望你觉得有用。
2lpgd9686#
一个属性如果没有定义,就是未定义的。null是一个对象。它的类型为null。undefined不是对象,它的类型是undefined。
这是一篇很好的文章,解释了两者的区别,并给出了一些例子。
null vs undefined