回答
呃,那太恶心了。这里是发生了什么:
!!boolean
这原来boolean
成真/假布尔值。 !
是否定,所以当你做两个时,你强制否定的否定,或原始的布尔值。基本上,它的作用:
var x = boolean;
if (x) {
x = true;
} else {
x = false;
}
的+
接通右侧成多个。 +true
→1
和+false
→0
。第一位是数组。它是通过右侧的任何数据索引数组字面值。
总之,如果boolean
是真的,它将抓住第二个元素,否则第一个。这
[-1,1][+!!true] === 1
[-1,1][+!!false] === -1
一个更可怕的版本(使用三元):
var x = boolean ? 1 : -1;
或&&
和||
滥用:
var x = (boolean && 1) || -1;
谢谢!其实我正在浏览一个插件代码,无论这条线看起来多么恶心,对我来说都是有意义的。 – 2013-03-18 07:22:40
它正试图从首先选择一个元素阵列,基于一个变量:
[-1,1][INDEX BASED ON BOOLEAN VALUE]
的代码等同于:
var myArr = [-1,1];
var selected = null;
if(boolean === false){
selected = myArr[0];
}
else {
selected = myArr[1];
}
释:
[+!!boolean]
将返回0或1基于布尔值,否定之否定已经做了所有falsy值转换像false,空数组,未定义,空对象为布尔值false,并且truthy值为布尔值true。 在他们面前把一个+
类型转换它们成一个整数,从而使得有效的索引0或1,为对targent阵列[-1,1]
第一比特创建具有两个值的数组:
[-1,1]
第二位确保“布尔”,实际上是通过执行双反转的布尔值:
!!boolean == boolean
的加运算符用于这个布尔转变成一个数,其中true => 1
和false => 0
。
最终,这个数字用于选择该数组中的两个值之一,即该表达式将“true”变为1,将“false”变为-1。
然而,这可能会有点更可读:
boolean ? 1 : -1;
太少了! – slebetman 2013-03-18 07:05:03
表达[-1,1]
是包含值-1
和1
阵列。第二组括号从数组中取出一个值。例如,如果x
是一个数组,则x[0]
获取第一个元素。如果我们写y = [-1,1][0]
,这是一样的如下:
var x = [-1,1];
y = x[0];
所以,现在怎么样+!!boolean
? 那么,!
将值转换为布尔值,如果它不是“falsy”。如果是真的,则应用!
再将其转换为true
,如果它是虚假的,则应用false
。 (我推荐this google search关于truthy和falsy的条款)
最后,+
(正数)运算符将其转换为数字。将其想象为与-
(负数)运算符相反。所以+true
转换为1
和+false
转换为-1
。
如果你把它的扩展形式,并把它写成一个函数,这将是它(在我看来):
function(value){
var output_values = [ -1, 1 ]
, boolean = !!value
, index = +boolean
;
return output_values[ index ];
}
- 1. Python - 如何评估以下表达式?
- 2. 评估JavaScript表达式
- 3. 如何评估JavaScript表达式?
- 4. JavaScript如何评估语句表达式?
- 5. 如何评估表达式?
- 6. 评估表达式
- 7. 如何在没有eval()的jQuery中评估以下表达式?
- 8. 在javascript中的表达式评估
- 9. Javascript无法评估表达式
- 10. 用于布尔表达式评估的Javascript评估
- 11. 以下JavaScript语句如何评估?
- 12. 如何评估树中的表达式?
- 13. 如何评估这些C表达式?
- 14. Angular如何评估表达式?
- 15. 如何评估ExpressionVisitor中的表达式?
- 16. 如何评估这些表达式?
- 17. Python如何评估这个表达式?
- 18. 如何评估Handlebars表达式?
- 19. C#如何评估lambda表达式?
- 20. 如何评估MathML表达式?
- 21. 如何在Emacs的Haskell模式下评估单个表达式?
- 22. 调试表达式评估
- 23. 表达式树评估
- 24. Xtext评估表达式
- 25. 评估数学表达式
- 26. 表达式评估顺序
- 27. 表达式无法评估
- 28. 内联表达式评估
- 29. 评估集合表达式
- 30. 评估前缀表达式
你在哪里找到这样的代码??? – tjameson 2013-03-18 07:05:22