2017-08-14 93 views
1

你知道下面两个函数是否相同?['null','','undefined']。indexOf(str)<0和(str!== null || str!==''|| str!== undefined)是否等同?

function validate(str) 
{ 
    return (['null','','undefined'].indexOf(str) < 0); 
} 

function validate(str) 
{ 
    return (str !== null || str !== '' || str !== undefined); 
} 

的问题主要出现由于空和未定义的indexOf阵列中的撇号。

+1

不,因为第一个代码搜索实际的字符串'null'和'undefined'..第二个代码检查str是否为'null'或'undefined' –

回答

3

如您所见,他们没有返回相同的结果。

主要问题是,您将值转换为字符串进行比较validate1。如果你有一个带有这个值的字符串,那么你会得到一个错误的结果。

function validate1(str) { 
 
    return ['null', '', 'undefined'].indexOf(str) < 0; 
 
} 
 

 
function validate2(str) { 
 
    return str !== null || str !== '' || str !== undefined; 
 
} 
 

 
console.log([null, undefined, 0, '', false, 'null', 'undefined'].map(v => [v, validate1(v), validate2(v)]));
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

当然不是。例如,要将值检查为'未定义',您需要检查数据类型(!)a与未定义的值进行比较。使用typeof运算符来获取类型。

相关问题