对象中属性的JS赋值顺序
JS assignment order of properties in objects
刚才有一个快速的问题,关于为什么某个分配顺序有效,而另一个则无效。
我想创建一个简单的"inherit"/"copy"函数(只是为了测试它),将属性从一个对象复制到另一个对象:
var cat = { tail:"yes", hairy:"yes, hairy" };
var dog = { sick:"extremely ill"};
function inherit(obj1, obj2) {
for (var p in obj1)
{
obj2[p] = obj1[p]; // this works, but "obj1[p] = obj2[p];" doesn't. Why??
}
}
inherit(cat, dog);
console.log(dog.tail);
您正在对obj1
的所有属性进行循环,因此所有这些属性都存在于obj1
上。
如果您试图从obj2
复制,那么您正试图复制(该对象上)不存在的属性,因此会导致错误。
您正在读取属性var p in obj1
,因此这些索引必然只存在于obj1
中。因此,尝试分配obj1[p] = obj2[p];
不会像预期的那样工作,因为不能保证(在您的特定示例中肯定是这样)obj[p]
已经定义。此分配将简单地将undefined
分配给obj1
中不存在于obj2
中的索引,并复制obj2
中确实存在索引的值。
您需要分别对每个对象的属性进行循环(即两个循环),尽管这也不是一个好主意,因为在两个对象上具有相同索引的任何值都会导致一个值被删除。你到底想通过这种方式实现什么?这似乎是一件非常危险/不稳定的事情。
相关文章:
- Javascript变量赋值|
- 无法为打字稿字典赋值
- Javascript-根据赋值顺序,按键合并对象数组
- Javascript:应为赋值或函数调用,但实际看到的却是表达式
- 如何通过json对象数组为嵌套对象赋值
- 赋值后的回调函数
- ||(OR)运算符如何在赋值中工作
- 可以使用属性赋值实现多个函数
- HEAD中LINK和STYLE元素的求值顺序
- 将ECMAScript 6析构函数赋值(ES2015)重构为旧版本的javascript
- 如何在javascript中为全局变量赋值
- Javascript:JSHint:应为赋值或函数调用,但实际看到的却是表达式
- JavaScript:在嵌套循环中为数组赋值
- 未设置变量的赋值| jQuery的作用是什么
- 了解 JavaScript 对象赋值的顺序
- Javascript 中的赋值顺序
- javascript 中原型赋值的顺序
- jQuery查找子项并按顺序赋值
- 对象中属性的JS赋值顺序
- Javascript赋值表达式的执行顺序