运算符
加+ 减- 乘 * 除以/ 取模(余数)%
运算符可以对一个或多个值进行运算,并获取运算结果。
除了加法,当对非Number
类型的数据进行运算时,会先将数据转成Number
类型再进行运算。可以利用这个性质将数据转换成Number
类型。
任何值和NaN
进行运算,结果都是NaN
任何值和字符串做加法运算都会先转换为字符串,然后再和字符串做拼接操作。因此我们可以利用这一特性,用加法将任意数据加上一个空字符串,转换成String
格式。
var a = 123;
a = a + "";
result = 1 + 2 + "3";
result = "1" + 2 +3;
console.log("result = " + result);
结果分别是:
result = 33
result = 123
100 - "1";
的结果是99
2 * "8"
结果是16
2 * undefined
结果是NaN
2 * null
结果是0
一元运算符
只需要一个操作数:
- 正号 +
- 负号 -
负号可以对数字进行符号取反,对于非Number类型的值,会将其先转换成Number,然后再符号取反。可以对一个其他的数据类型使用正号+
以实现数据类型的转换。
var result = 1 + + "2" + 3;
结果是6
自增
通过自增可以使变量在自身的基础上增加1
var a = 1;
a++;
++a;
前++和后++
a++
这个表达式的值等于原变量的值
++a
这个表达式的值等于自增后的值
而二者都会改变a
的值
比如:
var d = 20;
var result = d++ + ++d + d;
结果是64
var d = 20;
d = d++;
d的值现在是20,d = d++
相当于做了两次赋值运算,第一次是自增,第二次是将自增表达式的值赋值给d。
自减
通过自减,可以使变量在自身基础上减1
a--
和 --a
道理相同
逻辑运算符
- 与
&&
- 或
||
- 非
!
var b = 10;
b = !b;
此时b变成了Boolean类型的数据,并且值为false,可以将任意数据类型取两次反,将任意数据类型转化为布尔值。
a = !!a;
在JS中,“与"是一种短路的"与”,如果第一个值为false
,则立即返回值false
,如果第一个值为true
,则继续检查第二个值。
var result = false && alert("你看我出不出来");
在JS中,是在表达式中找true
,如果找到了就立即返回true
。
对非布尔值进行"与"或"非"运算时,会将其转换为布尔值,然后再运算:
- 对于"与"运算,如果两个值中有
false
,则返回靠前的false
,如果第一个值为true
,则返回第二个值。 - 对于"或"运算,如果第一个值为
true
,则直接返回第一个值,如果第一个值为false
,则返回第二个值。
比较运算符
当比较运算符的两端不是数字时,先将该值转换成数字再进行比较。
如果两侧的值都是字符串,则不会将其转成数字比较,而是比较两个字符串的Unicode编码,比较字符编码时,是一位一位进行比较,如果两位一样,则比较下一个,直到比出大小。可以借此对英文进行比较。
console.log("11" < "5");
结果是true,因为两侧都是字符串,比较Unicode编码,然后先比较第一位,1的Unicode编码小于5,所以返回true。
在比较两个字符串类型的数字时,一定要将数字转型后进行比较,否则无法比较出正确的结果。
NaN
和任何值比较都返回false
- 在字符串中使用转义字符
\n
输出Unicode编码:\u四位编码
console.log("\u2620");
- 在网页中使用Unicode编码:&#编码;(十进制)
<h1>☠</h1>
undefined衍生自null,两者做相等判断返回true
console.log(undefined == null);
NaN
不和任何值相等,包括它自己。可以通过isNaN()
函数来判断一个值是不是NaN
。
全等 ===
,不全等!==
三元运算符
语法:
条件表达式?语句1:语句2;
在执行时,先对条件表达式进行求值:
- 如果该值为true,则执行语句1
- 如果该值为false,则执行语句2
例如,求a和b中的最大值:
var max = a > b ? a:b;
求a、b、c中的最大值:(不推荐使用下面的方法)
var max = a > b ? (a > c ? a : c) : (b > c ? b : c);
运算符的优先级
如果运算符的优先级一样,则从左往右算,如果优先级不一样,则先算优先级高的。如果遇到优先级不清楚的,可以用括号改变优先级。
比如
var result = 1 || 2 && 3;
结果为1,因为"与"的优先级比"或"的高。