【问题标题】:javascript: || (or) in variable define? [duplicate]javascript: || (或)在变量中定义? [复制]
【发布时间】:2011-12-10 12:23:16
【问题描述】:

可能重复:
What does this construct (x = x || y) mean?

很多时候我可以看到变量设置是这样的

var d = d || {}

var = var || []

想到了几个问题

  1. 它的主要用途是什么?
  2. 如何在变量定义中使用 OR?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    如果左边是falsy(例如undefined,如果没有传递函数参数就是),它计算右边。与返回 truefalse 的某些语言不同,JavaScript 会返回最后要评估的一面。这很方便,也是为什么要使用这种结构。

    它利用short circuit evaluation

    使用它的主要原因是在未传递函数参数时提供合理的默认值。

    var a = function(b) {
        b = b || [];
    }
    

    在前面的代码示例中,如果没有传递b,则默认为空数组([])。但是,如果我通过0 或其他falsy,它也会变成一个空白数组。小心这个。

    【讨论】:

    • @pst 我将Array 制作为代码示例,因为它是数组的构造函数,并且是语言中的实际类型/对象。
    • 是的,这个结构很常见也很方便,但是当0false 和空字符串是给定上下文的合法值时,它会咬你。
    • @alex 不知道是不是因为 SO 又缺乏乐观并发……我只是想格式化更大的代码块。
    【解决方案2】:

    || 运算符如果为真则返回左侧,如果左侧不为真则返回右侧。

    所以:

    var d = d || {}
    

    是一种快速的说法:

    var d;
    if (!d) {
        d = {};
    }
    

    【讨论】:

    • 需要注意的是var d = d || {}总是会为d分配一个值,即使它是当前值(虽然这可能会被智能引擎优化);在obj.x = obj.x || foo 的情况下,面对自定义的getter/setter,这无法优化,但这是一个不同的故事......在某种程度上。
    猜你喜欢
    • 1970-01-01
    • 2011-11-26
    • 2015-03-19
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    相关资源
    最近更新 更多