运算符(操作符)
通过运算符可以是一个或多个值进行运算,并获取运算结果
比如:typeof就是运算符,可以获得值的类型,它会将该值的类型以字符串的形式返回,number,string,boolean,undefined,object
算术运算符
加 减 乘 除 求余(+,-,*,/,%)
- 对于非Number类型的值进行运算时,会将这些值转换为Number,然后再运算
- 任何值和NaN做运算都是NaN
- 运算是从左往右算的
- 任何值做减法,乘法,除法运算都会自动转换为Number,所以可以利用这个特点做隐式类型转换,减0,乘1,除1
特殊:
加法
- 两个字符串做加法运算时,会做拼串,即将两个字符串拼成一个字符串,并返回
- 任何值和字符串做加法运算,都会先将其转换为字符串,再进行拼接运算
- 我们可以使用(任何一种数据类型+空串)的方式即可将该类型转换为字符串,这是一种隐式的类型转换,由浏览器自动完成,实际上它也是调用了String方法
- 例子
var a=1+2+“3”; 其结果为33
var a=“1”+2+3;其结果为123
一元运算符
只需要一个操作数,比如typeof
-
+正号:正号不会对数字产生任何影响
-
-负号:负号可以对数字进行负号的取反
-
对于非Number值,会将其转换为Number类型,然后再进行运算。利用这个特点,可以对一个其他的数据类型使用+,来将其转换为number,和Number()的原理一样
-
例子:
var result=1++"2"+3;
结果不为123 ,结果为6
自增和自减
在变量本身的基础上,加和减
-
自增++:
分为两种,两种都会立即使原变量的值自增1,不同的是:- 后加加 a++
等于原变量的值,即自增之前的值 - 前加加 ++a
等于原变量的新值,即自增后的值
例子:
- 后加加 a++
var d=20;
var result=d++ + ++d +d;
结果为64,即20+22+22
var d=20;
d=d++;
结果为d=20,上式等价于var e=d++; d=e;
- 自减 - -
分为两种,两种都会立即使原变量的值自增1,不同的是:- 后减减 a- -
等于原变量的值,即自增之前的值 - 前减减 - -a
等于原变量的新值,即自增后的值
- 后减减 a- -
逻辑运算符
与 或 非(&&,||,!)
不改变本身的值,会返回结果
- 对于非Boolean值进行运算,会将其转换为boolean值,然后再进行运算
- 所以我们可以利用这个特点,来将其他的数据类型转换为布尔值,可以为任意的数据类型做两次非运算
- 在进行&&与运算时,如果第一个值为false,第二个值就不会进行运算,直接返回false
- 在进行| | 或运算时,如果第一个值为true,第二个值就不会进行运算,直接返回true
例子:
var a=10;
var b= false && a++ ;
b为false,a的值还为10,并没有进行加加运算
- 对于非布尔值进行与或运算时,会将其转换为布尔值,再进行运算,并返回原值,(原值指的就是式子本身的值,比如a++,返回的就是a++,如果赋值了,那个值就是a的原值;再比如返回NaN,或者字符串)
- 与运算:
如果两个值都为true,则返回后边的原值
如果两个值中有false,则返回靠前的原值
(即,如果第一个值为true,则返回第二个值;
如果第一个值为false,则直接返回) - 或运算
如果第一个值为true,值直接返回第一个值的原值;
如果第一个值为false,则直接返回第二个值
赋值运算符
- a=10;
- a+=5;
补充点:
变量的声明和赋值
- var a=10,b=20;
等价于var a=10;var b=20;- var a=b=10;
等价于var a=10;var b=10;
关系运算符
如果关系成立则返回true,如果关系不成立,则返回false
大于,小于,等于,大于等于,小于等于
- 非数值类的比较
- 对于非数值比较,将其他的数据类型先转换成Number类型,再进行比较
- 任何值和NaN做任何比较都是false
- 如果符号两侧都是字符串时,不会将其转换为数字进行比较,比较的是字符串的字符的编码
1、比较字符编码时是一位一位进行比较
2、如果两位一样,则比较下一位,所以一般借用它来对英语进行排序
3、比较中文时没有意义
4、如果比较的两个字符串型的数字,可能会得到不可预期的结果
5、比较两个字符串类型的数字时,一定一定一定要转型
Unicode编码
- 在字符串中使用转义字符输入Unicode编码
\u四位编码 - 在网页中使用Unciode编码
- &#编码:这里的编码需要十进制的
相等运算符==
比较两个值是否相等,如果相等返回true,否则返回false
- 当使用==来比较两个值时,如果两个的数据类型不同时,则会自动进行类型转换,将其转换为相同的类型,然后再进行比较。
- 大多数情况下都是将两个数据类型转换成Number类型,再进行比较
- 特殊情况:
null = = 0 返回false
undefined == null 返回true(因为undefined衍生自null)
NaN不和任何值相等,包括它本身 - 可以通过isNaN()函数来判断一个值是否为NaN,如果该值是NaN则返回true,否则返回false。
(使用该函数时,会自动将值转换成Number类型,然后再判断)
例子: var a=NaN; console.log(isNaN(a)); 返回true
不相等 !=
相当于相等的反
全等===
用来判断两个值是否全等,它和相等类似,不同的是它不会做类型转换,如果两个值类型不同,直接返回false
- null和undefined相等但是不全等
不全等 !==
全等的反
条件运算符(三元运算符)
语法
- 条件表达式?语句1:语句2;
执行流程
- 首先对条件表达式进行求值,
如果该值为true,则执行语句1,并返回执行结果,
如果该值为false,则执行语句2,并返回执行结果
如果条件非Boolean值,会将表达式结果进行转换
运算符的优先级
使用逗号,可以分割多个语句,一般可以在声明变量时使用
比如:
var a,b,c; / /声明多个变量
var a=1,b=2,c=3; / /声明多个变量并赋值
var a,b,c=1;/ /这里的ab都是undefined类型,c值为1
运算符优先级表:
在表中,越靠上优先级越高,优先级越高越优先计算,如果优先级一样,则从左往右计算
(图中第二行为括号,最后一行为逗号)