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