运算符也叫操作符,通过运算符可以对一个或多个值进行计算,并获取运算结果。
例如:typeof
就是一个运算符,可以获得值的类型。它会将值的类型以字符串
的形式返回
- 算数运算符
- 一元运算符
- 自增和自减
- 逻辑运算符
- 赋值运算符
- 关系运算符
- 相等运算符
- 条件运算符(三元运算符)
- 运算符的优先级
算数运算符
+、-、*、/、%
var a = 10; //定义变量 a
var b = 20; //定义变量 b
var result; //定义变量 result 用于接收运算的结果
result = a + b; //加法运算
console.log("a + b = " + result);
result = a - b; //减法运算
console.log("a - b = " + result);
result = a * b; //乘法运算
console.log("a * b = " + result);
result = a / b; //除法运算
console.log("a / b = " + result);
// 重新为 b 赋值
b = 3;
result = a % b; // 取余数
console.log("a % b = " + result);
控制台的输出结果:
注意:
+
加号比较特殊,如果对两个字符串进行加法运算,则会做拼串的操作,就是将字符串拼接成一个字符串,并返回结果- 任何类型的值和字符串做加法运算,都会先转换为字符串,然后再进行运算
- 当对
非 Number
类型的值进行运算的时候,会将其转换为 Number
,然后再进行运算 - 任何值和
NaN
做运算结果都是NaN
// 两个字符串做加法,会拼串
console.log("我是第一个字符串"+"我是第二个字符串");
//任何值和字符串做加法运算
var a = 10; // Number
var b = "字符串类型";
console.log("Number + String = " + a + b);
a = true; //Boolean
console.log("Boolean + String = " + a + b);
a = null; //Null
console.log("Null + String = " + a + b);
a = undefined; //Undefined
console.log("Undefined + String = " + a + b);
// 非 number 的值进行运算的时候
a = 10; //为 a 重新赋值
b = true; //为 b 重新赋值 Boolean
console.log("Number + Boolean = " + (a + b));
b = Null; //为 b 重新赋值 Null
console.log("Number + Null = " + (a + b));
b = ""; //为 b 重新赋值 空串
console.log("Number + 空串 = " + (a + b));
// 任何值和 NaN 运算
b = NaN;
console.log("Number + NaN = " + (a + b));
a = true; //Boolean
console.log("Boolean + NaN = " + (a + b));
a = null; //Null
console.log("Null + NaN = " + (a + b));
a = undefined; //Undefined
console.log("Undefined + NaN = " + (a + b));
控制台的输出结果:
一元运算符
一元运算符只需要一个操作数
+
表示正号,不会对值产生任何影响
- 可以对其他的数据类型使用
+
来将其转换为number
原理和Number()
一样。
-
表示负号,可以对数字进行负号的取反
- 对于
非 number
的值,会先转换成number
然后再运算。
var a = +10; // 正值 a = 10
var b = true; //Boolean 类型的值
console.log("b的原值为:"+b); //转换前的输出
b = +true; //可以使用 + 把值转换成 Number
console.log("转换后的值为:"+b); // 转换后的输出
a = -100; // 设置为负值
console.log("a的值为:" + a);
a = -true; //先把 true 转换成 number 然后再进行运算
console.log("a的值为:" + a);
控制台的输出结果:
自增和自减
++
++
表示自增
- 通过自增可以使变量在自身的基础上
+1
- 对于一个变量自增以后,原变量的值会立即自增1
- 自增分2种:后++
a++
和 先++++a
- 无论是
a++
还是++a
都会立即使原变量的值自增1
不同的是,a++
和++a
的值不同
a++
的值等于原变量的值
(自增前的值)
++a
的值等于新值
(自增后的值)
var a = 10;
console.log("a++ 的值为:" + a++ + ",此时 a 的值为:" + a);
a++; //自增 1
console.log("最终 a 的值为:" + a);
a = 10;
console.log("++a 的值为:" + ++a + ",此时 a 的值为:" + a);
++a; //自增 1
console.log("最终 a 的值为:" + a);
控制台的输出结果:
- -
--
表示自减
- 通过自增可以使变量在自身的基础上
-1
- 对于一个变量自增以后,原变量的值会立即自减1
- 自减分2种:后--
a--
和 先----a
- 无论是
a--
还是--a
都会立即使原变量的值自减1
不同的是,a--
和--a
的值不同
a--
的值等于原变量的值
(自增前的值)
--a
的值等于新值
(自增后的值)
var a = 10;
console.log("a-- 的值为:" + a-- + ",此时 a 的值为:" + a);
a--; //自减 1
console.log("最终 a 的值为:" + a);
a = 10;
console.log("--a 的值为:" + --a + ",此时 a 的值为:" + a);
--a; //自减 1
console.log("最终 a 的值为:" + a);
控制台的输出结果:
逻辑运算符
JS中为我们提供了三种逻辑运算符 &&
||
!
&&
&&
表示与运算
,可以对符号两侧的值进行与运算,并返回结果
– 如果两侧的值都是 true
,则结果为 true
– 只要有一个值为 false
,则结构为 false
– 在 JS 中,&&
表示 短路与
,短路与的特点
如果第一个值为 true
,则会检查第二个值
如果第一个值为 false
则不会检查第二个值
– 对于非布尔值
的情况,会将其转换为布尔值
,然后再进行运算,并返回原值
如果第一个值为 true
,则必然返回第二个值。
如果第一个值为 false
,则直接返回第一个值。
// && 运算
console.log(true && true); // true
console.log(true && false); // false
console.log(false && false); // false
//非布尔值的情况
console.log(10 && 20); //true && true 会返回 20
console.log(0 && 20); //false && true 会返回 0
控制台的输出结果:
||
||
表示或运算
,可以对符号两侧的值进行或运算,并返回结果
– 如果符号两侧的表达式的值都 false
,结果为 false
– 只要有一个表达式的值为 true
,结果就为 true
– JS 中的||
也是一个短路 ||
如果第一个值为 false
,则会检查第二个值。
如果第一个值为 true
,则不会检查第二个值。
– 对于非布尔值
的情况,会将其转换为布尔值
,然后再进行运算,并返回原值
如果第一个值为true
,则直接返回第一个值。
如果第一个值为false
,则直接返回第二个值。
// || 运算
console.log(true || true); // true
console.log(true || false); // true
console.log(false || false); // false
//非布尔值的情况
console.log(10 || 20); //true && true 会返回 10
console.log(0 || 20); //false && true 会返回 20
控制台输出的结果:
!
!
表示 非
可以对一个值进行非 运算
– 所谓非运算就是对一个布尔值进行取反操作
,就是 true 变 false
,false 变 true
– 如果对一个值进行两次取反,它不会发生变化。
– 如果对非布尔值进行运算,会先转换成 布尔值,然后再进行非运算。
所以可以利用该特点将其他的数据类型转换成布尔值 !!
console.log(!true); //false
console.log(!false); //true
//对于非布尔值的情况
var a = 10;
console.log(!a); // false
控制台的输出结果:
赋值运算符
可以将 符号右侧的值
赋值给左侧
=
、+=
、-=
、*=
、/=
、%=
var a = 10;
a += 10; //等价于 a = a + 10;
console.log("a += 10的结果为:" + a);
a = 20; //重新给 a 赋值
a -= 10; //等价于 a = a - 10;
console.log("a -= 10的结果为:" + a);
a = 20; //重新给 a 赋值
a *= 10; //等价于 a = a * 10;
console.log("a *= 10的结果为:" + a);
a = 20; //重新给 a 赋值
a /= 10; //等价于 a = a / 10;
console.log("a /= 10的结果为:" + a);
a = 10; //重新给 a 赋值
a %= 3; //等价于 a = a % 3;
console.log("a *= 3的结果为:" + a);
控制台的输出结果:
关系运算符
>
<
>=
<=
通过关系运算符可以比较两个值之间的大小关系
,如果关系成立返回true
,否则返回 false
– 对于非数值进行比较时,会将其转换为数字,然后在做比较。
– 任何值和 NaN
做任何比较都是 false
了解内容:
-- 如果符号两侧的值都是字符串,不会将其转换为数字进行比较,而会分别比较每个字符中的 `Unicode 编码`。比较字符编码时,是一位一位进行比较,如果两位一样,则比较下一位。*可以借用这种方式对英文进行排序。*
注意:
-- 比较中文时没有意义。
-- 比较两个字符串型的字符串时,一定要转型。
var a = 10;
var b = 20;
console.log(a > b); //false
console.log(a < b); // true
console.log(a >= b); //false
console.log(a <= b); //true
console.log("--------我是分割线---------");
//任何值和 NaN 比较返回的都是 false
console.log(a > NaN); // false
console.log(true > NaN);// false
console.log(null > NaN);// false
console.log(undefined > NaN);// false
控制台输出的结果:
相等运算符
用来比较两个值是否相等,如果相等返回
true
否则返回false
==
使用 ==
可以用来两个值是否相等。
当使用 ==
来比较两个值的时候,如果值的类型不同,则会先进行类型转换,转换成相同的类型,然后再进行比较。
/* 两个值类型相等的情况 */
var a = 10;
var b = 20;
console.log("a,b的值是否相等:" + (a == b));
/* 两个值的类型不相等的情况 */
var a = 10;
var b = true;
console.log("a,b的值是否相等:"+ (a == b));
控制台的输出结果
Undefined
衍生自 null
,所以这两个值在进行 ==
判断时,会返回 true
.
console.log(undefined == null);
控制台输出结果
NaN
不和任何值相等,包括它本身。可以通过 isNaN()
函数来判断一个值是否为 NaN,如果该值是 NaN 返回 true,否则返回 false.
console.log(NaN == NaN); //false
console.log("字符串" == NaN); //false
console.log(10 == NaN); //false
console.log(true == NaN); //false
var a = NaN ; // 定义一个变量,赋值为 NaN
var result = isNaN(a); // 使用 isNaN() 函数判断 a的值是不是一个 NaN
console.log("a的值是否为 NaN:"+result);
控制台输出结果
!=
用来判断两个值是否 不相等
,如果不相等返回 true,否则返回 false.
!==
在判断的时候,如果两个值的类型不同,也会先转换成相同的数据类型吗,然后再进行比较。
console.log(10 != 20); // true
console.log("字符串" != 20); // true
console.log(0 != false); // false
控制台输出结果
===
三个等号表示全等
,它和==
类似,不同的是他不会做自动的类型转换,如果两个值的类型不同,则直接返回 false
console.log(0 == false); // true
console.log(0 === false); // false
控制台输出结果
!==
表示不全等
,它和 !=
类似,不同的是它不会做自动的类型转换,如果两个值的类型不同,则直接返回true
.
console.log(0 != false); // false
console.log(0 !== false); // true
控制台的输出结果
条件运算符(三元运算符)
语法:
条件表达式 ? 语句1 : 语句2
条件运算符的执行流程
条件运算符在执行时,首先对条件表达式进行求值,如果该值为 true,则执行语句1 并返回结果,如果该值为 false,则执行语句2 并返回结果。
如果条件表达式是一个 非布尔值,则会先转换为 布尔值,再进行操作。
var a = 11;
console.log(a < 10 ? "a < 10" : "a > 10");
控制台输出结果
运算符的优先级
和数学一样,在 JS 中运算符也有优先级
例如:
先乘除后加减
在 JS 中有一个运算符优先级的表
在表中,位置越靠上,优先级就越高,就越先计算。如果优先级一样,则从左往右计算。
如果遇到优先级不清楚的可以使用小括号来改变优先级。