[].valueOf()
メソッドは配列自体を返します。これによると
document.write([["a"]],["b"])
['a']b を返す必要がありますね?しかし、これは起こっていませんab
。
文字列要素の場合、.toString() メソッドはこれを返します。
["a","b"].toString()//a,b
しかし、配列を持つ要素の場合、それは返されるべきです
[["a"],"b"].toString()//[a],b
[].valueOf()
メソッドは配列自体を返します。これによると
document.write([["a"]],["b"])
['a']b を返す必要がありますね?しかし、これは起こっていませんab
。
文字列要素の場合、.toString() メソッドはこれを返します。
["a","b"].toString()//a,b
しかし、配列を持つ要素の場合、それは返されるべきです
[["a"],"b"].toString()//[a],b
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"
ドキュメントから
記述したテキストは、ドキュメントの構造モデルに解析されます。
したがって、配列を送信すると、配列の値が文字列に評価され[["a"]],["b"]
、テキスト値のみを持つドキュメント構造が作成されます。
これを行う場合:
document.write(["<a>a</a>", "<a>b</a>"])
,
で区切られた2 つのアンカー要素を作成することがわかります。array.join(',')
またはこれを提供するだけです:
document.write(["<a>a</a>"], ["<a>b</a>"])
今回は、コンマが表示されなくなった 2 つのアンカーが作成されます。
document.write([["a"]]",",["b"])
write はコンマで区切られた無制限の引数を取得するため、実際には予想される動作です
使用したいものを印刷するには:
document.write(["a","b"])
このようにして、配列のリストではなく配列を出力します