afs*_*tos 158 javascript null undefined null-check
我遇到过以下代码:
function test(data) {
if (data != null && data !== undefined) {
// some code here
}
}
Run Code Online (Sandbox Code Playgroud)
我对JavaScript很新,但是,从我在这里读过的其他问题来看,我的印象是这段代码没有多大意义.
如果在除了以外的任何上下文中访问未定义的变量,您将收到错误typeof
.
更新:上述答案(引用)可能会产生误导.应该说"一个未声明的变量",而不是"一个未定义的变量".
正如我在Ryan♦,maerics和nwellnhof的回答中所发现的那样,即使没有为函数提供参数,也始终声明其参数的变量.这个事实也证明了下面列表中的第一项是错误的.
根据我的理解,可能会遇到以下情况:
调用该函数时没有参数,从而生成data
一个未定义的变量,并引发错误data != null
.
该函数专门用null
(或undefined
)作为其参数调用,在这种情况下data != null
已经保护内部代码,使得&& data !== undefined
无用.
该函数使用非null参数调用,在这种情况下,它将平凡地传递两个data != null
和 data !== undefined
.
问:我的理解是否正确?
我在Firefox的控制台中尝试了以下内容:
--
[15:31:31.057] false != null
[15:31:31.061] true
--
[15:31:37.985] false !== undefined
[15:31:37.989] true
--
[15:32:59.934] null != null
[15:32:59.937] false
--
[15:33:05.221] undefined != null
[15:33:05.225] false
--
[15:35:12.231] "" != null
[15:35:12.235] true
--
[15:35:19.214] "" !== undefined
[15:35:19.218] true
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚data !== undefined
后面 data != null
可能有用的情况.
Ry-*_*Ry- 102
"未定义变量"与值不同undefined
.
未定义的变量:
var a;
alert(b); // ReferenceError: b is not defined
Run Code Online (Sandbox Code Playgroud)
值为的变量undefined
:
var a;
alert(a); // Alerts “undefined”
Run Code Online (Sandbox Code Playgroud)
当一个函数接受一个参数时,即使它的值是undefined
,也总是声明该参数,因此不会有任何错误.然而,你是对的,!= null
然后!== undefined
是没用的.
mae*_*ics 81
在JavaScript中,null
是一个特殊的单例对象,它有助于发出"无价值"的信号.您可以通过比较对其进行测试,并且像在JavaScript中一样,使用===
运算符避免混淆类型强制是一个好习惯:
var a = null;
alert(a === null); // true
Run Code Online (Sandbox Code Playgroud)
正如@rynah所提到的,"未定义"在JavaScript中有点令人困惑.但是,typeof(x)
即使"x"不是声明的变量,测试字符串是否为"undefined" 总是安全的:
alert(typeof(x) === 'undefined'); // true
Run Code Online (Sandbox Code Playgroud)
此外,如果未初始化变量,则变量可以具有"未定义的值":
var y;
alert(typeof(y) === 'undefined'); // true
Run Code Online (Sandbox Code Playgroud)
总而言之,您的支票应如下所示:
if ((typeof(data) !== 'undefined') && (data !== null)) {
// ...
Run Code Online (Sandbox Code Playgroud)
但是,由于变量"data"始终是定义的,因为它是一个形式函数参数,因此不需要使用"typeof"运算符,您可以安全地直接与"未定义值"进行比较.
function(data) {
if ((data !== undefined) && (data !== null)) {
// ...
Run Code Online (Sandbox Code Playgroud)
这个片段相当于说"如果函数是使用已定义的参数调用的,并且不是null ..."
Kam*_*ski 15
在您的情况下使用data==null
(这仅适用于 null 和 undefined - 在第二张图片上关注行/列 null-undefined)
function test(data) {
if (data != null) {
console.log('Data: ', data);
}
}
test(); // the data=undefined
test(null); // the data=null
test(undefined); // the data=undefined
test(0);
test(false);
test('something');
Run Code Online (Sandbox Code Playgroud)
在这里你有所有(src):
如果
==(它的否定!=)
===(它的否定!==)
问:函数是在没有参数的情况下调用的,因此使数据成为未定义的变量,并在数据上引发错误!= null.
答:是的,data
将设置为undefined.请参见规范10.5声明绑定实例化.但访问未定义的值不会引发错误.您可能会因为在严格模式下访问未声明的变量而引起混淆,这会引发错误.
问:该函数专门用null(或undefined)作为参数调用,在这种情况下,data!= null已经保护了内部代码,渲染了&& data!== undefined无用.
问:使用非null参数调用函数,在这种情况下,它将平凡地传递数据!= null和data!== undefined.
答:正确.请注意,以下测试是等效的:
data != null
data != undefined
data !== null && data !== undefined
Run Code Online (Sandbox Code Playgroud)
参见11.9.3抽象等式比较算法和第11.9.6节规范的严格等式比较算法.
归档时间: |
|
查看次数: |
415408 次 |
最近记录: |