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]