Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查类型与空检查_Javascript_Null_Undefined - Fatal编程技术网

Javascript 检查类型与空检查

Javascript 检查类型与空检查,javascript,null,undefined,Javascript,Null,Undefined,我学会了在Javascript中始终像这样检查变量: function x(variable){ if(typeof variable !== "undefined" && variable !== null)... } 一位新同事现在说,这样做更容易、更好: function x(variable){ if(variable != null) } 这真的一样吗?这怎么行 谢谢代码>函数x(变量){ 如果(变量类型!==“未定义”&&variable!==null

我学会了在Javascript中始终像这样检查变量:

function x(variable){
   if(typeof variable !== "undefined" && variable !== null)...
}
一位新同事现在说,这样做更容易、更好:

function x(variable){
   if(variable != null)
}
这真的一样吗?这怎么行

谢谢

代码>函数x(变量){ 如果(变量类型!==“未定义”&&variable!==null)。。。 }

上面将检查变量是否存在或是否已声明,如果存在,则不为null。如果您不确定变量声明,那么这是一种很好的方法

函数x(变量){
if(变量!=null)
}

上面只检查变量是否为空。只有在确定变量首先声明的情况下,这才是好的

额外的位

return value === null || value === undefined;
以上为空或未定义

希望这有帮助


干杯

唯一的区别是第一个变量可以安全地用于检查全局变量

> foo // -> ReferenceError
> foo != null // -> ReferenceError
> typeof foo !== 'undefined' && foo !== null // -> false

但在您的示例中,这并不重要,因为空函数参数在JavaScript中总是
未定义


例如:

这里必须使用严格相等运算符而不是标准相等运算符,因为
x==undefined
还检查x是否为null,而严格相等运算符则不检查
null
不等同于
未定义



我认为上面的例子是有效的,因为您没有使用严格的比较。简言之,你们的两个例子并不相同,但可以给出相同的结果。这完全取决于您的逻辑需求是否是严格的比较。

建议,我认为if(变量)也应该这样做。不,如果变量真的没有定义怎么办?你会在这里得到一个错误。我注意到一件奇怪的事情:undefined==null是真的。这怎么可能呢?Javascript弱类型,还有更糟糕的例子,例如数组(3)=','总是将类型和值与
===
进行比较==
避免出现
undefined==null
true
var x;
if (x === undefined) {
   // these statements execute
}
else {
   // these statements do not execute
}
function x(variable){
   if(variable != null) // variable would be both null and undefined for comparison
}