我在JavaScript中看到了以下语法,允许您向Objects元素添加函数,以便您可以执行切换选项。请考虑以下事项:
var insert = insert || {};
insert.Actor = function (user) {
//Do Somthing
}
这将允许您执行以下操作:
function addUser(type) {
if (insert[type]) {
return insert[type](user);
}
}
我喜欢这个实现,但我有两个问题:
这句话究竟在做什么,我可以宣布一个常规对象吗?
var insert = insert || {};
除了可读性之外,使用它而不是常规的switch语句可以获得哪些优势。
答案 0 :(得分:3)
您可以在JavaScript中向任何对象添加函数。你看到的语法只是“说”如果对象已经存在...使用它,否则,创建一个新对象。
var insert = insert || {};
变量insert
被设置为自身,||
(OR)被设置为{}
,这是新对象的短语法。
答案 1 :(得分:1)
这句话究竟在做什么,我可以宣布一个常规对象吗?
在JS中,如果未定义foo,foo.bar
会导致引用错误。 var insert = insert || {};
确保insert
成为对象,以便像if(insert[type])
这样的检查将按预期工作(insert[type]
将是未定义的)
更一般地说,||
是逻辑OR运算符,其工作方式如下:http://www.ecma-international.org/ecma-262/5.1/#sec-11.11如果左侧表达式(在这种情况下为insert
)是“truthy值”(包括对象但不包括0
或undefined
)等值,则值为LHS;否则该值是RHS表达式。
除了可读性之外,使用它而不是常规的switch语句可以获得什么好处。
你必须在switch语句的每个块中有许多if(insert)
形式的条件。使用这种方法,你可以避免使用它们。
答案 2 :(得分:0)
insert || {};
从左到右返回第一个操作数。
这是一个“OR”运算符。在Javascript中,“OR”运算符不仅仅返回true / false布尔值。这只是一个简短的说明,如果未定义insert,则将其定义为对象。
答案 3 :(得分:0)
insert
已经在该范围内宣布,以及它是否与您想要的insert
相同。显然,如果insert
已在其他地方定义并且没有按照您的意愿执行,那么这种语法没有帮助,因为它会将范围中的insert
设置为{{1}已经在其他地方定义了。insert
语句,这是一种风格偏好。这真的就是它的全部。你必须问自己,“谁会读这篇文章,哪些对他们有什么帮助才能理解它的作用?”答案 4 :(得分:0)
var insert=insert||{};
相当于:
if (!insert) var insert={};
(如果插入对象不存在,则创建它)
第一个表达式只是缩短了代码。
这通常用于模块化脚本,因为任何模块都可以初始化插入对象,然后由其他模块重用。