假设我有一个对象,它根据函数的返回值分配属性:
var i = 0;
var f = function() { return ++i; }
var foo = {
a:f(),
b:f(),
c:f()
};
是否保证 foo.a 为 1,foo.b 为 2,foo.c 为 3?我知道 JS 不保证迭代对象时的顺序,那么赋值呢?
JS规范中是否有指定?我只是出于教育原因询问。
Thanks.
标准 ECMA-262 (5.1) - 第 11.1.5 节 - 对象初始化程序
制作 PropertyNameAndValueList : PropertyNameAndValueList ,
PropertyAssignment 的评估如下:
1. Let obj be the result of evaluating PropertyNameAndValueList.
2. Let propId be the result of evaluating PropertyAssignment.
...
5. Call the [[DefineOwnProperty]] internal method of obj with arguments propId.name, propId.descriptor, and false.
6. Return obj.
所以是的,该命令是由标准强制执行的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)