在JavaScript中,双感叹号(!!)技巧总是产生true或false吗
Does the double-exclamation (!!) trick always produce true or false in JavaScript?
请原谅我的提问(我来自C/C++世界)
我很好奇下一行在JavaScript中是否总是将bResult
设置为true
或false
?
var bResult = !!someVariable;
用于将任何东西转换为布尔类型的速记,与相同
var bResult = Boolean(someVariable);
https://stackoverflow.com/a/264037/3094153
根据ECMAScript Language Specification
,
生产UnaryExpression:!UnaryExpression的计算结果为如下:
设oldValue为ToBoolean(GetValue(expr))。
在var bResult = !!someVariable;
的情况下,对第一个逻辑Not运算符进行评估
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。
这完成了对第一个逻辑NOT运算符的评估
bResult = !(oldValue)
//以相同的方式再次评估第二个逻辑NOT运算符,并获得结果。
因此,结果取决于数据类型和"somevariable"的值,这不是一个技巧。
相关文章:
- JavaScript-切换“;全部检查”;复选框true/false
- true==false以某种方式计算为true
- Javascript似乎在说true ==false
- JavaScript onkeydown, return true,false
- 从异步函数返回true/false以用于同步if()
- 函数返回undefined而不是true/false
- 为什么true/true是1,true/false是无穷大,false/true是0,false/false是NaN
- 检查对象数组是否包含布尔值true/false
- 函数:根据字符串中是否存在子字符串返回 True/False
- 如何将 ng-show 与控制器中返回 true/false 的函数一起使用
- 在input.checked=true/false _without_ jQuery上触发一个事件
- jQuery javascript未正确返回true/false
- 如何从嵌套的jquery回调函数中返回true/false
- 如何在骨干模型属性中设置布尔值true/false
- 如何使用angular或javascript在基于true/false返回的html中显示值
- 基于true/false变量显示/隐藏进度条
- Node.js在返回true/false时停止函数
- 是否可以将true/false值传递给ajax函数
- 根据Webix中的复选框值编辑true/false
- Meteor:设置车把变量true/false