['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 数组中 null 和 undefined 的撇号而出现的。

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

主要问题是,您将值转换为字符串以在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; }

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

最新更新