JavaScript逻辑运算符“&&”和“||”短路原则的应用


文章出自个人博客https://knightyun.github.io/2018/06/01/js-logic-compute,转载请申明


逻辑运算符

在Javascript中,有逻辑运算符 与 &&, 或 ||, 非 !,常在条件句或循环中进行逻辑判断。

例如:

var a = 1, b = 1, c = 2;
if (a = b && (b = c || a != c)) 
{
    alert("true");
} else 
{
    alert("false");
}

括号中表达式值为,最后提示“true”。

短路原则

在逻辑运算中,这是一个通用的原则,这是由于表达式从左到右执行的特性,为了减少运算量而给运算器规定的操作。主要针对 &&|| 两种运算。

  • && 的判断是同真为真,一假为假,则运算如果左边的表达式值为 false,那么就不会再执行右边的表达式了,如果左表达式为 true,就会继续执行右表达式;

  • || 的判断是一真为真,同假为假,则运算如果坐表达式值为 true,那么就不用执行右边的表达式了,如果左表达式为 false,就会继续执行右表达式;

举例说明:

(1 == 1) && alert("msg1");
(1 != 1) && alert("msg2");
(1 == 1) || alert("msg3");
(1 != 1) || alert("msg4");

结果是提示“msg1”“msg4”。原理如上述。

因此,如果有以下表达式:

var a = 9;
if (a > 0) 
{
    alert("true");
} else 
{
    alert("false");
}

也许你会使用三目运算简化成这样:

var a = 9;
(a > 0) ? alert("true") : alert("false");

其实也可以这样写:

var a = 9;
(a > 0) && alert("true");
(a > 0) || alert("false");
Javascript中的应用

在javascript中,只有对象(Object)和布尔值true为真,其它例如 undefined, NaN, false 等,值为 false。为被定义的对象或未赋值变量也是 false,因为其值都是 undefined,这里就可以应用于检查某变量是否已定义

举例说明:

var a = 1;
var o = new Object();
var b;
a && alert("defined");       //已定义a,提示“defined”
o && alert("defined");       //已定义对象o,提示“defined”
Object && alert("defined");  //Object是一个已知的全局对象,提示“defined”
b || alert("not defined");   //b未赋值,提示“not defined”
p || alert("not defined");   //未定义p,提示“not defined”

除了这个也能衍生出其它相同原理的应用,类似于判断赋值 var a = (b > 0) && '9' 或判断定义变量 var abc = abc || "" 等。

js中使用这种方法可以减少代码量,提示性能,但同时也降低了代码可读性,比如个人觉得还是看以下代码比较舒适:

var a = 1;
if (a > 1)
{
    alert("true");
}

方法的选择就要视情况而权衡了。


技术文章推送

手机、电脑实用软件分享



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑝琦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值