JavaScript中的运算符,大多数是由标点符号表示的,比如“+”和“=”。而另外一些运算符则是由关键字表示的,比如delete和instanceof。关键字运算符和标点符号所表示的运算符一样都是正规的运算符。
typeof
、 void
、 delete
、,
加(+)、减(-)、乘(*)、除(/)、求余(%)
var num1=10+1; //11
var num2=10-2; //8
var num3=10*3; //30
var num4=10/5; //2
var num5=10%5; //0
注意:
i++ //相当于 i = i + 1;
i- - //相当于 i = i - 1;
++:自增,在 自身数值 基础上只做+1操作
var a = 10;
//++在后,称为后缀
//先使用 a 的值,然后再做自增运算
console.log(a++); //10
console.log(a);//11
//++在前,称为前缀
//先做自增运算,然后再使用a的值
var a = 10;
console.log(++a);//11
console.log(a);//11
- -:自减,在 自身数值 基础上只做-1操作
var a=10;
a--;
//先使用a的值,再自减
--a;
//先对a进行自减,然后再使用a的值
注意: 如果运算符两端的操作数不是number类型,会自动调用Number()进行转换,如果转换失败,结果就为 NaN
console.log(1>10); //false
console.log(1<10); //true
console.log(10>=10); //true
console.log(10<=9); //false
console.log(10==10); //true
console.log(10==='10'); //false
console.log(10!=10); //false
var point = {x:1,y:1}; //定义一个对象
"x" in point //true 对象有一个名为"x"的属性
"z" in point //false 对象不存在一个名为"z"的属性
var d = new Date(); //通过Data()构造函数来创建一个新对象
d instanceof Date; //true,d是由Data()创建的
d instanceof Object; //true,所有对象都是Object的实例
d instanceof Number; //false d不是一个Number对象
注意:
!:非,逻辑非 &&:与,逻辑与 ||:或,逻辑或 逻辑运算符“&&”、“||”和“!”是对操作数进行布尔算术运算,经常和关系运算符一起配合使用。
条件1 && 条件2
当,条件1 结果为真
并且,条件2 结果为真
整个表达式的结果才为真
x === 0 && y === 0 // 只有在x和y都是0的时候,才返回true
条件1 || 条件2
条件1 或 条件2
有一个为真的话
整个表达式的结果就为真
x === 0 || y === 0 // x和y只要有一个是0的时候,就返回true
!
用于对 现有条件结果 取反操作
非真即假
非假即真
语法:
var result=!条件;
& 按位与: 将两边的操作数转换成二进制,再将两个数字的二进制位进行对比,只有对应位结果都为1的时候,该位结果才为1,否则该位结果为0
ex :3 & 5
3 : 011
5 : 101
==============
001
场合:判断一个数字的奇偶性,n & 1,如果结果为1,则为奇数,结果为0,则为偶数
ex : 7 & 1
7 : 111
1 : 001
============
001 --奇数
ex : 6 & 1
6 : 110
1 : 001
==============
000 --偶数
| 按位或: 两边数字转换成二进制,每位上的数字,只要有一个为1,那么整体结果就为1,否则为0
ex :1 | 3
1 : 01
3 : 11
============
11 --> 3
场合:取整。任意数 | 0 ,和 Math.floor 是有区别的,和Math.trunc的结果一样
10.3 | 0 // 10
-10.3 | 0 // -10
Math.floor(10.3) // 10
Math.floor(-10.3) // -11
Math.trunc(10.3) // 10
Math.trunc(-10.3) // -10
~ 按位非: 简单的理解,对任一数值 x 进行按位非操作的结果为 -(x + 1); 注意:使用~ 按位非时,数值x的小数部分会直接舍弃。
~ -10.5 // -(-10 + 1) = 9
~ -11 // -(-11 + 1) = 10
~ 10 // -(10+1) = -11
~ 0 // -(0 + 1) = -1
而经常看到的 ~~value ,这样的写法,作用有两个 1、进行类型转换,转换成数字类型
~~true // 1
~~false // 0
~~"" // 0
~~[] // 0
~~undefined // 0
~~!undefined // 1
~~null // 0
~~!null // 1
~~ '123' // 123
2、取整,和上面提到的 任意数 | 0 是一样的
~~ 10.3 // 10
~~ -10.3 // -10
10.3 | 0 // 10
-10.3 | 0 // -10
Math.floor(10.3) // 10
Math.floor(-10.3) // -11
Math.trunc(10.3) // 10
Math.trunc(-10.3) // -10
^ 按位异或: 比较二进制数字,对应位,只有一个1的时候,结果才为1,否则就是0
ex :3^5
3 : 011
5 : 101
===========
110 --> 6
场合:两个数字的互换
var a = 3;
var b = 5;
a = a^b;
a:3 : 011
b:5 : 101
================
110 -> a = 6
b = b^a;
b:5 : 101
a:6 : 110
=================
011 -> b=3
a = a^b;
a:6 : 110
b:3 : 011
=================
101 -> a=5
<< 左移:将 二进制 数字向左移动几位
ex :
2<<1 4
2<<2 8
>> 右移:将二进制数字向右移动几位,左侧补0
5>>1
0000 0000 0000 0000 0000 0000 0000 0101
00000 0000 0000 0000 0000 0000 0000 010
结果 :2
5>>2
0000 0000 0000 0000 0000 0000 0000 0101
0000 0000 0000 0000 0000 0000 0000 0001
结果 : 1
=用于为变量赋值 var score = 90; 扩展赋值表达式 +=、 -=、*=、/=、%=
a += 3; //相当于a= a+3;
a -= 3; //相当于a= a-3;
a *= 3; //相当于a= a*3;
a /= 3; //相当于a= a/3;
a %= 3; //相当于a= a%3;
三目运算符:要求有3个操作数的运算符 语法 ? : 表达式1(条件) ? 表达式2 : 表达式3; 表达式1 :是个boolean的条件 如果表达式1的值为true,则运行表达式2,并将其结果作为整个表达式的结果 如果表达式1的值为false,则运行表达式3,并将其结果作为整个表达式3的结果
typeof 操作符用来检测变量的数据类型。 void,该操作符指定要计算一个表达式但是不返回值。 delete操作符通常用来删除对象的属性。 ,逗号运算符是二元运算符,它的操作数可以是任意类型。它首先计算左操作数,然后计算右操作数,最后返回右操作数的值。
+ +
- -
-(一元减法)
+(一元加法)
~
!
delete
typeof
void
————————————————————————
*、/、%
————————————————————————
+、-
+
————————————————————————
<<
>>
>>>
————————————————————————
<、<=、>、>=
<、<=、>、>=
instanceof
in
————————————————————————
==
!=
===
!==
————————————————————————
&
^
|
&&
||
?:
=
*=、/=、%=、+=、-=、&=、^=、|=、<<=、>>=、>>>=
————————————————————————
,
前面的运算符优先级要高于后面的运算符优先级,分割线内的运算符优先级一样。 更加具体的优先级的内容,请看这里。
运算符是JavaScript中基础的东西了,但涉及的东西也挺多,所以这篇文章中有一些地方没有非常详细的讲解,但大致是这些东西,希望大家对有点帮助。在 《JavaScript权威指南》 一书中讲解的可以说是非常细致了,文中也有参考《JavaScript权威指南》的地方,感兴趣的朋友可以去看看书。