什么时候在JavaScript中使用null或undefined?[副本]

col17t5w  于 2023-08-02  发布在  Java
关注(0)|答案(6)|浏览(135)

此问题在此处已有答案

What is the difference between null and undefined in JavaScript?(39答案)
8年前就关门了。
我很困惑JavaScript何时返回nullundefined。不同的浏览器似乎也会返回不同的结果。
我正在寻找一些null/undefined的例子,以及返回它们的浏览器。
虽然我现在清楚了undefined方面,但我仍然没有100%清楚null。是否类似于空白值?
例如,您有一个没有设置任何值的文本框。现在,当你尝试访问它的值时,它会是null还是undefined,它们相似吗?

kgqe7b3p

kgqe7b3p1#

我发现其中一些答案是模糊和复杂的,我发现弄清楚这些事情的最好方法肯定是打开控制台,自己测试它。

var x;

x == null            // true
x == undefined       // true
x === null           // false
x === undefined      // true

var y = null;

y == null            // true
y == undefined       // true
y === null           // true
y === undefined      // false

typeof x             // 'undefined'
typeof y             // 'object'

var z = {abc: null};

z.abc == null        // true
z.abc == undefined   // true
z.abc === null       // true
z.abc === undefined  // false

z.xyz == null        // true
z.xyz == undefined   // true
z.xyz === null       // false
z.xyz === undefined  // true

null = 1;            // throws error: invalid left hand assignment
undefined = 1;       // works fine: this can cause some problems

字符串
所以这绝对是JavaScript的一个更微妙的细微差别。正如您所看到的,您可以覆盖undefined的值,使其与null相比有些不可靠。使用==运算符,就我所知,您可以可靠地互换使用nullundefined。但是,由于null不能重定义的优点,我可能会在使用==时使用它。
例如,如果variable等于nullundefined,则variable != null将始终返回false,而如果variable等于nullundefined,则variable != undefined将返回false,除非预先重新分配undefined
如果需要确保值实际上是undefined(而不是null),则可以可靠地使用===运算符来区分undefinednull

根据ECMAScript 5规范:

***NullUndefined**都是六种内置类型中的两种。
4.3.9未定义值

原始值,用于变量尚未赋值时

4.3.11空值

表示有意缺少任何对象值的基元值

lmyy7pcs

lmyy7pcs2#

当调用不返回节点对象时,DOM方法getElementById()nextSibling()childNodes[n]parentNode()等返回null(已定义但没有值)。

属性已定义,但其引用的对象不存在。

这是为数不多的几次你可能想测试相等性的情况之一-
if(x!==undefined)对于空值为true
但是if(x!= undefined)将(仅)对于不是undefinednull的值为真。

zi8p0yeb

zi8p0yeb3#

对于各种场景,您会得到undefined:
你用var声明了一个变量,但从来没有设置过它。

var foo; 
alert(foo); //undefined.

字符串
试图访问从未设置过的对象的属性。

var foo = {};
alert(foo.bar); //undefined


您试图访问从未提供的参数。

function myFunction (foo) {
  alert(foo); //undefined.
}


正如cwolves在对另一个答案的评论中指出的那样,不返回值的函数。

function myFunction () {
}
alert(myFunction());//undefined


null通常必须在变量或属性上故意设置(参见注解,了解在没有设置的情况下可以出现的情况)。此外,null的类型为object,undefined的类型为undefined
我还应该注意,null在JSON中是有效的,但undefined不是:

JSON.parse(undefined); //syntax error
JSON.parse(null); //null

8aqjt8rx

8aqjt8rx4#

我可能错过了一些东西,但afaik,你只能得到undefined

**更新:**好的,我错过了很多,正在尝试完成:

你得到了undefined ...
...当您尝试访问不存在的对象的属性时:

var a = {}
a.foo // undefined

字符串
...当您已宣告变数但尚未初始化它时:

var a;
// a is undefined


...当您存取未传递任何值的参数时:

function foo (a, b) {
    // something
}

foo(42); // b inside foo is undefined


...当函数未返回值时:

function foo() {};
var a = foo(); // a is undefined


有些内置函数可能会在发生错误时返回null,但如果是这样,则会记录下来。null是JavaScript中的具体值,而undefined不是。
通常情况下,您不需要区分这些。根据变量的可能值,使用if(variable)来测试是否设置了值就足够了(nullundefined的计算结果都是false)。
而且,不同的浏览器似乎返回这些不同的。
请给予一个具体的例子。

osh3o9ms

osh3o9ms5#

关于这个主题的规范(ECMA-262)是相当清楚的
我发现它非常有用和简单,所以我分享它:- 在这里你会发现平等算法-在这里你会发现严格平等算法
我在阅读Mozilla开发者网站上的“抽象相等、严格相等和相同值”时偶然发现了它,section sameness。
希望你觉得有用。

2lpgd968

2lpgd9686#

一个属性如果没有定义,就是未定义的。null是一个对象。它的类型为null。undefined不是对象,它的类型是undefined。
这是一篇很好的文章,解释了两者的区别,并给出了一些例子。
null vs undefined

相关问题