这个表达式(({}+;[])[+;[])在JavaScript中是什么意思?
现在我遇到一个奇怪的JavaScript表达式这个表达式(({}+;[])[+;[])在JavaScript中是什么意思?,javascript,Javascript,现在我遇到一个奇怪的JavaScript表达式console.log(({}+[])[+[]]),我试图通过下面的测试来理解它 console.log([])output[] console.log(+[])output0 所以[+[]]等于[0],我猜它看起来像一个数组。但是,我无法理解整个表达式({}+[])[+[]]的意思是什么 基于第二个表达式,我想我们可以得到1。我通过console.log(+!![])完成,但是当我尝试通过console.log(+!![]+!![])完成2时,失败
console.log(({}+[])[+[]])
,我试图通过下面的测试来理解它
console.log([])
output[]
console.log(+[])
output0
[+[]]
等于[0]
,我猜它看起来像一个数组。但是,我无法理解整个表达式({}+[])[+[]]
的意思是什么
基于第二个表达式,我想我们可以得到1
。我通过console.log(+!![])
完成,但是当我尝试通过console.log(+!![]+!![])
完成2
时,失败了
这是我的想法,所以
+!![]++!![]
表示(+!![])+(+!![])
。有人能帮我找出它失败的原因吗?这没什么用处。正如您所说,它从({}+[])
的结果中获得[0]
,即[
:
({}+[])=='[object object]'
,因为您连接的两个对象没有常规的相加方式,所以这只返回括号之间的对象'[object object]'[0]=='['
因为[0]
总是获取字符串的第一个字符(字符串被视为包含单个字母的数组)i++
)。只需在空格之间添加一个空格即可解决此问题:
console.log(+!![]+ +!![])
> 2
但是,由于要添加数组的布尔值(此处为1),也可以保留前缀+
,因为表达式已将此布尔值转换为数字:
console.log(!![] + !![])
> 2
!!
部分只是将后面的内容转换为布尔值。由于!myVar
返回与myVar
的布尔值相反的布尔值,!(!myVar)
,它与!!myVar
将返回与之相反的布尔值。在这种情况下,myVar
将是您的空数组[]
类似,