令y = 5
web
Infinity + Infinity = Infinity (-Infinity) + (-Infinity) = -Infinity Infinity + (-Infinity) = NaN Infinity + null = Infinity 0 + 0 = 0 -0 + -0 = -0 +0 + -0 = +0 若是是两个字符串,则将字符串进行拼接 若是有一个是字符串一个不是字符串,则将非字符串转换成字符串再拼接 若是操做数都不是字符串类型,则将操做数转换为数值类型再相加}
于Number()相同,将其余类型的对象转换为数字类型数组
let two = "2";
let three = "3"; console.log(+two + +three); // 5 先将字符串转换为数字再相加,由于一元运算符的优先级比二元运算符的优先级更高 复制代码
Infinity - Infinity = NaN (-Infinity) - (-Infinity) = -NaN Infinity - (-Infinity) = Infinity Infinity - null = Infinity 0 - 0 = 0 -0 - -0 = -0 +0 - -0 = +0 与NaN相关的减法运算结果都为NaN 若是有一个操做数是对象,则先对对象进行隐式转换,再根据前面的规则进行减法运算 若是果有一个操做数是非数字类型则先在后台调用 Number()函数将其转换为数值,再根据前面的规则进行减法运算。
对隐式转换不了解的话能够看看这篇文章一次弄懂Javascript隐式转换编辑器
Infinity * 0 = NaN Infinity * null = NaN Infinity * undefined = NaN Infinity * Infinity = Infinity 若是操做数的值超过数值的表示范围,结果为Infinity 或 - Infinity 若是操做数中有一个操做数为NaN,结果为NaN 若是操做数中有一个操做数为undefined,结果为NaN 若是有一个操做数是对象,则先对对象进行隐式转换,再根据前面的规则进行乘法运算 若是有一个操做符不是数值类型,则先调用Number()进行转换,再根据前面的规则进行乘法运算
Infinity / 0 = Infinity Infinity / null = Infinity Infinity / undefined = NaN Infinity / Infinity = NaN 若是操做数的值超过数值的表示范围,结果为Infinity 或 - Infinity 若是操做数中有一个操做数为NaN,结果为NaN 若是操做数中有一个操做数为undefined,结果为NaN 若是有一个操做数是对象,则先对对象进行隐式转换,再根据前面的规则进行除法运算 若是有一个操做符不是数值类型,则先调用Number()进行转换,再根据前面的规则进行除法运算
操做数都是数值,执行常规的除法计算,返回除的余数 任何数 % undefined = NaN 任何数 % NaN = NaN Infinity % 任何数 = NaN 有限大的数 % 0 = NaN 有限大的数 % Infinity = 有限大的数 0 % 除null、undefined、NaN任何数 = 0 若是有一个操做数是对象,则先对对象进行隐式转换,再根据前面的规则进行取余运算 有一个操做数不是数值,则调用Number()转换
应用于非数字类型的时候,先将其转换为数字,再执行++的操做 应用于浮点数,执行加1的操做 应用于对象,先对对象进行隐式转换,再根据前面的规则进行++运算
应用于非数字类型的时候,先将其转换为数字,再执行--的操做。 应用于浮点数,执行减1的操做 应用于对象,先对对象进行隐式转换,再根据前面的规则进行--运算
进行幂运算函数
操做数 ** 幂post
console.log(2 ** 3); // 8
console.log(8 ** (1/3)); // 2 复制代码
令x = 10 y = 5
ui
令x = 5
spa
若是操做数是布尔类型,比较以前先将其转换成数值,false为0,true为1 若是操做数是字符类型,另外一个是对象,对象先进行隐式转换,再进行比较 若是操做数是字符类型,另外一个操做数是数值,则将字符串转换为数值在比较 null == undefined 为true null与undefined之外的任何数都不想等。 NaN与任何数都不相等 若是两个操做数都是对象,比较是否是同一个对象,若是是则返回true不然false
两个操做数都是数值,则执行数值比较 两个操做数都是字符串, 则比较两个字符串对应的ascii码 若是一个操做数是对象,将对象隐式转换后再比较。 若是一个操做数非数值类型,则将其转换为数字类型再比较
令x = 6 y = 3
3d
若是第一个操做数是对象,则返回第二个操做数 若是第二个操做数是对象,则只有在第一个操做数的值为true的状况下才会返回该对象 若是两个操做数都是对象,则返回第二个操做数 若是有一个操做数是null,则返回null 若是有一个操做数是NaN, 则返回NaN 若是有一个操做数是undefined,则返回undefined
第一个操做数是对象,则返回第一个操做数 第一个操做数的求值结果为false,则返回第二个操做数 两个操做数都是对象,则返回第一个操做数 两个操做数都是null,则返回null 两个操做数都是NaN,则返回NaN 两个操做数都是undefined,则返回undefined
若是操做数是一个空字符串,返回true 若是操做数是数值0,返回true 若是操做数是null,返回true 若是操做数是NaN,返回true 若是操做数是undefined,返回true 其余状况返回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 的反码减 1: 11111111 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("错"); // "对" 复制代码
返回变量的类型
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数据类型检测
a instance of
查看a是不是b的实例,是则返回true,不是则返回false
原型链能够被修改,因此这种方法一样不许确,详情查看深刻理解JS数据类型检测
读取对象的属性值,点只能用在对象上面,若点前面不是对象,则先将其变为对象,调用完以后再改回原来的类型
求表达式的值,或执行语句,而后void的值老是为undefined。
在a标签中return false能够阻止默认动做,将其改成void(f())做用相同。
表达式1,表达式2,...,表达式n
忽略第一个操做数,返回第二个操做数
逗号操做符的优先级比"="低
delete
运算符用来删除对象属性或者数组元素,若是删除成功或所删除的目标不存在,delete将返回true。
不是全部的属性均可删除,一些内置核心和客户端属性是不能删除的,经过 var 语句声明的变量不能删除,经过 function 语句定义的函数也是不能删除的。
a in b
判断操做数a是否做为属性名存在于对象b中,是则返回true,不是则则返回false
let obj = {
a: 1 } console.log("a" in obj); // true 复制代码