js基本概念注意点—操作符

ECMA标准也定义了很多操作符,这些操作符的用法与特点与其他编程语言也有较大的相似之处,但由于JS的弱类型特点,JS中的操作符往往都可以运用于不同的数据类型,而在运用的过程中也存在一些转换规则,这是JS操作符与其他编程语言中操作符的不同之处。本文主要总结JS中操作符在使用时一些需要额外注意的点:
[1]一元操作符
递增和递减操作符:
递增和递减操作符的基本用法符合常用编程语言的用法特点,比较独特的是,这两个操作符不仅可以用于整形,还可以用于其他类型:
=》用于字符串时,如果字符串包含有效的数字字符(不能含有除数值字符之外的字符,包括数字、点、0,0x),则先转换成数值再执行增减操作,返回的数值变量;否则转换为NaN。

=》用于布尔值时,如果是false,先转换成0再操作;如果是true,先转换成1再操作,返回数值变量。

=》用于null时,先转换成0再操作; 用于undefined时,返回NaN
=》用于对象,先调用valueOf()方法,再转换;如果为NaN,那么再调用toString()方法再转换。
一元加和一元减:这两个操作符的作用就是执行正负转换,同样也可以应用于不同的数据类型,使用时首先按照Number()方法的规则进行转换然后再执行正负操作。


[2]位操作符
ECMAScript中所有数值都是用64位表示的,但是在进行位运算时, 都是先将64位的值转换成32位的整数执行操作,然后再把32位的数值转换回64位。
按位非~:按位非其实就是求 反码的过程,执行效果其实就是值的负值减一。
按位与&;按位或|;按位异或^:没有特殊的地方。
左移<<:左移指定的位数,以0填充空位。
有符号右移>>;无符号右移>>>:右移的时候需要涉及符号位的补位问题,因此分有符号和无符号两种,有符号的右移用符号位的值来填充高位的空位,而无符号右移以0来填充高位的空位。


[3]布尔操作符:
逻辑非 !:
逻辑非在运用于非布尔型值时,取值其实就是Boolean()函数相反的值,Boolean()函数的转换规则可以参照:js基本概念注意点—数据类型

逻辑与&&:逻辑与可以用于任何数据类型,如果两个操作数中有一个不是布尔型,那么就不一定返回布尔值,具体规则如下:

=》如果第一个操作数是对象,那么返回第二个操作数。

=》如果第二个数是对象,那么只有当第一个操作数的求值结果为true时才返回该对象。

=》如果有一个操作数为null,undefined或者NaN,那么相应的会返回null,undefined和NaN。

逻辑或||:与逻辑与类似,逻辑或可能也不反回布尔值,规则如下:

=》如果第一个操作数是对象,那么返回第一个操作数

=》如果第一个操作数取值为false,那么返回第二个操作数

=》如果两个操作数都是null,undefined或NaN,那么相应的返回null,undefined或NaN。

注:逻辑与或逻辑或的这种运算规则的核心都是短路操作,对于逻辑与,如果第一个操作数取值为false,那么就不必再执行了,否则还需要继续执行;对于逻辑或,如果第一个操作数取值为true,那么也不必再执行了。依据短路操作的原理,上述的规则就很好理解了。

[4]算数操作符:ECMAScript中的算数操作符的用法与其他编程语言类似,但如果操作数存在不是数值的情况时,会先利用Number()执行转换再参与运算,不同运算符还存在一些不同的运算规则,总结如下:

乘法运算符*:处理特殊情况时,乘法操作符遵循以下规则:

=》如果有一个数是NaN,那么结果是NaN。

=》如果Infinity与0相乘,结果为NaN。

=》如果Infinity与非0相乘,结果为-Infinity或Infinity。

=》如果Infinity与Infinity相乘,结果为Infinity。

除法运算符/:处理特殊情况时,遵循以下规则:

=》如果有一个操作数是NaN,那么结果是NaN。

=》如果Infinity被Infinity除,结果是NaN。

=》如果0被0除,结果是NaN。

=》如果非0数(包括Infinity或-Infinity)被0除,那么结果是Infinity或者-Infinity

=》如果Infinity或-Infinity被非0数除,那么结果是Infinity或者-Infinity。

取模(求余)%:处理特殊情况时,遵循以下规则:

=》如果除数是0,结果是NaN

=》如果被除数是无限值而除数是非0值,结果为NaN

=》如果被除数和除数都是无限值,结果为NaN

=》如果被除数是有限值而除数是无限值,结果为被除数

加法+:

=》Infinity与Infinity想加,结果为Infinity

=》-Infinity与-Infinity想加,结果为-Infinity

=》Infinity与-Infinity想加,结果为NaN

=>+0与-0想加,结果为+0

减法-:

=》如果Infinity减Infinity,结果为NaN

=》如果-Infinity减-Infinity,结果为NaN

=》如果Infinity减-Infinity,结果为Infinity

=》如果-Infinity减Infinity,结果为-Infinity

=》+0减-0,结果为-0

=》-0减-0,结果为+0

=》+0减+0,结果为+0

=》如果有操作数为其他类型的值,那么先用Number()方法执行转换后再进行运算

[5]关系操作符:

关系操作符首先由大于>,小于<,大于等于>=,小于等于<=,这几个操作符在执行时也可以用于处理不同的数据类型,有如下转换规则:

=》如果都是数值,那么执行数值的比较

=》如果都是字符串,那么按照字符编码的顺序执行

=》如果有一个是数值,那么先将另一个操作数转换为数值,再执行数值比较

相等操作符包括两种,相等(==),全相等(===),不相等(!=), 不全相等(!==),前两个与后两个的区别在于前两个在比较时,如果操作数的类型不一样则会进行数值类型的转换,转换规则如下:

=>如果存在布尔值,则先将布尔值转换为数值

=》如果一个数是字符串,一个数是数值,那么先将字符串转换为数值

=》如果一个操作数是对象,而另一个不是,那么先调用对象的valueOf()方法,则执行比较

而在进行比较时,具体遵循如下规则:

=》null和undifined是相等的

=》在执行比较前,不能将null或者undefined进行转换

=》只要存在NaN,那么相等的比较都返回false,反之返回true

=》如果两个都是对象,那么比较指向的对象地址值是不是相同的



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值