问题描述
- 关于javaScript中toString的问题
-
var a = {}; var _ff = a.toString; var arr = [1,2,3,4]; _ff.call(arr); //"[object Array]" toString(arr); //"[object Object]" _ff(arr); //"[object global]" arr.toString(); //"1,2,3,4" 同样的toString方法的调用
我想知道得出各种结果的原因
求大神帮忙解答
解决方案
_ff.call(arr); 表示输出当前对象的字符串表示。Ecmascript5中定义的数组的标准写法就是"[object Array]",toString(arr)那个其实调用的是window.toString();而arr是没有任何意义的,把arr换成任何对象比如toString(0)、toString({})都是一样的输出,而且不同的浏览器显示的不一样,chrome下显示的是"[object Window]",_ff(arr)其实调用的是toString()这个函数本身,你可以直接输出_ff 看一下,会发现_ff输出的是一个函数,函数加上括号调用,就是调用该函数,因此返回"[object global]",这个结果也是跟浏览器相关的,chrome下显示的是"[object Undefined]",arr.toString()这个也是Ecmascript5的标准用法,数组的toString()默认就是用逗号分隔的。
解决方案二:
```(1)
_ff.call(arr); //"[object Array]"
// 注意 a 其实是一个空对象(不是数组),所以它的 toString() 其实就是默认object的toString()
// 但是又用了 arr 作为调用的主体对象,所以有类型 Array。比如:
_ff.call(new Date()); //"[object Date]"
_ff.call("abc"); //"[object String]"
// 假如你把 a 定义为数组,那么就是数组的输出了
var a = {};
...
_ff.call(arr); //"1,2,3,4"
先说(3)
_ff(arr); //"[object global]"
// 因为 toString() 是不需要参数的,这个arr参数直接被忽略。等于直接调用:
a.toString();
(2)
toString(arr); //"[object Object]"
// 调用当前对象的 toString(),同样忽略arr。
// 很明显不是用默认的方法,自己实现过的。
(4)
arr.toString(); //"1,2,3,4"
// Array.toString(),没什么要多说的了
时间: 2024-09-13 10:37:09