javascript中的或运算(||)与三目运算(?:)

在编程世界里,非常基础且重要的一种运算是逻辑运算,也就是通过判断条件来进行的运算。在很多代码中,我们会经常看到一种奇怪的赋值方法:

var a = a || {};

这是什么意思?其实很简单,它等价于:

var a = a ? a : {};

但是为了深挖,我们来对这种方法进行详细的讲解,从而方便你在今后的编程中更好的使用这种方法。

或运算的解释

或运算有多种理解方式,其中一种:如果||左侧表达式的值为真值,则返回左侧表达式的值;否则返回右侧表达式的值。简单的说,程序从左往右执行,左边为真,那么就不往右执行了,如果左边为假,右边就要执行。不过执行的目的是为了得到boolean值,如果左边是一个表达式,那么执行的结果无非是:null, undefined, Object, function, 0, 0以外的其他数, 字符串, ""空字符串。除非是函数或逻辑运算,否则很少直接得到true/false。而上面这些值在进行逻辑运算之前,会被转换为true/false进行判断,简单的||运算,我们可以重新写成if...else...的形式。

总结就是,||运算左边为假,才会执行右边,而||的返回结果为最后被执行的表达式返回值。

或运算的运用

注意上面的表述中讲的是表达式,因此,将会有很多形式被使用,而不是单单只有赋值的形式。

1.逻辑判断

if(a === 0 || a === "") {}

2.等效于三目运算的赋值用法

var a = a || b; // var a = a ? a : b;

3.等效于三目运算

var a = 10;
while(1) {
    a -- || break;
}

4.运算合并

update('key',value) || add('key',value); // 更新,如果不存在则添加

同理,&&也可以做类似的操作

add('key',val1) && add('key',val2) && add('key',val3); // 前面的添加成功才添加后面的,否则就不添加后面的

总结

我们之所以可以这样去变化的使用||运算,最重要的原因是JavaScript在运算中处理的方式和其他语言不同,比如在PHP中就不能使用$a = $a || 'value';这种形式$a将得到一个boolean值。PHP是将表达式运算后,再做一次逻辑运算,返回逻辑运算的结果,而JavaScript运算表达式后,判断表达式结果,根据逻辑运算符,返回参与逻辑运算的表达式结果。

2016-08-16