[-1,1][+!!boolean]
我正在调试一个JS代码,在那里我发现了这一行。顾名思义,var boolean可以有true或false值。
答案 0 :(得分:4)
!!boolean
这会将boolean
转换为true / false布尔值。 !
是否定,所以当你做两个时,你强制否定否定或原始的布尔值。基本上,它确实:
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;
答案 1 :(得分:3)
第一位创建一个包含两个值的数组:
[-1,1]
第二位通过执行双反转确保“boolean”实际上是一个布尔值:
!!boolean == boolean
plus运算符用于将此布尔值转换为数字,其中true => 1
和false => 0
。
最后,这个数字用于选择该数组中的两个值中的一个,即该表达式将“true”变为1,将“false”变为-1。
但是,这可能更具可读性:
boolean ? 1 : -1;
答案 2 :(得分:1)
表达式[-1,1]
是一个包含值-1
和1
的数组。
第二组括号从数组中获取一个值。例如,如果x
是数组,则x[0]
获取第一个元素。如果我们写y = [-1,1][0]
,则与以下内容相同:
var x = [-1,1];
y = x[0];
那么,那么+!!boolean
呢?
好吧,!
如果它不是“falsy”,则将值转换为布尔值。应用!
会再次转换true
(如果它是真实的),false
如果它是假的。 (我建议使用条款truthy和falsy this google search
最后,+
(正)运算符将其转换为数字。将其视为-
(否定)运算符的反面。因此+true
转换为1
,+false
转换为-1
。
如果您要采用它的扩展形式并将其作为函数编写,那就是它(在我看来):
function( value ){
var output_values = [ -1, 1 ]
, boolean = !!value
, index = +boolean
;
return output_values[ index ];
}
答案 3 :(得分:0)
它试图根据变量:
从第一个数组中选择一个元素[-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,已完成双重否定将所有虚假值(如false,空数组,未定义,空对象)转换为布尔值false,将truthy值转换为布尔值true。
在它们前面放置一个+
将它们转换成一个整数,从而使它成为0或1的有效索引,对于targent数组[-1,1]