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

How to make Array.toString() in IE9 compatible with modern browsers

本文关键字:浏览器 IE9 何使 中的 Array toString      更新时间:2023-09-26

我想在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]

我该如何解决这个问题?

如果您打算使用 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/

使用 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(",");
}