如何计算以下Javascript表达式?

如何计算以下Javascript表达式?,javascript,expression,Javascript,Expression,我在调试JS代码时发现了这一行。顾名思义,var boolean可以有真值也可以有假值。嗯,这太恶心了。下面是发生的事情: [-1,1][+!!boolean] 这将布尔值转换为真/假布尔值。是求反运算,因此当执行两次时,将强制求反运算或原始值的布尔值。基本上,它是: !!boolean +将右侧变成数字+true->1和+false->0 第一位是数组。它通过右边的任何内容对数组文本进行索引 简而言之,如果boolean为true,它将获取第二个元素,否则将获取第一个元素 var x =

我在调试JS代码时发现了这一行。顾名思义,var boolean可以有真值也可以有假值。

嗯,这太恶心了。下面是发生的事情:

[-1,1][+!!boolean]
这将
布尔值
转换为真/假布尔值。
是求反运算,因此当执行两次时,将强制求反运算或原始值的布尔值。基本上,它是:

!!boolean
+
将右侧变成数字<代码>+true->
1
+false
->
0

第一位是数组。它通过右边的任何内容对数组文本进行索引

简而言之,如果
boolean
为true,它将获取第二个元素,否则将获取第一个元素

var x = boolean;
if (x) {
    x = true;
} else {
    x = false;
}
一个不那么可怕的版本(使用三元):

或滥用
&&
|

var x = boolean ? 1 : -1;

它试图根据变量从第一个数组中选择一个元素:

var x = (boolean && 1) || -1;
该代码相当于:

[-1,1][INDEX BASED ON BOOLEAN VALUE]
}

解释:

[+!!boolean]
将根据boolean的值返回0或1,已完成双重否定以将所有falsy值(如false、空数组、未定义、空对象)转换为boolean false,并将truthy值转换为boolean true。
+
放在它们前面,将它们键入一个整数,从而使其成为目标数组[-1,1]

的有效索引。第一位创建一个具有两个值的数组:

var myArr = [-1,1];
var selected = null;
if(boolean === false ){
     selected = myArr[0];
}
else {
     selected = myArr[1];
第二位通过执行双重反转确保“布尔”实际上是布尔值:

[-1,1]
加号运算符用于将该布尔值转换为数字,其中
true=>1
false=>0

最后,该数字用于从该数组中的两个值中选择一个,即该表达式将“true”变为1,“false”变为-1

但是,这可能更具可读性:

!!boolean == boolean

表达式
[-1,1]
是一个数组,包含值
-1
1

第二组括号从数组中获取一个值。e、 例如,如果
x
是一个数组,则
x[0]
获取第一个元素。如果我们写
y=[-1,1][0]
,这与以下内容相同:

boolean ? 1 : -1;
那么,现在如何处理
+!!布尔值
? 嗯,
如果值不是“falsy”,则将其转换为布尔值。并应用
再次转换它
true
,如果它是假的,则代码>再次转换它
false
。(我推荐truthy和falsy这两个词)

最后,
+
(正)运算符将其转换为数字。将其视为
-
(负)运算符的对立面。因此,
+true
转换为
1
+false
转换为
-1

如果您采用它的扩展形式,并将其作为函数编写,那么(在我看来):


还有更少的字符!你在哪里找到这样的代码的???非常感谢!事实上,我正在浏览一段插件代码,不管你觉得这句话有多恶心,现在对我来说还是有意义的。
boolean ? 1 : -1;
var x = [-1,1];
y = x[0];
function( value ){
    var  output_values  =  [ -1, 1 ]
      ,  boolean        =   !!value
      ,  index          =    +boolean
      ;        
    return output_values[ index ];
}