参见英文答案 >
Why is [1,2] + [3,4] = “1,23,4” in JavaScript?13个
var array = [1,2,4]; array+1 //gives '1,41'.
谁能解释这种行为?
解决方法
Can anyone explain this behavIoUr?
这个答案试图从规范的角度解释这种行为.
根据spec,在运行时评估期间,两个表达式(左和右)都转换为它们的原始值.
- Let lprim be ToPrimitive(lval).
- Let rprim be ToPrimitive(rval).
toPrimitive尝试将提示:数字(因为在算术评估期间调用)传递给OrdinaryToPrimitive
- If hint is “string”,then
a. Let methodNames be «”toString”,“valueOf”».- Else,
b. Let methodNames be «”valueOf”,“toString”». //this gets invoked
由于其中一个值通过上面的4a)转换为字符串,因此会发生字符串连接.
于是
[1,4] 1 => [1,4] .toString()“1”=> “1,4”“1”=> (最后)“1,41”