js运算符

一,算术运算符

1.除了加法运算符其他算术运算符(比如减法、除法和乘法)都不会发生重载。它们的规则是:所有运算子一律转为数值,再进行相应的数学运算。

2.对象的相加,必须先转成原始类型的值,然后再相加。

  • 对象转成原始类型的值:对象的valueOf方法总是返回对象自身,这时再自动调用对象的toString方法,将其转为字符串
true + true // 2
1 + true // 2
1 + 'a' // "1a"
false + 'a' // "falsea"
'3' + 4 + 5 // "345"
3 + 4 + '5' // "75"
var obj = { p: 1 };
obj + 2 // "[object Object]2"
obj.valueOf() // { p: 1 }
obj.valueOf().toString() // "[object Object]"

3.余数运算符(%)运算结果的正负号第一个运算子的正负号决定。

4.数值运算符(+)同样使用加号,但它是一元运算符(只需要一个操作数),而加法运算符是二元运算符(需要两个操作数)。

  • 数值运算符+的作用在于可以将任何值转为数值(与Number函数的作用相同)。
  • 负数值运算符-,也同样具有将一个值转为数值的功能。

5.指数运算符**结合,先进行最右边的计算。

二,比较运算符

1.比较运算符用于比较两个值的大小,然后返回一个布尔值。

2.对于非相等的比较,算法是先看两个运算子是否都是字符串,如果是的,就按照字典顺序比较(实际上是比较 Unicode 码点);否则,将两个运算子都转成数值,再比较数值的大小。

如果两个运算子之中,至少有一个不是字符串,需要分成以下两种情况。

  • 如果两个运算子都是原始类型的值,则是先转成数值再比较。
  • 如果运算子是对象,会转为原始类型的值,再进行比较。

3.严格相等===运算符比较它们是否为“同一类型的相等值”。

4.两个复合类型(对象、数组、函数)的数据===比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个地址

{} === {} // false
[] === [] // false
(function () {} === function () {}) // false

var v1;
var v2;
v1 === v2 // true

5.相等==运算符比较不同类型的数据时,相等运算符会先将数据进行类型转换

  • 原始类型的值会转换成数值再进行比较。
  • 对象(包括数组和函数)与原始类型的值比较时,对象转换成原始类型的值,再进行比较。

三,布尔运算符

1.取反!是一个感叹号,用于将布尔值变为相反值。

  • 对于非布尔值,取反运算符会将其转为布尔值。只有以下六个值取反后为true
!undefined // true
!null // true
!0 // true
!NaN // true
!"" // true

!54 // false
!'hello' // false
![] // false
!{} // false

2.且(&&)返回的是,不是布尔值

  • 如果第一个运算子的布尔值为true,则返回第二个运算子的值。
  • 如果第一个运算子的布尔值为false,则直接返回第一个运算子的值,且不再对第二个运算子求值。
't' && '' // ""
't' && 'f' // "f"
't' && (1 + 2) // 3
'' && 'f' // ""
'' && '' // ""

var x = 1;
(1 - 1) && ( x += 1) // 0
x // 1

3.||运算符同样支持跳过第二个运算子的机制,被称为“短路”机制。

4.位运算符只对整数起作用,如果一个运算子不是整数,会自动转为整数后再执行。

5.虽然在 JavaScript 内部,数值都是以64位浮点数的形式储存,但是做位运算的时候,是以32位带符号的整数进行运算的,并且返回值也是一个32位带符号的整数

function toInt32(x) {
  return x | 0;
}
toInt32(1.001) // 1
toInt32(1.999) // 1
toInt32(1) // 1
toInt32(-1) // -1
toInt32(Math.pow(2, 32) + 1) // 1
toInt32(Math.pow(2, 32) - 1) // -1

6.一个数与自身的取反~值相加,等于-1。

7.两数进行三次异或^运算,可以互换它们的值。

8.头部补零的右移运算符>>>与右移运算符>>只有一个差别,就是一个数的二进制形式向右移动时,头部一律补零,而不考虑符号位。

10.位运算符可以用来取整

四,void运算符

1.void运算符的作用是执行一个表达式,然后不返回任何值,或者说返回undefined

void (x = 5) //undefined
x // 5

五,逗号运算符

1.逗号运算符用于对两个表达式求值,并返回后一个表达式的值。

'a', 'b' // "b"
var y = (x++, 10);
x // 1
y // 10

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值