Javascript [-1,1][+;!!布尔值的含义]
有人能解释一下在下面的代码中双重否定Javascript [-1,1][+;!!布尔值的含义],javascript,Javascript,有人能解释一下在下面的代码中双重否定反向var的目的吗 return function (a,b) { var A = key(a), B = key(b); return ((A < B) ? -1 : (A > B) ? +1 : 0)) * [-1,1][+!!reverse]; } 返回函数(a、b){ 变量A=键(A),B=键(B); 返回值((AB)?+1:0))*[-1,1][+!!反向]; }
反向var的目的吗
return function (a,b) {
var A = key(a), B = key(b);
return ((A < B) ? -1 :
(A > B) ? +1 : 0)) * [-1,1][+!!reverse];
}
返回函数(a、b){
变量A=键(A),B=键(B);
返回值((AB)?+1:0))*[-1,1][+!!反向];
}
按照我的理解,目的是从[-1,1]
数组中选择适当的索引,然后在乘法中使用它,但在我看来,[-1,1][+!!reverse]
可以安全地替换为[-1,1][+反向]代码>
我错了吗?在那里,双重否定反向可以获得或阻止什么
我在上看到了上述代码最简单的答案可能是一个反例:
+undefined //NaN
+!!undefined // 0
由于[]的内容通常转换为字符串,[NaN]将尝试从数组中访问名为“NaN”的属性,该属性不存在,并将返回未定义的:
[1,-1][+undefined]
[1,-1][NaN]
[1,-1]["NaN"]
undefined
双重否定可以确保我们有一个正确的布尔值。因为反向可以是任何东西,所以双重否定它会调用JavaScript的“falsy”转换。例如:
!!"hello" // true
!!"" // false
!!1 // true
!!some_undefined_var // false
代码>将值转换为布尔值。如果reverse
不是一个布尔值,则需要使用此选项
考虑:+!!“嗨”
。这是1
,但+“hi”
是NaN双否定基本上将反向转换为布尔值,然后+将该布尔值转换为int
因此,如果反向可能是:
“是”、“否”、“正确”、“错误”、0,1,2、未定义
双重否定会使人失望
“是”->对
“否”->正确
“”->错误
真->真
假->假
未定义->错误
然后,+将trues转换为1,False转换为0,这样就可以将其用作数组索引。这太棒了,很想知道这个问题的答案。它将reverse的值更改为布尔值。我会使用(reverse?1:-1)
而不是[-1,1][+!!reverse]
,IMO更清晰,更便宜,它不需要数组对象和访问索引,甚至布尔转换也是由条件运算符隐式进行的…@CMS我同意,如果整个目的只是在为true时乘以1;否则通过-1,reverse?1:-1
更清晰、更便宜。谢谢,我觉得我需要尽快运行并购买一本Javascript书籍:$