双感叹号(!!)技巧在JavaScript中总是产生true还是false?
请原谅我的提问(我来自C/C++世界) 我很好奇下面这行代码在JavaScript中是否总是将双感叹号(!!)技巧在JavaScript中总是产生true还是false?,javascript,boolean,Javascript,Boolean,请原谅我的提问(我来自C/C++世界) 我很好奇下面这行代码在JavaScript中是否总是将bResult设置为true或false var bResult = !!someVariable; 用于将任何内容转换为布尔类型的速记,与 var bResult = Boolean(someVariable); 根据ECMAScript语言规范 生产一元表达式:!一元表达式的计算结果为 如下: 让oldValue为ToBoolean(GetValue(expr)) 如果var bResult=!
bResult
设置为true
或false
var bResult = !!someVariable;
用于将任何内容转换为布尔类型的速记,与
var bResult = Boolean(someVariable);
根据
ECMAScript语言规范
生产一元表达式:!一元表达式的计算结果为
如下:
让oldValue为ToBoolean(GetValue(expr))
如果var bResult=!!某些变量代码>,计算第一个逻辑非运算符
oldvalue = !(ToBoolean(value of someVariable))
有关不同数据类型如何转换为布尔值的信息,请参见下表。因此,根据“someVariable”的类型和值,将进行转换
Argument Type Result
Undefined false
Null false
Boolean The result equals the input argument (no conversion).
Number The result is false if the argument is +0, -0, or NaN; otherwise the result is true.
String The result is false if the argument is the empty String (its length is zero); otherwise the result is true.
Object true
如果oldValue为true,则返回false。返回true
这就完成了对第一个逻辑非运算符的求值
bResult=!(oldValue)
//第二个逻辑NOT运算符将以相同的方式再次求值,并获得结果
因此,结果取决于数据类型和“somevariable”的值,这不是一个技巧。是的。not运算符(!
)始终返回布尔值。请参见“否”,如果操作数不存在,您将得到一个错误。如果未定义someVariable
,则可能的重复操作也会导致错误。