如何轻松将一个变量设置为默认为真的false?

10

我通常这样设置对象属性:

// Boolean
this.listening = config.listening || true;

但是config.listening只能是true或false,在这种情况下,this.listening将始终为true,因为如果config.listening为false,则它将等于true。

有没有更好的方法来设置这些布尔属性而不必使用if语句?

在JavaScript中是否有类似于isset函数的方式来检查它是否存在,而不是它等于什么?

2个回答

17

Webstorm 刚刚简化了你的答案,变成了:config.listening !== false,看起来是正确的。 - Alexander Mills
1
@AlexMills 你说得完全正确!压缩肯定是可能的,我只是在写这篇文章时试图尽可能明确/描述(我猜)。 - Ian
我更喜欢明确的表达方式,你应该保持你的回答。 - Alexander Mills

3

您需要检查以确保它不是未定义的,而不是它是一个“假值”。

this.listening = config.listening!==undefined ? config.listening : true;

...或者在配置中包含'listening' - Pointy
1
进行 typeof config.listening !== "undefined" 是否更好,还是仅仅为了可读性考虑? - user2251919
是的,这样会更好(或在配置中“listening”)。请参考此问题以了解更多讨论:http://stackoverflow.com/questions/519145/how-can-i-check-whether-a-variable-is-defined-in-javascript - Colin DeClue
除非你担心某些老版本浏览器会劫持你的未定义变量,否则typeof并不会更好。 - epascarello
直接测试在现代浏览器中比typeof更快。 - epascarello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接