`
somebody_hjh
  • 浏览: 180927 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JS的与或用法

阅读更多

查看ECMA规范,我们可以看到关于&& 和 || 如何运算的定义。如下:

lref && rref

 

1.Let lref be the result of evaluating LogicalANDExpression.

2.Let lval be GetValue(lref).

3.If ToBoolean(lval) is false, return lval.

4.Let rref be the result of evaluating BitwiseORExpression.

5.Return GetValue(rref).

 

lref || rref

 

1.Let lref be the result of evaluating LogicalORExpression.

2.Let lval be GetValue(lref).

3.If ToBoolean(lval) is true, return lval.

4.Let rref be the result of evaluating LogicalANDExpression.

5.Return GetValue(rref).

两个我们需要关注的信息

1、&&,||运算符是短路的,在判断lref为false/true的情况,直接return了。

2、返回值不是boolean类型,而是返回lref或者rref之一。

 

 

所以我们可以写出很多这样的表达式:

 

var Yahoo=Yahoo||{}   //用于定义类

var result= "ab"||"cd"   //用于赋值操作,减少if,else的判断

var result= true && "test"  //用于赋值操作,减少if,else的判断

 

这里需要注意,在转换lref的值为boolean的时候,有一些特殊数据的转换有如下规则:

 

+0、-0、""、null、false、undefined、NaN 均会被判断为 false。其余情况均为true。

 

根据以上规则,我们可以写出很多简洁的代码。但是请注意可阅读性和简洁性的平衡。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics