JS严格的速记比较

时间:2016-06-02 18:13:20

标签: javascript comparison shorthand

在下面的示例中,我们可以优雅地评估foo

const foo = 'bar';
if (foo) { // clearer than (foo !== undefined)
  // -> executes
} 

但是,这实际上评估为(foo != undefined),如以下示例所示:

const foo = 0;
if (foo) { 
  // -> doesn't execute
} 

在这个例子中,我希望foo是真实的。

是否存在评估===而不是==的速记严格比较?以下变得很麻烦:

const exists = (foo !== undefined && bar !== undefined && lorem !== undefined);

1 个答案:

答案 0 :(得分:1)

虽然我不知道严格比较的简写,但您可以使用小辅助函数轻松检查nullundefined。我确定你知道这一点,但其他人也不会这样想。

而不是

const exists = (foo !== undefined && bar !== undefined && lorem !== undefined);

你能够写下:

const exists = [foo, bar, lorem].every(check);

使用该功能和一些测试的代码段:



var foo, bar, lorem, exists;

function check(arg) {
  return arg != null;
}

foo = "bar";
bar = "lorem";
lorem = "ipsum";
exists = [foo, bar, lorem].every(check);
document.getElementById("output-one").innerHTML = exists;

foo = 0;
bar = 0;
lorem = "ipsum";
exists = [foo, bar, lorem].every(check);
document.getElementById("output-two").innerHTML = exists;

foo = 0;
bar = 0;
var soab;
exists = [foo, bar, soab].every(check);
document.getElementById("output-foo").innerHTML = exists;

<p id="output-one"></p>
<p id="output-two"></p>
<p id="output-foo"></p>
&#13;
&#13;
&#13;

正如Bergi在评论中指出的那样,还有两个主要的改进,当然你也可以检查!== undefined以使这个功能更接近于问题的行为。 < / p>