When is null or undefined used in JavaScript?
对于javascript何时返回
请举例说明一下返回它们的浏览器中的
虽然我现在对
例如,您有一个没有设置任何值的文本框。现在,当您试图访问它的值时,它是
我发现其中一些答案是模糊和复杂的,我找到了确定这些问题的最佳方法,就是打开控制台,自己测试一下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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中更微妙的细微差别之一。如您所见,您可以覆盖EDOCX1的值(0),使其与EDOCX1的值(2)相比有些不可靠。使用
例如,如果
如果需要确保某个值实际上是
null 和undefined 都是六种内置类型中的两种。
4.3.9未定义值
primitive value used when a variable has not been assigned a value
4.3.11空值
primitive value that represents the intentional absence of any object value
当调用不返回节点对象时,dom方法
属性已定义,但它引用的对象不存在。
这是为数不多的几次你可能不想测试平等-
对于空值,
但对于不是
对于各种情况,您将得到未定义的:
您用var声明一个变量,但从不设置它。
4试图访问从未设置过的对象的属性。
1 2 | var foo = {}; alert(foo.bar); //undefined |
您试图访问从未提供的参数。
1 2 3 | function myFunction (foo) { alert(foo); //undefined. } |
正如CWolves在对另一个答案的评论中指出的,函数不返回值。
1 2 3 | function myFunction () { } alert(myFunction());//undefined |
通常必须在变量或属性上有意设置空值(请参阅注释,了解可以在没有设置的情况下显示的情况)。此外,空的类型为
我还应该注意,空值在JSON中是有效的,但未定义的不是:
1 2 | JSON.parse(undefined); //syntax error JSON.parse(null); //null |
I may be missing something,but afaik,you get
更新:好吧,我错过了很多,想完成:
你得到的是
…尝试访问不存在的对象的属性时:
1 2 | var a = {} a.foo // undefined |
…当您声明了一个变量但没有初始化它时:
1 2 | var a; // a is undefined |
…访问未传递值的参数时:
1 2 3 4 5 | function foo (a, b) { // something } foo(42); // b inside foo is undefined |
…当函数不返回值时:
1 2 | function foo() {}; var a = foo(); // a is undefined |
可能是某些内置函数在某些错误时返回
通常你不需要区分它们。根据变量的可能值,可以使用
Also different browsers seem to be returning these differently.
请举一个具体的例子。
关于这个主题,规范(ECMA-262)非常清楚。
我发现它非常有用和简单,所以我分享它:-在这里你会发现等式算法-在这里你会发现严格的等式算法
我在Mozilla开发人员网站的sameness部分读到了"抽象的平等、严格的平等和相同的价值"。
希望你觉得它有用。
没有定义的属性是未定义的。空是一个对象。它的类型为空。未定义不是对象,其类型未定义。
这是一篇很好的文章,解释了不同之处,并给出了一些例子。
空vs未定义