BFE.devAI解答 - JavaScript 小测验
11. Implicit Coercion II
答案如下:
''
'1'
'1'
'11'
'2' + 1 = '21'
-1
-1
0
2 - 1 = 1
'[object Object]'
'[object Object][object Object]'
NaN
解析:
当 +
运算符用于字符串和数组时,会将数组隐式转换为字符串,然后对它们进行字符串的拼接操作。例如,[] + []
得到的结果是一个空字符串 ''
。
当 +
运算符用于一个数组和一个数字时,数组也会被隐式转换为字符串,并且数字也被转换为字符串。例如,[] + 1
的结果是 '1'
,这是因为在字符串的拼接过程中,数字 1 会被转换为字符串 '1'
,然后和空字符串拼接起来。
当 +
运算符用于数组和另一个非数字类型时,数组会被转换为一个以逗号分隔的字符串。例如,[[]] + 1
的结果是 '1'
,因为空数组 [[]]
会被转换为字符串 ' '
,然后和数字 1 拼接起来。
当 +
运算符用于嵌套数组和数字时,只有最内层的数字会被转换为字符串并进行拼接。例如,[[[2]]] + 1
的结果是 '21'
,因为数字 2 会被转换为字符串 '2'
,然后和数字 1 拼接起来。
当 -
运算符用于数组和数字时,数组会被转换为一个数字,然后和另一个数字进行减法操作。由于空数组会被隐式转换为数字 0,因此 [] - 1
和 [[]] - 1
的结果都是 -1
。
当 +
运算符用于数组和对象时,数组会被转换为一个以逗号分隔的字符串,然后和对象隐式转换为字符串的结果进行拼接。例如,[] + {}
的结果是 '[object Object]'
,因为空数组会被转换为字符串 ''
,然后和对象 {}
的字符串值 '[object Object]'
进行拼接。
当 +
和 -
运算符都用于对象时,对象会被转换为一个数字。由于数组和对象的默认 toString() 方法返回的都是 '[object Object]'
,因此对象相加和相减的结果都是 NaN。