是['null','','undefined']。indexOf(str)< 0和(str!== null || str!==''|| str!== undefined)相当于?

时间:2017-08-14 06:48:12

标签: javascript null undefined indexof

你知道以下两个函数是否相同吗?

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

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

这个问题主要是因为indexOf数组中的null和undefined的撇号。

2 个答案:

答案 0 :(得分:3)

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

主要问题是,您将值转换为字符串,以便在validate1中进行比较。如果您有一个包含此值的字符串,则会得到错误的结果。

&#13;
&#13;
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)]));
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 1 :(得分:0)

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