rwa*_*ace 2 javascript ecmascript-harmony ecmascript-6
要在ES6中创建地图,您应该说Map()还是new Map()?
两者似乎都运行良好node --harmony.
规范草案说:"Map构造函数是%Map%内在对象和全局对象的Map属性的初始值.当Map作为函数而不是构造函数调用时,它使用内部状态初始化它的值支持Map.prototype内置方法所必需的." 这也似乎表明他们都应该工作.
鉴于此,Map()虽然这是一种主观判断,但看起来更好,因为更短; 客观地说他们似乎可以互换?
虽然目前的浏览器似乎允许使用Map()without new(如@ RobG的回答所示),但这实际上是不正确的.
由于稳定性问题,Node.js v0.10使用旧版本的V8(Node.js中的JavaScript引擎),如果你这样做,它就不会抛出Map().
Node.js v0.10使用V8 v3.14.5,但不抛出的问题Map()仅在v3.20.12中修复.
Chrome使用较新版本的V8,如果您不使用,则会引发错误new.我不确定为什么Firefox不会抛出错误.
根据目前的规范草案,如果Map()没有new:
- 让地图是这个值.
- 如果Type(map)不是Object,则抛出TypeError异常.
- 如果map没有[[MapData]]内部槽,则抛出TypeError异常.
- 如果map的[[MapData]]内部槽未定义,则抛出TypeError异常.
通常在构造函数中,应该创建的对象是this.它要求传递的对象是一个实例Map,并且尚未初始化([[MapData]]必须是未定义的).
显然这是因为它阻碍了本机构造函数的子类化,这在ES6中是可能的.
| 归档时间: |
|
| 查看次数: |
426 次 |
| 最近记录: |