MyException - 我的异常网
当前位置:我的异常网» JavaScript » JS-Logical AND (&&) 逻辑与

JS-Logical AND (&&) 逻辑与

www.MyException.Cn  网友分享于:2013-10-19  浏览:0次
JS--Logical AND (&&) 逻辑与

Logical AND (&&)

The && operator can be understood at three different levels. At the simplest level, when used with boolean operands, && performs the Boolean AND operation on

&& 操作符可以从三个层面来理解,最简单的一个层面,&&操作符用在布尔操作数上,

the two values: it returns true if and only if both its first operand and its second operand are true. If one or both of these operands is false, it returns false.

当两个操作数都是ture的时候,才返回true。任何一个操作数是false,返回都是false。

&& is often used as a conjunction to join two relational expressions:

&& 操作符 经常被用在连接两个关系表达式上:

x == 0 && y == 0 // x,y 都是零才是返回 ture

Relational expressions always evaluate to true or false, so when used like this, the && operator itself returns true or false.

关系表达式结果要么是true,要么是false,所以,&&用在他们中间,或者返回ture,或者返回false。

 

Relational operators have higher precedence than && (and ||), so expressions like these can safely be written without parentheses.

关系运算符的优先级比逻辑运算符&& (或者||)的级别高,所以不用加上括号。

But && does not require that its operands be boolean values. Recall that all JavaScript values are either “truthy” or “falsy.” (The falsy values are false, null, undefined,

但是 && 运算符并不要求操作数是布尔值。事实上,JS多有值中,要么是 “真值”,要么是“假值”。(假值有:false,null,undefined,0,-0,Nan,and,“”

0, -0, NaN, and "". All other values, including all objects, are truthy.)

。剩下的值,包括对象都是真值的范围了。)

The second level at which && can be understood is as a Boolean AND operator for truthy and falsy values. If both operands are truthy, the operator returns a truthy

理解 &&操作符的第二个层面是: 操作数 或者返回值 不再是布尔值,而是真、假值。如果两个操作数都是“真值”,运算符就返回“真值”。

value. Otherwise, one or both operands must be falsy, and the operator returns a falsy value. In JavaScript, any expression or statement that expects a boolean value

否则,只要任何一个操作数是“假值”,就运算符就返回“假值”。在JS中,那些期待布尔值的表达式或者语句中,

will work with a truthy or falsy value, so the fact that  && does not always return true or false does not cause practical problems.

同样会对等的处理“真值”或者“假值”。所以,事实上  && 并不是经常返回布尔值 true或者false,并没什么实际问题。

Notice that the description above says that the operator returns “a truthy value” or “a falsy value,” but does not specify what that value is. 

值得注意的是,上面说 && 操作符返回的是 “真值”或者“假值”,但是并没有指出返回的具体值指的是什么样的值。

For that, we need to describe && at the third and final level. This operator starts by evaluating its first operand, the expression on its left. If the value on the left is

为此,我们需要讲解 &&  操作符的最后一个层面。操作符第一步是对他的第一个操作数进行求值,也就是表达式的左边的操作数。如果这个左值是个“假的”

falsy, the value of the entire expression must also be falsy, so && simply returns the value on the left and does not even evaluate the expression on the right.

那么整个表达式就是假的,所以,&&  就直接返回这个左值,不在计算表达式右边的值了。

On the other hand, if the value on the left is truthy, then the overall value of the expression depends on the value on the right-hand side.

另一方面,如果左值是“真的”,那么整个表达式的值就依赖于表达式右边的值了。

If the value on the right is truthy, then the overall value must be truthy, and if the value on the right is falsy, then the overall value must be falsy. So when the value on

如果右值是“真的”,那么整个表达式就是真的,如果右值是假的,那么整个表达式就是假的。所以,

the left is truthy, the && operator evaluates and returns the value on the right:

如果左边的值是真的,那么 && 运算符对右边操作数求值,并返回所求的值:
var o = { x : 1 };
var p = null;
o && o.x // => 返回是1: o 是真的, 所以对右边o.x求值,并返回 这个值
p && p.x // => 返回是null: p是假的, 所以直接返回,不用再对 p.x求值

It is important to understand that && may or may not evaluate its right-side operand. In the code above, the variable p is set to null, and the expression p.x would, if

明白 && 操作符 有可能不对右边的操作数求值很重要。在上面的代码中,如果变量p 是null,如果再对p.x进行求值,就会引起TypeError错误。

evaluated, cause a TypeError. But the code uses && in an idiomatic way so that p.x is evaluated only if p is truthy—not null or undefined.

在这样的惯用方式中,操作符&& 只有当左边操作数是真的,才会计算右边操作符。

The behavior of && is sometimes called “short circuiting,” and you may sometimes see code that purposely exploits this behavior to conditionally execute code.

所以  && 操作符 有时候被称作有 短路 的功能。你也会看到,有时候代码就是利用这个特性来有条件性的执行代码。

 

For example, the following two lines of JavaScript code have equivalent effects:

如下的例子,两行代码的效果是一样的:

if (a == b) stop(); // 调用 stop() ,只有在 a == b时发生
(a == b) && stop(); // 不一样的写法,同样的效果

In general, you must be careful whenever you write an expression with side effects (assignments, increments, decrements, or function invocations) on the right-hand

通常,必须小心所写的表达式对于 &&运算符右边的操作数是否有副作用,

side of  &&. Whether those side effects occur depends on the value of the left-hand side.

这都取决于左边的操作数。

文章评论

亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
我是如何打败拖延症的
我是如何打败拖延症的
程序员必看的十大电影
程序员必看的十大电影
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
为什么程序员都是夜猫子
为什么程序员都是夜猫子
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
鲜为人知的编程真相
鲜为人知的编程真相
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
漫画:程序员的工作
漫画:程序员的工作
程序员应该关注的一些事儿
程序员应该关注的一些事儿
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
Java程序员必看电影
Java程序员必看电影
总结2014中国互联网十大段子
总结2014中国互联网十大段子
那些争议最大的编程观点
那些争议最大的编程观点
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员和编码员之间的区别
程序员和编码员之间的区别
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
我的丈夫是个程序员
我的丈夫是个程序员
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
每天工作4小时的程序员
每天工作4小时的程序员
程序员都该阅读的书
程序员都该阅读的书
一个程序员的时间管理
一个程序员的时间管理
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
 程序员的样子
程序员的样子
代码女神横空出世
代码女神横空出世
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
中美印日四国程序员比较
中美印日四国程序员比较
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
如何成为一名黑客
如何成为一名黑客
老程序员的下场
老程序员的下场
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
10个调试和排错的小建议
10个调试和排错的小建议
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
旅行,写作,编程
旅行,写作,编程
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有