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,例如在字符串连接中使用时,或者在alert()or中document.write())它的toString方法被调用(通过ToPrimitiveDefaultValue - §8.12.8)。

通常,您会在自定义对象的原型上指定它,并且所有内置类型都有一个(例如Array.prototype.toString,用逗号连接值)。您已在对象文字中明确设置它。

[object Object] 表示法是什么意思?

这是toString对象的默认实现的结果,即。对于Object. EcmaScript §15.2.4.2指定Object.prototype.toString返回[object+ class + ],普通对象的内部 [[class]] 是“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
  1. 当一个对象被发送到 write 时,write 在内部调用对象的 toString 方法,该方法可能(如在 o 中)或可能不会(如在 p 中)被覆盖。

  2. 在 toString 的默认实现中,第一个object定义它是一个对象(与数组或原语相反),第二个Object定义它是一个 Object 类型的对象。一些没有有意义的字符串表示的内置对象类型(例如 DOM 节点)返回它们的类型名称而不是 Object。当您希望自己的对象在传递给 write 时输出其类型名称,您必须重写 toString。

于 2012-09-27T14:33:01.123 回答
0

JavaScript 中的每个对象都有一个toString()方法,当对象在字符串上下文中使用时会隐式调用该方法,例如 with ,document.write(o)但也可以在编写o + ' another string'.

该方法'[object Object]'默认返回,这不是很有用,但可以覆盖它以返回您喜欢的任何内容;对象,例如NumericStringDate执行此操作。

于 2012-09-27T14:36:48.070 回答
-1

'[object Object]' 由默认toString方法返回,该方法由Object.

于 2012-09-27T14:35:46.790 回答