您的位置:首页 > Web前端 > JavaScript

JavaScript逻辑运算

2016-02-18 17:07 561 查看
逻辑运算分为两种,一种会改变目标数据类型,另一种则不会。前者的典型代表是逻辑非运算,无论运算元是什么类型,执行逻辑非运算后,都会被转化为bool值。例如:

[javascript] view
plain copy







var a = "123";

var b = !a; // false

而另一种形式则不改变目标类型,且支持布尔短路,包括“逻辑与”(&&)和“逻辑或”(||)运算。所谓布尔短路,指的是指判断第一个运算元就决定运算结果,而不需要处理第二个运算元。具体运算规则如下:

第一个运算元为真时,逻辑或运算返回第一个运算元(注意,没有改变类型),逻辑与运算返回第二个运算元
第一个运算元为假时,逻辑或运算返回第二个运算元,逻辑与运算返回第一个运算元

我们来举几个特殊点的例子:

[javascript] view
plain copy







function and(a, b) {

return a && b;

}

function or(a, b) {

return a || b;

}

var a = and("str", false); // a === false

var b = or("str", false); // b === "str"

var c = and(0, "str2"); // c === 0

var d = or(0, "str2"); // d === "str2"

这种运算最常见的用法是处理实参。我们知道,JavaScript中的实参列表和形参列表可以长度不等,那么,如何处理不等的部分呢?我们举个例子:

[javascript] view
plain copy







function add(a, b) {

return a + b;

}

var a = add(5); // NaN

结果是NaN,这明显不是我们想要的结果,我们更愿意它返回5。我们可以利用逻辑运算:

[javascript] view
plain copy







function add(a, b) {

b = b || 0;

return a + b;

}

var a = add(5); // 5

var b = add(5, 2); // 7

如果形参长度大于实参长度,超过的部分将是undefined。而b = b || 0这句能在b为undefined(布尔值为false)的时候,把0赋给b,使得b仍然为数值类型,并参与运算。当然,这样处理还是很简陋的,比如当传入的b为非空字符串的时候,这个函数还是会出错,所以正确的做法应该是判断是不是数值类型,但在排除API使用者乱来的情况下,逻辑运算不失为一种好办法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: