在这个JS MDN页面上,它说:
JavaScript 1.8.1注意事项
从JavaScript 1.8.1开始,在对象和数组初始值设定项中设置属性时不再调用setter.
我只是无法弄清楚这是想告诉我的.
这段代码片段:
var o = {};
o.seven = 7;
Run Code Online (Sandbox Code Playgroud)
这个代码片段:
var o = { seven: 7 };
Run Code Online (Sandbox Code Playgroud)
通常是等价的; 但如果它们前面有这段代码片段:
Object.prototype.__defineSetter__('seven', function(x) { alert(x); });
Run Code Online (Sandbox Code Playgroud)
然后只有前者会发出警报7(因为setter被调用o.seven = 7,而不是被调用o = { seven: 7 }),只有后者才会被设置o.seven为7.
我认为这指的是JSON劫持的问题。看一下
\n\n要重新发布我对这个已删除问题的回答:
\n\n\n\n\n根据规范,数组 ( EcmaScript 5.1\n \xc2\xa711.1.4 ) 和对象文字\n ( EcmaScript 5.1 \xc2\xa711.1.5 ) 都不应被劫持:
\n\n\n
\n- 他们称之为“具有该名称的标准内置构造函数”,而不是您可能覆盖的名称
\nwindow.Array或window.Object- 他们使用 [[defineOwnProperty]],它绝对不处理
\nObject.prototype.
如今,在兼容 ES 5.1 的浏览器中这不再是问题。
\n