php 或且,JavaScript逻辑运算符或和且的返回值

基本上凡是编程语言都会有逻辑运算符:或且非,大致上对应语法为:||、&&、!,但在不同语言中逻辑运算符运算的结果(可以理解成返回值)却是大相径庭的;下方是PHP中的逻辑运算符或和且的结果:

var_dump(1 || 0); // true

var_dump('aa' || '0'); // true

var_dump(1 && 0); // false

var_dump('01' && 1); // true

输出结果已在注释中标明,结果很好理解,因为php中逻辑运算符返回值为布尔值。

再来看看JavaScript中的逻辑运算符例子:

console.log(1024 || 0);

console.log(0 || 1024);

console.log(1024 || new Object());

console.log(new Object() || 1024);

console.log('1024' && 0);

console.log(0 && '1024');

console.log('1024' && new Object());

console.log(new Object() && '1024');

上述8条行语句输出结果是什么?反正我习惯于php的逻辑运算符返回值为布尔值,想都不想就会认为这8条语句无非输出8个true或false嘛~结果一深究懵逼了,上面8条语句输出的结果中true和false的毛都没看到。下面截图是分别在chrome、nodejs中运行的结果:

06f6ed6144668966c80b9047d6e1c131.png

f37f5a917d0e89ba95a6e221cf3faf74.png

JavaScript中或和且2个逻辑运算符运算后的返回值很有意思,你或许对下方类似的代码很熟悉:

var port = process.env.PORT || 3000;

这是一条赋值语句,赋值语句中用上了逻辑运算符或,其实这条赋值语句相当于下方的代码:

var port;

if(process.env.PORT)

{

port = process.env.PORT;

}else{

port = 3000;

}

结论

||运算符前面部分计算后转换为布尔值是true的话,返回前面部分计算后的值本身;前面部分计算后的值转换为布尔值是false的话返回后面部分计算后的值本身;所以或运算符当前面的部分是true时会有中断效果,后面的不会再计算直接返回前面部分的值;

&&运算符前面部分计算后转换为布尔值是true的话,返回后面部分计算后的值本身;前面部分计算后的值转换为布尔值是false的话返回前面部分计算后的值本身;所以且运算符前面的部分是false时也会有中断效果,后面的不会再计算直接返回前面的部分的值。

比较绕,简单来说就是或和且的返回值依据前面部分的值(也有可能是语句,亦既该句语句计算后的值)来确定返回值。

最后将JavaScript中的非运算符返回值做个代码测试,结果已在注释中标明:

console.log(!false) //true

console.log(!true) //false

console.log(!1) //false

console.log(!0) //true

console.log(!null) //true

console.log(!undefined) //true

不用疑问,JavaScript中的非!运算符返回值是个布尔值。

最后思考如下代码的输出结果,并解释原因?

var a = 2,b,c;

console.log(1 || (b = a));

console.log(0 || (c = a));

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值