我真的很困惑 JavaScript 何时返回null
或undefined
. 不同的浏览器似乎也以不同的方式返回这些。
您能否举一些null
/undefined
以及返回它们的浏览器的示例。
虽然我现在在这undefined
方面很清楚,但我仍然不是 100% 清楚null
。它类似于空白值吗?
例如,您有一个没有设置任何值的文本框。现在,当您尝试访问它的value,会是null
或者undefined
,它们是否相似?
我真的很困惑 JavaScript 何时返回null
或undefined
. 不同的浏览器似乎也以不同的方式返回这些。
您能否举一些null
/undefined
以及返回它们的浏览器的示例。
虽然我现在在这undefined
方面很清楚,但我仍然不是 100% 清楚null
。它类似于空白值吗?
例如,您有一个没有设置任何值的文本框。现在,当您尝试访问它的value,会是null
或者undefined
,它们是否相似?
我发现其中一些答案含糊不清且复杂,我发现确定这些问题的最佳方法是打开控制台并自己测试。
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
。据我所知==
,使用运算符,您可以可靠地使用null
和undefined
互换。但是,由于null
无法重新定义的优势,我可能会在使用==
.
例如,variable != null
如果variable
等于null
or将始终返回 false undefined
,而variable != undefined
如果variable
等于null
or 或undefined
UNLESSundefined
事先重新分配则返回 false 。
如果您需要确保值实际上是(而不是),则可以可靠地使用===
运算符来区分undefined
和。null
undefined
null
Null
和Undefined
两个内置的类型六。4.3.9 未定义值
未为变量赋值时使用的原始值
4.3.11 空值
表示有意不存在任何对象值的原始值
当调用未返回节点对象时,DOM 方法getElementById()
、nextSibling()
、等将返回(已定义但没有值)。childNodes[n]
parentNode()
null
该属性的定义,但它指的是对象不存在。
这是为数不多的几次你可能不希望测试equality-
if(x!==undefined)
为空值时为真
但if(x!= undefined)
对于不是undefined
或 的值(仅)为真null
。
您在各种情况下都未定义:
你用 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 是 type object
, undefined 是 type undefined
。
我还应该注意到 null 在 JSON 中是有效的,但 undefined 不是:
JSON.parse(undefined); //syntax error
JSON.parse(null); //null
我可能会遗漏一些东西,但是 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)
测试是否设置了值(两者,null
并undefined
评估为false
)。
不同的浏览器似乎也以不同的方式返回这些。
请举一个具体的例子。