在下面的示例中,我们可以优雅地评估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);
答案 0 :(得分:1)
虽然我不知道严格比较的简写,但您可以使用小辅助函数轻松检查null
和undefined
。我确定你知道这一点,但其他人也不会这样想。
而不是
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;
正如Bergi在评论中指出的那样,还有两个主要的改进,当然你也可以检查!== undefined以使这个功能更接近于问题的行为。 < / p>