javascript中 逻辑运算

js中对所有类型的值都可以判断一个逻辑值,其中:
false,null,undefined,空字符串 (中间什么也没有,就算有一个空格也算真了)''(两个单引号)或""(两个双引号),数字0,数字NaN被判断为假
其他所有值都被当作真,包括' '(中间是一个空格),true, 字符串"false",以及所有对象

而js中的逻辑运算,操作数和结果都不一定为布尔值
因为js可以对所有类型的值判断其逻辑上的真假,所以||和&&还有!运算符的操作数都可以不是布尔类型,在运算时也不会有默认的强制类型转换(与c不同)。

而且,逻辑运算的结果也不一定为布尔值
如果第一个运算数的值为假,那么&&产生它的第一个运算数的值。否则产生第二个运算数的值。
如果第一个运算数的值为真,||产生第一个运算数的值。否则产生第二个运算数的值。
因而,在《javascript: the good parts》的3.2节有介绍:
在尝试检索某对象的一个不存在的属性时,会返回undefined。为了使这个检索表达示有一个默认值(不会取到undefined),可以这样:
var middle = stooge["middle-name" || "(none)";
也就是说,||和&&的运算结果不一定是true或false,而是两个操作数中的一个(这也是弱类型的好处吧)。

不过,逻辑非(!)运算符产生的结果就是true或false了

-----可参见《javascript:the good parts》2.5节与2.6节


另,同c系列语言一样,运算符的操作数都可以是一个表达示。这时,会先计算出表达示的值,再进行这一步的运算。
如果逻辑或运算符(||)的第一个操作数就为真,那么运算结果一定为真,第二个操作数就不需要因而也就不会被取来,也就意味着第二个操作数的表达示也不会执行了
同样,如果逻辑与运算符(&&)的第一个操作数为假,第二个操作数也不必取了,即第二个操作数的表达示也不会执行了
因而,在《javascript: the good parts》的3.2节又有介绍:
 如果尝试检索一个undefined值(的对象)的某个属性,会导致TypeError异常。这可以通过&&来避免:
//假设flight是一个对象,但它没有equipment这个属性
flight.equipment  //undefined
flight.equipment.model  //throw "TypeError"
flight.equipment && flight.equipment.model  //undefined
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值