ECMAScript 5中的“采取行动”是什么意思?

时间:2014-11-21 07:06:49

标签: javascript ecmascript-5

以下是摘录。

  

15.2.2.1 new Object([value])#Ⓣ
  当调用Object构造函数时没有参数或具有一个参数值,以下内容   采取的步骤:

     

如果提供了值,那么如果Type(value)是Object,那么

     

如果值   是一个原生的ECMAScript对象,不要简单地创建一个新对象   回报价值。

     

如果值是主机对象,则执行操作   并以与实现相关的方式返回结果   可能取决于主机对象。

我只是想知道传递本机对象和将主机对象传递给Object构造函数之间有什么不同。换句话说,如果我调用新的Object(文档),那么幕后会发生什么?通过检查返回值,我看不出任何差异。

提前致谢。

2 个答案:

答案 0 :(得分:1)

对于本机对象:javascript 不创建新对象,只返回值。

但是对于主机对象:javascript首先创建一个新对象,然后只返回值。

这是规范所说的。希望你明白!

答案 1 :(得分:0)

摘录说的是,如果value是一个主机对象,例如Document,那么由实现来决定new Object(value)将做什么(“采取的行动[...]以依赖于实现的方式,可能依赖于“value”以及它将返回什么值(“结果以依赖于实现的方式返回,可能取决于”value)。

即使value是主机对象,大多数情况下new Object(value)也不会做任何事情并返回value(就像它是本机对象一样)。在Document的特定情况下,我强烈期望这种行为。但ECMAScript标准并不要求这样做。 (而且定义Document类型的DOM规范似乎也不需要它。)