JavaScript 中,由数组得到字符串的细节问题


在红宝书中,NCZ 说在由数组得到字符串值时,是对数组中的每一项元素调用了相应的方法,比如显式调用数组的 toString() 方法或者在需要使用字符串参数的地方默认调用 toString() 方法,会对数组的各项元素分别调用 toString() 方法,然后得到对应的字符串值。或者显式调用数组的 toLocaleString() 方法,那么就会对各元素也调用 toLocaleString() 方法,然后得到相应的字符串值。
所以按照我的理解,我试着做了更改 Number.prototype.toString = function() { return 'w_e'; } ,然后执行 [1,2].toString() ,但是结果还是 '1,2' 。
请问这里的错误在哪里?谢谢。

JavaScript

ronson 9 years, 7 months ago

这是说的每一项元素应该是指非基本类型元素,像数字和布尔值等基本类型函数应该不会。不信你可以试一下这个 DEMO:


 var arr = [function a(){}, function b() {}];
console.log("Normal toString: ", arr.toString());
Function.prototype.toString = function() { return this.name; };
console.log("Custom toString: ", arr.toString());

KAIYSA answered 9 years, 7 months ago

你试试


 javascript


 [new Number(1), new Number(2)].toString()

顺便


 javascript


 typeof 1
// "number"

typeof new Number(1)
// "object"

number 类型的值和 Number 对象是不一样的,再举个例


 javascript


 !!0
// false
!!new Number(0)
// true

参考 ECMA-262 的第 4.3.19-4.3.21 和 8.5 章节

kamite answered 9 years, 7 months ago

Your Answer