如何使IE9中的Array.toString()与现代浏览器兼容

时间:2013-10-28 08:08:06

标签: javascript arrays internet-explorer dom tostring

我想为DOM中的属性分配一个数组值:

var myArray = [1, 2, 3];
elem.setAttribute('value', myArray)

在现代浏览器中,你得到了结果:

<input value="1,2,3">

但是在较旧版本中(直到IE9):

<input value="[object]">

JSON.stringify不是解决方案,因为这会生成:

<input value="[1,2,3]">

问题是现代浏览器中的myArray.toString()输出:

1,2,3

而在较旧的那些:

[object]

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果您打算使用toString方法,可以像这样覆盖它:

var myArray = [1, 2, 3];

Array.prototype.toString = function () {
    return this.join(', ');
}

console.log(myArray.toString()); //1, 2, 3

这适用于大多数旧版浏览器。

小提琴:http://jsfiddle.net/KyleMuir/KUzZL/

答案 1 :(得分:0)

使用JSON.stringify(array)代替.toString()。此外,您可以编写一个这样的函数,将您的数组转换为字符串。

function arrayToString(array) {
   var arrayStr = JSON.stringify([1, 2, 3]);
   arrayStr = arrayStr.substring(1);
   arrayStr = arrayStr.substring(0, arrayStr.length -1);
   return arrayStr;
}

甚至缩短:

var str = array.join(",");

示例:

arrayToString([1, 2, 3, 4]); // returns "1, 2, 3, 4"

此外,您可以扩展Array的原型覆盖toString()函数:

Array.prototype.toString = function () {
    return this.join(",");
}