在JavaScript中使用“|| {}”声明函数映射

时间:2013-08-14 01:33:23

标签: javascript

我在JavaScript中看到了以下语法,允许您向Objects元素添加函数,以便您可以执行切换选项。请考虑以下事项:

var insert = insert || {};

 insert.Actor = function (user) {
    //Do Somthing
}

这将允许您执行以下操作:

function addUser(type) {

    if (insert[type]) {
            return insert[type](user);
        }
}

我喜欢这个实现,但我有两个问题:

  1. 这句话究竟在做什么,我可以宣布一个常规对象吗?

    var insert = insert || {};

  2. 除了可读性之外,使用它而不是常规的switch语句可以获得哪些优势。

5 个答案:

答案 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值”(包括对象但不包括0undefined)等值,则值为LHS;否则该值是RHS表达式。

  

除了可读性之外,使用它而不是常规的switch语句可以获得什么好处。

你必须在switch语句的每个块中有许多if(insert)形式的条件。使用这种方法,你可以避免使用它们。

答案 2 :(得分:0)

insert || {};

从左到右返回第一个操作数。

这是一个“OR”运算符。在Javascript中,“OR”运算符不仅仅返回true / false布尔值。这只是一个简短的说明,如果未定义insert,则将其定义为对象。

答案 3 :(得分:0)

  1. 这实际取决于您是否有理由相信insert已经在该范围内宣布,以及它是否与您想要的insert相同。显然,如果insert已在其他地方定义并且没有按照您的意愿执行,那么这种语法没有帮助,因为它会将范围中的insert设置为{{1}已经在其他地方定义了。
  2. 使用insert语句,这是一种风格偏好。这真的就是它的全部。你必须问自己,“谁会读这篇文章,哪些对他们有什么帮助才能理解它的作用?”

答案 4 :(得分:0)

var insert=insert||{};

相当于:

if (!insert) var insert={};

(如果插入对象不存在,则创建它)

第一个表达式只是缩短了代码。

这通常用于模块化脚本,因为任何模块都可以初始化插入对象,然后由其他模块重用。