一次弄懂Javascript的各类运算符

算数运算符

令y = 5 web

"+"做为二元运算符

规则

  1. Infinity + Infinity = Infinity
  2. (-Infinity) + (-Infinity) = -Infinity
  3. Infinity + (-Infinity) = NaN
  4. Infinity + null = Infinity
  5. 0 + 0 = 0
  6. -0 + -0 = -0
  7. +0 + -0 = +0
  8. 若是是两个字符串,则将字符串进行拼接
  9. 若是有一个是字符串一个不是字符串,则将非字符串转换成字符串再拼接
  10. 若是操做数都不是字符串类型,则将操做数转换为数值类型再相加}

"+"做为一元运算符

做用

于Number()相同,将其余类型的对象转换为数字类型数组

let two = "2";
 let three = "3";  console.log(+two + +three); // 5  先将字符串转换为数字再相加,由于一元运算符的优先级比二元运算符的优先级更高 复制代码

"-"运算符

规则

  1. Infinity - Infinity = NaN
  2. (-Infinity) - (-Infinity) = -NaN
  3. Infinity - (-Infinity) = Infinity
  4. Infinity - null = Infinity
  5. 0 - 0 = 0
  6. -0 - -0 = -0
  7. +0 - -0 = +0
  8. 与NaN相关的减法运算结果都为NaN
  9. 若是有一个操做数是对象,则先对对象进行隐式转换,再根据前面的规则进行减法运算
  10. 若是果有一个操做数是非数字类型则先在后台调用 Number()函数将其转换为数值,再根据前面的规则进行减法运算。

对隐式转换不了解的话能够看看这篇文章一次弄懂Javascript隐式转换编辑器

"*"运算符

规则

  1. Infinity * 0 = NaN
  2. Infinity * null = NaN
  3. Infinity * undefined = NaN
  4. Infinity * Infinity = Infinity
  5. 若是操做数的值超过数值的表示范围,结果为Infinity 或 - Infinity
  6. 若是操做数中有一个操做数为NaN,结果为NaN
  7. 若是操做数中有一个操做数为undefined,结果为NaN
  8. 若是有一个操做数是对象,则先对对象进行隐式转换,再根据前面的规则进行乘法运算
  9. 若是有一个操做符不是数值类型,则先调用Number()进行转换,再根据前面的规则进行乘法运算

"/"运算符

规则

  1. Infinity / 0 = Infinity
  2. Infinity / null = Infinity
  3. Infinity / undefined = NaN
  4. Infinity / Infinity = NaN
  5. 若是操做数的值超过数值的表示范围,结果为Infinity 或 - Infinity
  6. 若是操做数中有一个操做数为NaN,结果为NaN
  7. 若是操做数中有一个操做数为undefined,结果为NaN
  8. 若是有一个操做数是对象,则先对对象进行隐式转换,再根据前面的规则进行除法运算
  9. 若是有一个操做符不是数值类型,则先调用Number()进行转换,再根据前面的规则进行除法运算

"%"运算符

规则

  1. 操做数都是数值,执行常规的除法计算,返回除的余数
  2. 任何数 % undefined = NaN
  3. 任何数 % NaN = NaN
  4. Infinity % 任何数 = NaN
  5. 有限大的数 % 0 = NaN
  6. 有限大的数 % Infinity = 有限大的数
  7. 0 % 除null、undefined、NaN任何数 = 0
  8. 若是有一个操做数是对象,则先对对象进行隐式转换,再根据前面的规则进行取余运算
  9. 有一个操做数不是数值,则调用Number()转换

"++"运算符

规则

  1. 应用于非数字类型的时候,先将其转换为数字,再执行++的操做
  2. 应用于浮点数,执行加1的操做
  3. 应用于对象,先对对象进行隐式转换,再根据前面的规则进行++运算

"--"运算符

规则

  1. 应用于非数字类型的时候,先将其转换为数字,再执行--的操做。
  2. 应用于浮点数,执行减1的操做
  3. 应用于对象,先对对象进行隐式转换,再根据前面的规则进行--运算

"**"运算符

做用

进行幂运算函数

语法

操做数 ** 幂post

console.log(2 ** 3);     // 8
 console.log(8 ** (1/3)); // 2 复制代码

赋值运算符

=、+=、-=、*=、/=、%=

令x = 10 y = 5ui

比较运算符

==、===、!=、!==

令x = 5spa

规则

  1. 若是操做数是布尔类型,比较以前先将其转换成数值,false为0,true为1
  2. 若是操做数是字符类型,另外一个是对象,对象先进行隐式转换,再进行比较
  3. 若是操做数是字符类型,另外一个操做数是数值,则将字符串转换为数值在比较
  4. null == undefined 为true
  5. null与undefined之外的任何数都不想等。
  6. NaN与任何数都不相等
  7. 若是两个操做数都是对象,比较是否是同一个对象,若是是则返回true不然false

关系运算符

>、<、>=、<=

规则

  1. 两个操做数都是数值,则执行数值比较
  2. 两个操做数都是字符串, 则比较两个字符串对应的ascii码
  3. 若是一个操做数是对象,将对象隐式转换后再比较。
  4. 若是一个操做数非数值类型,则将其转换为数字类型再比较

逻辑运算符

令x = 6 y = 33d

"&&"运算符

规则

  1. 若是第一个操做数是对象,则返回第二个操做数
  2. 若是第二个操做数是对象,则只有在第一个操做数的值为true的状况下才会返回该对象
  3. 若是两个操做数都是对象,则返回第二个操做数
  4. 若是有一个操做数是null,则返回null
  5. 若是有一个操做数是NaN, 则返回NaN
  6. 若是有一个操做数是undefined,则返回undefined

"||"运算符

规则

  1. 第一个操做数是对象,则返回第一个操做数
  2. 第一个操做数的求值结果为false,则返回第二个操做数
  3. 两个操做数都是对象,则返回第一个操做数
  4. 两个操做数都是null,则返回null
  5. 两个操做数都是NaN,则返回NaN
  6. 两个操做数都是undefined,则返回undefined

"!"运算符

规则

  1. 若是操做数是一个空字符串,返回true
  2. 若是操做数是数值0,返回true
  3. 若是操做数是null,返回true
  4. 若是操做数是NaN,返回true
  5. 若是操做数是undefined,返回true
  6. 其余状况返回false

位运算符

"&"按位与运算符

做用

&对操做数的二进制数中对应的每一位都作与算,若是对应位都为1则结果为1,若是对应位有一个是0,则结果为0code

1 的二进制表示为: 00000000 00000000 00000000 00000001
3 的二进制表示为: 00000000 00000000 00000000 00000011 console.log(1 & 3) // 1 复制代码

"|"按位或运算符

做用

|对操做数的二进制数中对应的每一位都作运算,若是对应位都为0则结果为0,若是对应位有一个是1,则结果为1cdn

1 的二进制表示为: 00000000 00000000 00000000 00000001
3 的二进制表示为: 00000000 00000000 00000000 00000011 console.log(1 | 3) // 3 复制代码

"~"按位非运算符

做用

~对操做数的二进制数对应的每一位都作运算,若是对应位为0则结果为1,若是对应位为1则结果为0

1 的二进制表示为: 00000000 00000000 00000000 00000001 
3 的二进制表示为: 00000000 00000000 00000000 00000011 ----------------------------- 1 反码二进制表示: 11111111 11111111 11111111 11111110 因为第一位(符号位)是1,因此这个数是一个负数。JavaScript 内部采用补码形式表示负数,即须要将这个数减去1,再取一次反,而后加上负号,才能获得这个负数对应的10进制值。 ----------------------------- 1 的反码减 111111111 11111111 11111111 11111101  再取反: 00000000 00000000 00000000 00000010 表示为10进制加负号:-2 console.log(~ 1) // -2 复制代码

"^"按位异或运算符

做用

^对操做数的二进制数中对应的每一位都作异或操做,当对应位的值不一样时,结果为1,不然为0

1 的二进制表示为: 00000000 00000000 00000000 00000001
3 的二进制表示为: 00000000 00000000 00000000 00000011 / console.log(1 ^ 3) // 2 复制代码

"<<"左移运算符

做用

<<运算符使指定值的二进制数全部位都左移指定位数

移动规则

丢弃高位,低位补0即按二进制形式把全部的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

1 的二进制表示为: 00000000 00000000 00000000 00000001 
2 的二进制表示为: 00000000 00000000 00000000 00000010 console.log(1 << 1) // 2 复制代码

">>"有符号右移运算符

做用

>>运算符使指定值的二进制数全部位都右移指定位数

移动规则

向右被移出的位被丢弃,拷贝最左侧的位以填充左侧。因为新的最左侧的位老是和之前相同,符号位没有被改变。

1 的二进制表示为: 00000000 00000000 00000000 00000001 
0 的二进制表示为: 00000000 00000000 00000000 00000000 console.log(1 >> 1) // 0 复制代码

">>>"无符号右移运算符

做用

>>>运算符使指定值的二进制数全部位都右移指定位数

移动规则

向右被移出的位被丢弃,左侧用0填充。由于符号位变成了0,因此结果老是非负的。对于非负数,有符号右移和无符号右移老是返回相同的结果。

条件运算符

语法

判断条件 ? 条件为真时的操做 : 条件为假时的操做

let num = 2;
num > 1 ? console.log("对"):console.log("错"); // "对"  复制代码

类型运算符

typeof运算符

做用

返回变量的类型

console.log(typeof null);     // object 
 console.log(typeof undefined);// undefined  console.log(typeof []); // object  console.log(typeof {}); // object  console.log(typeof true); // boolean  console.log(typeof "123"); // string  console.log(typeof 123); // number 复制代码

typeof检测类型并不许确,准确的检测方法与各类检测方法的介绍和对比请查看深刻理解JS数据类型检测

instanceof

语法

a instance of

做用

查看a是不是b的实例,是则返回true,不是则返回false

注意事项

原型链能够被修改,因此这种方法一样不许确,详情查看深刻理解JS数据类型检测

其余运算符

"."点运算符

做用

读取对象的属性值,点只能用在对象上面,若点前面不是对象,则先将其变为对象,调用完以后再改回原来的类型

void运算符

做用

求表达式的值,或执行语句,而后void的值老是为undefined。

在a标签中return false能够阻止默认动做,将其改成void(f())做用相同。

","逗号运算符

语法

表达式1,表达式2,...,表达式n

做用

忽略第一个操做数,返回第二个操做数

注意事项

逗号操做符的优先级比"="低

delete运算

做用

delete运算符用来删除对象属性或者数组元素,若是删除成功或所删除的目标不存在,delete将返回true。

注意事项

不是全部的属性均可删除,一些内置核心和客户端属性是不能删除的,经过 var 语句声明的变量不能删除,经过 function 语句定义的函数也是不能删除的。

in运算符

语法

a in b

做用

判断操做数a是否做为属性名存在于对象b中,是则返回true,不是则则返回false

let obj = {
 a: 1  }  console.log("a" in obj); // true 复制代码
相关文章
相关标签/搜索