我在野外遇到了此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。