var v = new Array('Bill','Erik','Pam');
v.toString();
v.constructor;
在Firebug 1.7.3,FF 5.0.1
中v.constructor //Returns "undefined, not Array();
也:
var s = new String('Couch Potato');
s.indexOf('Couch');
s.slice(1,5);
s.split(" ");
s.join(' '); //FF returns "s.join" is not a function.
为什么会这样?
答案 0 :(得分:2)
在FF 5.0.1中,我得到了这个结果:
var arr = [1,2,3];
typeof arr.constructor // function
但是没有typeof
,我明白了:
var arr = [1,2,3];
arr.constructor // [ undefined ]
...显示undefined
,但它在数组中。我猜这只是FireBug中的显示问题。
尝试这样做:
var arr = [1,2,3];
var arr_2 = arr.constructor( 4,5,6 );
...你会看到arr_2
是你期望的数组。
关于你的.join()
不是函数,这是因为s
仍然是一个字符串,而不是一个数组。这是因为.split()
不会将String更改为数组,而是返回数组。
你可以这样做,
s = s.split(" ");
var joined = s.join(' ');
......它会起作用。
答案 1 :(得分:1)
我不确定构造函数(它在Chrome上运行正常),但join
方法不是字符串,也不是字符串。
您可以将数组加入字符串,例如
[1, 2, 3].join(" ") === "1 2 3";
但字符串无法加入 - 它应该怎么做?
答案 2 :(得分:1)
对于构造函数属性,显然firebug有一个bug。尝试提醒该值(alert([].constructor)
),您会发现它不是undefined
join
方法是一个数组方法,firebug在字符串上调用时显示错误是正常的。在javascript中,String
不是char
的数组,就像其他语言一样(可能你感到困惑)。
在您将字符串转换为数组后,您可以调用join
方法的唯一方法是:"abcd".split('').join('')
。