2016-09-27 77 views
4

會發生什麼:當您在JavaScript中使用參數實例化新對象(1)時會發生什麼?當你調用

new Object(1)

當我嘗試過了,它返回:

[Number: 1] 

我想知道什麼是對那裏發生的。任何信息,將不勝感激。

+2

如何在數據輸入爲'Number''1時記錄'[String:'a']'?你能重現在[stacksnippets](https://blog.stackoverflow.com/2014/09/introducing-runnable-javascript-css-and-html-code-snippets/)?或[plnkr](http://plnkr.co)? – guest271314

+0

'> var b = new Object(1)' '> b' '[Number:1]' –

+0

@CairoStewart:那麼''a''從哪裏來? –

回答

6

你可以看一下規範:

當調用new Object(arg),我們實際上調用ToObject(arg)

ToObject被定義爲

的抽象操作ToObject根據表13

轉換參數Object類型的值和表表示:

編號:返回一個新的Number對象,其[[NumberData]]內部插槽被設置爲自變量的值。有關數字對象的說明,請參閱20.1

所以它與調用new Number(1)相同,即它創建一個數字對象。


基本數據類型字符串,數字和布爾具有可以通過調用等效構造函數來創建等效對象值。但由於對象值的行爲與基本值不同,因此這不是一件常見的事情,即在某些情況下,數字基元的行爲與數字對象的行爲不同。

實施例:

Boolean(0); // false 
Boolean(new Number(0)); // true 
0

下面是默認constuctor的文檔: http://www.ecma-international.org/ecma-262/5.1/#sec-15.2.2.1

當對象構造被稱爲不帶參數的或者被一個 參數值,下面的步驟是採取:

  • 如果提供值,則
    • 如果Type(值)爲對象,然後
      • 如果該值是原生的ECMAScript對象,沒有創建新的對象,而只是返回值。
      • 如果該值是主機對象,則採取操作並以依賴於實現的方式返回結果,該結果可能取決於主機對象。
    • 如果Type(value)是String,則返回ToObject(value)。
    • 如果Type(value)是布爾值,則返回ToObject(value)。
    • 如果Type(value)是Number,則返回ToObject(value)。
  • 斷言:未提供參數值或其類型爲空或未定義。
  • 設obj爲新創建的本地ECMAScript對象。
  • 將obj的[[Prototype]]內部屬性設置爲標準內置對象原型對象(15.2.4)。
  • 將obj的[[Class]]內部屬性設置爲「Object」。將obj的[[Extensible]]內部屬性設置爲true。
  • 按照8.12的規定設置obj的所有內部方法。
  • 返回物品。
+0

僅供參考,目前的規格是http://www.ecma-international.org/ecma-262 /7.0/,它不再包含該特定段落。 –

+0

讓我們看看這個:http://www.ecma-international.org/ecma-262/7.0/#sec-object-value –

+0

是的,這就是我在我的答案中鏈接到的。我只是說這個算法已經改變,並且不存在於這種形式的最新規範中。 –

相關問題