JavaScript逻辑运算

逻辑运算分为两种,一种会改变目标数据类型,另一种则不会。前者的典型代表是逻辑非运算,无论运算元是什么类型,执行逻辑非运算后,都会被转化为bool值。例如:
[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. var a = "123";  
  2. var b = !a; // false  
而另一种形式则不改变目标类型,且支持布尔短路,包括“逻辑与”(&&)和“逻辑或”(||)运算。所谓布尔短路,指的是指判断第一个运算元就决定运算结果,而不需要处理第二个运算元。具体运算规则如下:
  • 第一个运算元为真时,逻辑或运算返回第一个运算元(注意,没有改变类型),逻辑与运算返回第二个运算元
  • 第一个运算元为假时,逻辑或运算返回第二个运算元,逻辑与运算返回第一个运算元
我们来举几个特殊点的例子:
[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. function and(a, b) {  
  2.     return a && b;  
  3. }  
  4. function or(a, b) {  
  5.     return a || b;  
  6. }  
  7. var a = and("str"false); // a === false  
  8. var b = or("str"false);  // b === "str"  
  9. var c = and(0, "str2");    // c === 0  
  10. var d = or(0, "str2");     // d === "str2"  
这种运算最常见的用法是处理实参。我们知道,JavaScript中的实参列表和形参列表可以长度不等,那么,如何处理不等的部分呢?我们举个例子:
[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. function add(a, b) {  
  2.     return a + b;  
  3. }  
  4. var a = add(5); // NaN  
结果是NaN,这明显不是我们想要的结果,我们更愿意它返回5。我们可以利用逻辑运算:
[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. function add(a, b) {  
  2.     b = b || 0;  
  3.     return a + b;  
  4. }  
  5. var a = add(5);     // 5  
  6. var b = add(5, 2); // 7  
如果形参长度大于实参长度,超过的部分将是undefined。而b = b || 0这句能在b为undefined(布尔值为false)的时候,把0赋给b,使得b仍然为数值类型,并参与运算。当然,这样处理还是很简陋的,比如当传入的b为非空字符串的时候,这个函数还是会出错,所以正确的做法应该是判断是不是数值类型,但在排除API使用者乱来的情况下,逻辑运算不失为一种好办法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值