JavaScript学习(4.7):逻辑表达式
2015-11-25 09:19
537 查看
4.10 逻辑表达式
逻辑运算符 && || !是对操作数进行布尔算术运算,经常和关系运算符一起配合使用。
逻辑运算符 && || !是对操作数进行布尔算术运算,经常和关系运算符一起配合使用。
4.10.1 逻辑与(&&) && 运算符可以从三个不同层次进行理解: 当操作数都是布尔值的时候,&&对两个值执行布尔与操作,只有在两个操作数都是true的时候,才返回true。 && 的操作数并不一定是布尔值,还有真值和假值null.undefined,0,-0,NaN,false,' ',所以,第二层理解是,&&可以对真值和假值进行布尔与操作。如果都是真值,那么返回一个真值,否则,至少一个是假值,则返回一个假值。在JavaScript中任何希望使用布尔值的地方,表达式和语句都会将其当做真值和假值来对待,&&并不总是返回true和false,但并无大碍。 &&运算符首先计算左操作数的值,如果是假值,那么整个表达式的结果一定是假值,因此&&这时简单的返回左操作数的值,而并不会对右操作数进行计算;如果左操作数是真值,那么整个表达式的结果依赖于右操作数的值;此时,&&运算符将计算右操作数的值并将其返回作为整个表达式的计算结果。 var p ={x:1} p.y && p.x //左边假值;没有定义,undefined返回 null && p.x //null 3 && null //null 3 && 2 //2 && 的行为有时称作短路,很多代码利用这一特性来有条件的执行代码: if(a == b) stop(); -----------等价 (a == b) && stop(); 注意一点,当&&右侧表达式具有副作用的时候(赋值、递增、递减和函数调用表达式)要格外小心,因为这些带有副作用的表达式的执行依赖于左操作数的计算结果。 |
4.10.2 逻辑或|| ||运算符对两个操作数做布尔或运算,如果其中一个或者两个操作数是真值,返回一个真值,如果两个操作数都是假值,返回一个假值。 和&& 类似,|| 并不仅仅会做布尔值的运算,它也具有一些更复杂的行为。 如果||的左操作数是真值,则返回这个真值;左操作数是假值,此时依赖右操作数,计算右侧表达式并返回值 3 || 2 //3 null || undefined //undefined null || 3 //3 右操作数依赖左操作数,所有和&&一样,应该避免右操作数包含一些具有副作用的表达式,除非目的明确的在右侧使用带副作用的表达式。 var max = max_width || preference.max_width || 500; 通常用在函数体中,用来给参数提供默认值: function copy(o,p){ p = p || {}; } |
4.10.3 逻辑非(!) ! 运算符是一元运算符。它防止在一个单独的操作数之前,目的是将操作数的布尔值进行求反。“!”与“&&”和“||”不同,“!”运算符首先将其操作数转换为布尔值,然后再对布尔值求反,也就是说“!”只返回布尔值true或false,通过两次求反得到的是一个等价的布尔值:!!x. "!"具有很高的优先级,如果希望对q && p求反,则需要使用圆括号:!(p && q) !(p && q) === !p || !q !(p || q) === !p && !q |
相关文章推荐
- JavaScript学习(4.6):关系表达式
- JS对象
- JavaScript学习(4.5):算术表达式
- JavaScript学习(4.4):运算符概述
- JSP:自定义标签之开发迭代标签
- JavaScript学习(4.3):调用表达式和对象创建表达式
- JSP:自定义标签之开发<c:if><c:else>标签
- js获取表单table 中文本框的值
- JSP:自定义标签之<c:if>标签
- JavaScript学习(4.2):函数定义表达式和属性访问表达式
- JSP:自定义标签之防盗链标签开发
- js中document.write的那点事
- JavaScript学习(4.1):原始表达式、对象和数组初始化表达式
- VS调试时JSON格式文件加载不了
- JSP:自定义标签的详细说明
- 中国省市 JS代码
- WCF 自托管、无配置文件实现jsonp(跨域)的访问
- javascript中操作节点的属性
- javascript中数组常用方法
- javascript中数组常用方法