5

[].valueOf()メソッドは配列自体を返します。これによると

document.write([["a"]],["b"]) 

['a']b を返す必要がありますね?しかし、これは起こっていませんab

文字列要素の場合、.toString() メソッドはこれを返します。

["a","b"].toString()//a,b

しかし、配列を持つ要素の場合、それは返されるべきです

[["a"],"b"].toString()//[a],b
4

3 に答える 3

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"
于 2013-06-22T03:47:35.993 に答える
1

ドキュメントから

記述したテキストは、ドキュメントの構造モデルに解析されます。

したがって、配列を送信すると、配列の値が文字列に評価され[["a"]],["b"]、テキスト値のみを持つドキュメント構造が作成されます。

これを行う場合:

document.write(["<a>a</a>", "<a>b</a>"])

,で区切られた2 つのアンカー要素を作成することがわかります。array.join(',')

またはこれを提供するだけです:

document.write(["<a>a</a>"], ["<a>b</a>"])

今回は、コンマが表示されなくなった 2 つのアンカーが作成されます。

于 2013-06-22T03:57:46.003 に答える
1
document.write([["a"]]",",["b"]) 

write はコンマで区切られた無制限の引数を取得するため、実際には予想される動作です

使用したいものを印刷するには:

document.write(["a","b"]) 

このようにして、配列のリストではなく配列を出力します

于 2013-06-22T03:46:21.973 に答える