Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript:| |(或)在变量定义中?_Javascript - Fatal编程技术网

javascript:| |(或)在变量定义中?

javascript:| |(或)在变量定义中?,javascript,Javascript,可能重复: 很多时候我可以看到变量是这样设置的 var d = d || {} 或 我想到了几个问题 主要目的是什么 如何使用或在变量中定义 如果左侧为falsy(例如未定义,如果未传递函数参数,则函数参数为falsy),则它会计算右侧。最后一个要求值的方面是用JavaScript返回的,这与某些返回true或false的语言不同。这很方便,为什么要使用这个结构 它利用 使用它的主要原因是,如果未向函数传递参数,则提供合理的默认值 var a = function(b) { b =

可能重复:

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

var d = d || {}

我想到了几个问题

  • 主要目的是什么
  • 如何使用或在变量中定义
  • 如果左侧为falsy(例如
    未定义
    ,如果未传递函数参数,则函数参数为falsy),则它会计算右侧。最后一个要求值的方面是用JavaScript返回的,这与某些返回true或false的语言不同。这很方便,为什么要使用这个结构

    它利用

    使用它的主要原因是,如果未向函数传递参数,则提供合理的默认值

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

    在前面的代码示例中,如果未传递
    b
    ,则默认为空白数组(
    []
    )。但是,如果我传递了
    0
    或其他错误,它也会变成一个空白数组。注意这一点。

    如果为真,则
    |
    操作符返回左手侧,如果左手侧不为真,则返回右手侧

    因此:

    这是一个简单的说法:

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

    应该注意的是,
    var d=d | |{}
    将始终为
    d
    分配一个值,即使它是当前值(尽管智能引擎可能会对此进行优化);在
    obj.x=obj.x | | foo
    的情况下,这无法在自定义getter/setter中进行优化,但情况不同。。。有点像。@pst我制作了
    Array
    一个代码示例,因为它是数组的构造函数,也是语言中的实际类型/对象。是的,这个构造很常见,也很方便,但当
    0
    时,它会咬你一口,
    false
    和空字符串都是给定上下文的合法值。@alex想知道这是不是真的,因为它再次缺少乐观并发性。。。我只是想格式化更大的代码块。
    var d = d || {}
    
    var d;
    if (!d) {
        d = {};
    }