JS OOP内置对象数组

时间:2011-08-08 16:23:08

标签: javascript oop

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.

为什么会这样?

3 个答案:

答案 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('')