0

シナリオ

次のコードを書き留めたとき、私はいくつかのJavascriptオブジェクトプログラミングをいじっていました(デモはこちら):

    var o = {
        "key":1,
        "value": 1234,
        toString: function(){
            var res = this.key + ";" + this.value;
            return res;
        }
    };

    var p = {
        "key":2,
        "value": 5678
    };

    document.write(o);
    document.write("</br>");
    document.write(p);

ご覧のとおり、 toString() メソッドをo object使用すると、 toString() メソッドを呼び出さずにp objectが表示されますが、 は ... として表示されます。

質問

  1. リテラルは、toStringオブジェクト表現の一種のデフォルト名ですか? それとも他に何ですか?

  2. [object Object]表記の意味は?

4

5 に答える 5

2

toString リテラルは、オブジェクト表現の一種のデフォルト名ですか? それとも他に何ですか?

toStringこれは、オブジェクトのプロパティに対する関数です。

Javascript では、オブジェクトが文字列にキャストされると ( EcmaScript §9.8: ToString、たとえば文字列連結で使用される場合、または or で使用されるalert()場合document.write())、そのtoStringメソッドが呼び出されます ( ToPrimitiveおよびDefaultValue - §8.12.8を介して)。

多くの場合、カスタム オブジェクトのプロトタイプでそれを指定し、すべての組み込み型にも 1 つ指定します (たとえばArray.prototype.toString、値をカンマで結合します)。オブジェクトリテラルで明示的に設定しました。

[object Object] 表記の意味は何ですか?

toStringこれは、オブジェクトのデフォルトの実装の結果です。のすべてのインスタンスに対してObjectEcmaScript §15.2.4.2では+ class +Object.prototype.toStringを返すように指定されており、プレーン オブジェクトの内部 [[class]] は "Object" です。[object]

于 2012-09-27T14:44:08.743 に答える
1

toString はリテラルではなく、関数であり、すべてのオブジェクトに対して定義されています。関数は JavaScript の「ファースト クラス」であることを忘れないでください。

[object Object]オブジェクトに対するブラウザのデフォルトの toString() の戻り値です 。

Mozilla の優れたドキュメントは次のとおりです。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/toString

于 2012-09-27T14:29:59.253 に答える
0

JavaScriptのすべてのオブジェクトにはtoString()メソッドがあります。このメソッドは、オブジェクトが文字列コンテキストで使用されるときに暗黙的に呼び出されます。たとえば、withdocument.write(o)だけでなく、を記述した場合も同様ですo + ' another string'

このメソッドは'[object Object]'デフォルトで返されますが、これはあまり便利ではありませんが、オーバーライドして好きなものを返すことができます。のようなオブジェクトNumericStringまたはDateこれを実行します。

于 2012-09-27T14:36:48.070 に答える
0
  1. オブジェクトが write に送信されると、write はオブジェクトの toString メソッドを内部的に呼び出します。

  2. toString のデフォルトの実装では、1 つ目objectは (配列やプリミティブではなく)Objectオブジェクトであることを定義し、2 つ目は Object 型のオブジェクトであることを定義します。意味のある文字列表現を持たない一部の組み込みオブジェクト型 (たとえば、DOM ノードなど) は、Object ではなく型名を返します。独自のオブジェクトが write に渡されたときに型名を出力するようにするには、toString をオーバーライドする必要があります。

于 2012-09-27T14:33:01.123 に答える
-1

'[object Object]' は、toStringから派生したすべてのオブジェクトに継承されるデフォルト メソッドによって返されますObject

于 2012-09-27T14:35:46.790 に答える