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使用者乱来的情况下,逻辑运算不失为一种好办法。
[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使用者乱来的情况下,逻辑运算不失为一种好办法。
相关文章推荐
- JavaScript位运算
- JavaScript赋值运算与数值运算
- JS实现1000以内被3或5整除的数字之和
- js 把字符串当函数执行的方法
- fastjson 的简单使用
- js常用正则表达式
- JavaScriptCore框架入门介绍
- 使用Jsoup抓取数据
- JSON认识
- 《JavaScript高级程序设计》读书笔记(五):BOM
- ajax 和jsonp 不是一码事 细读详解
- js Uncaught SyntaxError: Unexpected token错误
- Javascript关键字和保留字
- jstl与<%%>
- 服务端与客户端共用smarty模板技术
- <c:if>------JSTL
- Js基础知识梳理系列
- jsp下页面跳转的几种方法小结
- <c:remove>和<c:catch>-------JSTL
- Js基础知识梳理系列(01):数据类型