Number函数与new运算符的交互机制探究
关于JavaScript内置函数
Number的规范解析 刚好研究过这块,我来给你理清楚JavaScript里内置函数Number的具体执行逻辑——选它当例子是因为这类逻辑在ECMAScript规范里的其他不少函数里都通用。
根据ECMAScript规范的20.1.1.1 Number ( value )条目,当调用Number并传入参数value时,会执行以下步骤:
- 若未传入任何参数,令
n为+0;- 否则,令
n为? ToNumber(value);- 若
NewTarget为undefined,则返回n;- 令
O为? OrdinaryCreateFromConstructor(NewTarget, "%Number.prototype%", « [[NumberData]] »);- 设定
O的[[NumberData]]内部槽为n;- 返回
O。
简单拆解下逻辑:
- 当你把
Number当作普通函数调用(比如Number('123')),NewTarget是undefined,所以直接返回转换后的原始数值; - 当你用
new关键字把它当作构造函数调用(比如new Number('123')),就会创建一个Number实例对象,内部槽存着对应的数值。
这种“既可以作为普通函数做类型转换,又可以作为构造函数创建包装对象”的模式,在String、Boolean这些内置函数里也是完全一致的逻辑哦。
内容的提问来源于stack exchange,提问作者MaximPro
相关产品推荐
相关产品推荐

