在javascript中设置布尔值的奇怪方法

时间:2014-01-31 04:58:23

标签: javascript boolean jslint jshint

我在野外遇到过这个javascript代码,我无法准确理解它的作用及其工作原理:

// Ensure its bool.
options.something = (!(options.something === false));

据我所知,options.something只是设置为false的反面。上述之间是否有任何功能差异而只是做以下事情?

options.something = true;

JSHint和JSLint在原始代码上恰当地给出了“混淆使用'!'”警告。

2 个答案:

答案 0 :(得分:3)

有趣的一段代码。 options.something分配false的唯一方法是它本身是否为假。

让我们分解一下:

(!(options.something === false)) => (!(false === false)) => (!true) => false

因此,在当天结束时,代码确保options.something为true或false,并且唯一的方法是false,如果它实际上是值false(未定义,null, 0等。)。

另一方面,如果它以其他任何东西开头(例如undefined,null,0等),它将是值true

答案 1 :(得分:1)

它实际上不是一个切换,它是一个检查值是一个布尔值。

从里到外阅读。

内括号询问是否有错误。如果是表达式的值为true(false确实等于false)。取消(! true)的否定值,返回布尔值false

如果某些内容为真,则内部表达式为false true != false。取消(! false)的结果,结果为true

好的,那么如果某些内容未定义怎么办?未定义将评估为false,因为false === false表达式为true。否定(! true)返回false

所以任何真实的东西都返回true,未定义或false值总是返回false。