在逻辑运算中,转换为boolean类型的值后为false的情况: 0、""、null、false、undefined、NaN,其他都为true。

短路运算是利用逻辑运算中的 && 和 || 操作符,对应的有两种不同的短路运算类型

|| 短路运算

仅当前者不成立时才去执行后者

原理:||先计算第一个运算数,如果可以被转换成true,则返回左边这个表达式的值,否则计算第二个运算数。即使||运算符的运算数不是布尔值,任然可以将它看作布尔OR运算,因为无论它返回的值是什么类型,都可以被转换为布尔值

通常用||短路运算来设置初始值,以下是一个ajax封装的例子:

/* 封装ajax函数
 * @param {string}options.type http连接的方式,包括POST和GET两种方式
 * @param {string}options.url 发送请求的url
 * @param {boolean}options.async 是否为异步请求,true为异步的,false为同步的
 * @param {object}options.data 发送的参数,格式为对象类型
 * @param {function}options.success ajax发送并接收成功调用的回调函数
*/
function ajax(options) {
    options = options || {};
    options.method = options.method.toUpperCase() || 'POST';
    options.url = options.url || '';
    options.async = options.async || true;
    options.data = options.data || null;
    options.success = options.success || function () {};
    // ...
}

&&短路运算

仅当前者成立时采取执行后者

原理:&&,它先计算第一个表达式,若为假,就不会去处理第二个表达;否则继续处理后继表达式。从左到右选取表达式的第一个为非true的表达式的值,如果一直未找到则返回最后一个表达式的值

通常在回调中使用&&运算,例如:

function fn(callback) {
    // ...
    'function' === typeof callback && callback();
}

两种短路运算都有一个共同的特点:如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值


同梦奇缘
4.1k 声望1.1k 粉丝

生于忧患死于安乐