我对JavaScript何时返回null
或undefined
感到困惑。不同的浏览器似乎也以不同的方式返回。
您能否举例说明null
/ undefined
与返回它们的浏览器。
虽然我现在对undefined
方面有所了解,但我仍未完全明确null
。它是否与空值相似?
E.g。您有一个没有任何值设置的文本框。现在,当您尝试访问其值时,它是null
还是undefined
并且它们是否相似?
答案 0 :(得分:121)
我发现其中一些答案含糊不清,我发现找出这些东西的最佳方法就是打开控制台并亲自测试。
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
,undefined
将始终返回false,而如果variable != undefined
variable
将返回false }}等于null
或undefined
UNLESS undefined
会事先重新分配。
如果您需要确保某个值实际为===
(而非{{},则可以可靠地使用undefined
运算符来区分null
和undefined
1}})。
null
和 Null
都是六种内置类型中的两种。4.3.9未定义值
当变量尚未赋值时使用的原始值
4.3.11空值
表示故意缺少任何对象值的原始值
答案 1 :(得分:80)
当调用没有时,DOM方法getElementById()
,nextSibling()
,childNodes[n]
,parentNode()
等返回null
(已定义但没有值)返回一个节点对象。
属性已定义,但它引用的对象不存在。
这是您不想要测试相等性的少数几次之一 -
if(x!==undefined)
对于空值
但if(x!= undefined)
对于不属于undefined
或null
的值均为真(仅限)。
答案 2 :(得分:50)
您未定义各种方案:
您使用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
。
我还应该注意,null在JSON中有效,但未定义不是:
JSON.parse(undefined); //syntax error
JSON.parse(null); //null
答案 3 :(得分:9)
我可能会遗漏一些东西,但是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
)就足够了
另外,不同的浏览器似乎也以不同的方式返回。
请举一个具体的例子。
答案 4 :(得分:3)
关于这个主题,规范(ecma-262)非常清楚
我发现它非常有用且简单,所以我分享它: - 在这里你会发现Equality algorithm - 在这里你会找到Strict equality algorithm
我从mozilla开发者网站上看到了“抽象的平等,严格的平等和相同的价值”,节目相同。
我希望你觉得它很有用。
答案 5 :(得分:0)