在JavaScript中设置布尔值的奇怪方式



我在野外遇到了此JavaScript代码,很难确切地了解它的作用以及它的工作方式:

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

根据我可以说的,选项。上述和仅执行以下操作之间有任何功能差异吗?

options.something = true;

jshint和jslint适当地对原始代码发出警告"混乱的使用'!"。

有趣的代码。options.something分配的唯一方法是false本身是错误的。

让我们分解:

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

因此,在一天结束时,代码可确保选项。)。

另一方面,如果它以其他任何内容(例如Undefined,null,0等)开始,则它将是值true

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

从内而外阅读。

内括号询问是否有错误。如果是表达式的值为真(false确实相等)。以返回布尔值false的(! true)为负(CC_6)。

如果某事是正确的,则内部表达式为false, true != false。以否定为负(! false),结果是true

好吧,如果某些东西不确定怎么办?未定义将评估为false,并且由于false === false表达式为真。否定(! true)返回false

因此,任何真实的事物都会以真实和未定义或错误的值返回,总是返回false。

最新更新