JavaScript运算符优先级,逻辑表达式,等于全等于,序列检测小结

4 篇文章 0 订阅

一. JavaScript运算符优先级

序号运算符描述
01. [] ()对象成员存取、数组下标、函数调用等
02++ – ~ ! delete new typeof void一元运算符等
03* / %乘法、除法、取模
04+ - +加法、减法、字符串连接
05<< >> >>>移位
06< <= > >= instanceof序列检测,instanceof
07== != === !==等值检测
08&按位与
09^按位异或
10|按位或
11&&逻辑与
12||逻辑或
13?:条件(右结合性)
14= op=赋值、运算赋值
15,多重求值

二. js逻辑表达式

四条规则:
规则1 :支持布尔短路
规则2: 将运算元理解为布尔值,以进行布尔运算
规则3: 不改变运算元的数据类型
规则4: 不强制运算结果的数据类型

两条特性:(看第一个参数)
1:a1 && a2 –>a1?a2:a1;
2:a1 || a2 –>a1?a1:a2;

三. js等于与全等于

1.等值检测中“相等”的运算规则(==)

类型运算规则
两个值类型比较转换成相同数据类型的值进行“数据等值”的比较
值类型与引用类型比较将引用类型数据转换为与值类型数据相同类型的数据,再进行“数据等值”比较
两个引用类型比较比较引用(的地址)


2.等值检测中“相同”的运算规则(===)

类型运算规则
两个值类型比较数据类型不同,则必然“不相同”
数据类型相同,进行“等值比较”
值类型与引用类型比较必然“不相同”
两个引用类型比较比较引用(的地址)


备注
在三种类型(数值,布尔值和字符串)中,数值和布尔值的“数据等值”检测开销比较小,但对字符串检测时就存在较大的开销。因为必须对字符串中的每一个字符进行比较,才能判断两个字符串是否相等。

四. 序列检测

可进行序列检测的数据类型:

可比较序列的类型序列值
boolean0-1
string(*注1)
numberNEGATIVE_INFINITY ~ POSITIVE_INFINIGY(*注2)

*注1:在js中,不存在char(字符)这种数据类型,但字符串的每一个字符,都被作为单一字符(#0~#255)参与序列检测
*注2:负无穷~正无穷,NaN不参与序列检测
tip
!isFinite()===isNaN() //true
isFinite(undefined)===isNaN(null) //false
isFinite(null)===isNaN(undefined) //true

undefined – NaN
null !– NaN

序列检测规则
类型运算规则
两个值类型进行比较直接比较数据再序列中的大小
值类型与引用类型比较将引用类型的数值转换为与值类型数据相同类型的数据,再进行”序列大小”的比较
两个引用类型比较无意义总是返回false(*注3)

*注3:对引用类型进行序列检测也是有可能的,取决于valueof()运算效果
示例1:布尔值转换为0/1,只相等不相同
true==1 //true
true===1 //false

示例2:空字符串转换为0值
''==0 //true
' '==0 //true
''===0 //false

示例3:两个对象(引用类型比较总是返回false)
var o1=o2={};
var o3={};
o1===o2 //true
o1==o3 //false

示例4:两个运算元都为字符串,将比较每个字符的序列值
示例5:当字符串与其他类型值比较时,将字符串转换为数值比较

#参考书籍:
《JavaScript语言精髓与编程实践》第二版 周爱民2012.3

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值