[].valueOf()
方法返回数组本身。根据这个
document.write([["a"]],["b"])
应该返回['a'] b不是吗?但是这不会发生,只是写ab
。我只是想知道背后的原因。
对于字符串元素.toString()方法返回此内容,
["a","b"].toString()//a,b
但是对于带数组的元素,它应该返回
[["a"],"b"].toString()//[a],b
答案 0 :(得分:4)
将对象传递给document.write时,Javascript会将对象转换为带有.toString()的字符串。在这种情况下,Array.toString()将展平并用逗号连接数组,并将其作为字符串返回。
["this", "is", "an", "array!"].toString(); // "this,is,an,array!"
[["a",["b"]], ["c"]].toString() // "a,b,c"
我们可以将document.write([["a",["b"]], ["c"]])
扩展为以下内容:
var input = [["a",["b"]], ["c"], "d"];
Array.prototype.verboseToString = function verboseToString() {
// Make a copy of the array, so we don't destroy the original
var copy = this.slice(), i;
for (i = 0; i < copy.length; i++) {
// If this is an Array, call verboseToString() on it, and go deeper
if (copy[i] instanceof Array === true) {
copy[i] = copy[i].verboseToString();
}
}
// copy contains non-arrays and we're ignoring other types' toString() output
return copy.join(',');
}
document.write(input.verboseToString()); // "a,b,c,d"
答案 1 :(得分:1)
document.write([["a"]]",",["b"])
用逗号分隔写的get无限参数,这实际上是预期的行为
为了打印你想要的东西:
document.write(["a","b"])
这样您将打印数组而不是数组列表
答案 2 :(得分:1)
来自 docs
您编写的文本将被解析为文档的结构模型。
因此,您发送一个数组,它只会将数组值评估为字符串,以创建[["a"]],["b"]
只有文本值的文档结构。
如果你这样做:
document.write(["<a>a</a>", "<a>b</a>"])
您可以看到它创建了两个由,
分隔的锚元素,因此它只是array.join(',')
或者只是提供:
document.write(["<a>a</a>"], ["<a>b</a>"])
这次它会创建2个你不再看到逗号的锚点。