Lav*_*N R 6 javascript arrays string add
var array = [1,2,4];
array+1 //gives '1,2,41'.
Run Code Online (Sandbox Code Playgroud)
谁能解释这种行为?
\n\n\n谁能解释这种行为?
\n
这个答案试图从 spec 的角度解释这种行为。
\n\n根据规范,在 的运行时求值期间+,两个表达式(左和右)都将转换为其原始值。
\n\n\n\n
\n- 令 lprim 为 ToPrimitive(lval)。
\n- 令 rprim 为 ToPrimitive(rval)。
\n
toPrimitive尝试传递hint:number(因为在算术求值期间调用)到OrdinaryToPrimitive
\n\n\n\n
\n- 如果提示是“字符串”,则
\n
\n a。令 methodNames 为 \xc2\xab"toString", "valueOf"\xc2\xbb。- 否则,
\n
\n b. 令 methodNames 为 \xc2\xab"valueOf", "toString"\xc2\xbb。//这会被调用
由于其中一个值通过上面的 4a) 转换为字符串,因此发生了字符串连接。
\n\n因此
\n\n[1,2,4] + 1=> [1,2,4].toString() + "1"=> "1,2,4" + "1"=> (最后)"1,2,41"