Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
双感叹号(!!)技巧在JavaScript中总是产生true还是false?_Javascript_Boolean - Fatal编程技术网

双感叹号(!!)技巧在JavaScript中总是产生true还是false?

双感叹号(!!)技巧在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=!

请原谅我的提问(我来自C/C++世界)

我很好奇下面这行代码在JavaScript中是否总是将
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
,则可能的重复操作也会导致错误。