Javascript 扩展一个对象,不管它是否存在?
问题 我在不可依赖的不同位置声明父对象的某些属性,因此在声明这些属性时很难预测父对象是否仍然存在。无论这种情况发生在何处,如果父对象还不存在,我需要创建它,但如果它存在,则不需要重新声明 示例 假设我在某个地方发生了这样的JavaScript:Javascript 扩展一个对象,不管它是否存在?,javascript,jquery,Javascript,Jquery,问题 我在不可依赖的不同位置声明父对象的某些属性,因此在声明这些属性时很难预测父对象是否仍然存在。无论这种情况发生在何处,如果父对象还不存在,我需要创建它,但如果它存在,则不需要重新声明 示例 假设我在某个地方发生了这样的JavaScript: membership = { id: 5, name: "John" } 在代码中的另一点(可能在上述代码块之前或之后),我有如下内容: membership.level = "gold"; 我基本上需要能够拥有成员资格。level创
membership = {
id: 5,
name: "John"
}
在代码中的另一点(可能在上述代码块之前或之后),我有如下内容:
membership.level = "gold";
我基本上需要能够拥有成员资格。level
创建成员资格
对象(如果它还不存在),但是如果它确实存在,只需添加level
属性即可。类似地,第一个代码块需要以这样一种方式工作:如果成员资格
已经存在,它只需添加id
和名称
属性
我目前掌握的代码
我的解决方案不起作用,但我想你会明白我的意图。这就是我所尝试的:
第一街区
第二街区
当未定义成员资格时,上述错误有时仍然存在。有没有一种方法可以像我描述的那样做到这一点?提前谢谢
var membership = $.extend({}, membership , {
level: "gold"
});
jsiddle:试试这个:
membership = $.extend(membership || {} , {
level: "gold"
});
如果成员身份未定义,它将创建一个对象
通常使用|
运算符完成此操作
var membership = membership || { id: 5, name: "John" };
基本上,如果未定义成员资格
,则成员资格设置为与对象定义相等,但如果定义了成员资格
,则仅重新分配
如果您愿意,您可以使用extend call来完成此操作
//this could be used as the extend membership
var membership = membership || { id: 5, name: "John" };
membership = $.extend(membership , {
level: "gold"
});//this could also be membership.level = "gold";
这样做感觉很糟糕。始终使用
var foo=…
声明变量,以便稍后返回代码并了解发生了什么。另外,JavaScript中隐式声明的全局变量会导致癌症(或者至少是头痛),这并不理想,但在这种情况下是必要的。
var membership = membership || { id: 5, name: "John" };
//this could be used as the extend membership
var membership = membership || { id: 5, name: "John" };
membership = $.extend(membership , {
level: "gold"
});//this could also be membership.level = "gold";