变量等于A || B。这是如何工作的?

3
我发现了这段代码:
function extend(out){
    out = out || {};
    for (var i = 1; i < arguments.length; i++){
        var obj = arguments[i];
        if (!obj) continue;
        for (var key in obj){
            if (obj.hasOwnProperty(key))
                out[key] = (typeof obj[key] === 'object') ? extend(out[key], obj[key]) : obj[key];
        }
    }
    return out;
}

这行代码 out = out || {}; 是什么意思,它是如何工作的?
这个函数基本上将不同的对象合并成一个对象。

1
这个问题之前已经被问过了! - ibrahim mahrir
请问您能提供一个链接吗? - user5563959
https://dev59.com/jXI95IYBdhLWcg3w5iU4 - ibrahim mahrir
这个https://dev59.com/MW855IYBdhLWcg3wQx9L正是你的问题! - ibrahim mahrir
5个回答

1
它为out设置默认值,即如果未向函数提供out(或它是假值,如false0nullundefined''),则将{}分配给out
工作原理: Javascript使用短路求值,这意味着或(||)运算符将返回第一个非假值。如果out不是假值,则不会发生任何变化;如果out是假值,则将其设置为{}

1
在Javascript中,||运算符返回第一个操作数的真值,否则返回第二个。因此,在这个上下文中,如果out是一个假值(比如undefined),那么out = out || {}会将{}赋值给out;否则,它将将out的当前值分配给out,这实际上什么也不做。
其目的是为out提供默认值。如果调用者将falsenullundefined作为第一个参数传递,则out将是一个新对象。如果调用者将对象作为第一个参数传递,则函数将修改该对象。

0

0

这基本上是做这件事的简写方式

if(!out){
    out = {};
}

如果 out 不为“true”,则在这种情况下,out 将设置为空数组。

已经在此处回答:构造 x = x || y 的含义是什么?


这是一个空对象,不是一个数组。 - Paul
抱歉,你是正确的,我整个星期都在使用C#工作。 - Aidan

0

那是这个的简化形式:

function extend(out){
    if (!out) {
        out = {};
    }
    ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接