Javascript 为什么要解决这个问题;b";==([]+;{})[!+;[]&<;!+;[])为true

Javascript 为什么要解决这个问题;b";==([]+;{})[!+;[]&<;!+;[])为true,javascript,type-coercion,Javascript,Type Coercion,有人能解释一下吗 console.log(“b”=([]+{})[!+[]分解表达式([]+{})[!+[]b: 分解方括号内的表达式: !+[]<<!+[] 相当于 true << true 或“b”。分解表达式([]+{})[!+[]b: 分解方括号内的表达式: !+[]<<!+[] 相当于 true << true 或者“b”。让我们一步一步地理解它 在数组上执行算术运算时,它在内部调用toString console.log([

有人能解释一下吗


console.log(“b”=([]+{})[!+[]分解表达式
([]+{})[!+[]b

分解方括号内的表达式:

!+[]<<!+[]
相当于

true << true

或“b”。

分解表达式
([]+{})[!+[]b

分解方括号内的表达式:

!+[]<<!+[]
相当于

true << true

或者“b”。

让我们一步一步地理解它

在数组上执行算术运算时,它在内部调用toString


console.log([]+1,typeof([]+1))
让我们逐步理解它

在数组上执行算术运算时,它在内部调用toString


console.log([]+1,typeof([]+1))
([]+{})
===
“[object object]”
!+[]
=
true
true
true这是许多不同的运算符和文本彼此相邻,因此很难阅读。有一个类似的JS编译器,它用6个字符创建有效的JS。它的算法在
([[]+{})
=
'[object object]'
!+[]
=
true
true这是许多不同的运算符和文本彼此相邻,因此很难读取。有一个类似的JS编译器,它可以在6个字符中创建有效的JS。其算法在
(!+[]) << (!+[])
true << true
1 << 1
'[object Object]' [!+[]<<!+[]]
'[object Object]' [2]