什么是运算符
运算符也叫操作符,通过运算符可以对一个或者多个值进行运算,并获取运算结果
-
, 运算符:可以分割多个语句,一般可以在声明多个变量时使用
-
typeof:可以用来获得一个值的类型
它会将该值的类型以字符串的形式返回:number string boolean undefined object -
算数运算符(二元运算符)
当对非Number的值进行运算时,会将这些值先转换为Number类型在进行运算(String类型做+法有特例)
任何值和NaN做运算都得到NaN+:加法并返回 任何值和字符串做加法运算都会先转换为字符串,然后两个字符串拼接成一个字符串并返回 -:减法并返回 -0转Number *:乘法并返回 *1转Number /:除法并返回 /1转Number %:模运算(取余数)并返回
-
一元运算符:只需要一个操作数
+ :正号 +a转Number
- :负号
当对非Number的值进行运算时,会将这些值先转换为Number类型在进行运算 -
自增和自减
++ :自增 对于一个变量自增之后,原变量的值会+1
a++:a会+1但是a++还是原来的值 先用后增
++a:a会+1而且++a是自增后的值 先增后用
– :自减 对于一个变量自减之后,原变量的值会-1
var a = 10;
console.log(a++);
console.log(a++);
var d = 20;
console.log(d++ + ++d +d);
var b = 30;
b = b++;
console.log(b);
逻辑运算符
! 非
- 对一个布尔值进行取反操作,并返回
- 如果对非布尔值进行非操作,将会先转换为布尔值,然后再进行取反
&& 与
- 运算规则:两个值中只要有一个false就返回false 双真为真,一假为假
- JS中的“与”属于短路的“与”,只要第一个是false就不再检查第二个值
|| 或
- 运算规则:两个值中只要有一个true就返回true 一真即真,双假才假
- JS中的“或”属于短路的“或”,只要第一个是true就不再检查第二个值
*
&& || 非布尔值的情况:对于非布尔值进行与、或运算的时候,会先将其转换为布尔值然后再运算,并且返回原值 - 与运算
- 如果两个值都是true,则返回后面的值;如果两个值中有false返回靠前的false
- 如果第一个值是true,则返回第二个值;如果第一个值是false,则返回第一个值 - 或运算
- 如果第一个值是true,则返回第一个值;如果第一个值是false,则返回第二个值
var a = 1 && 2;
console.log("a = " + a);
var b = 0 && 2;
var c = 2 && 0;
console.log("b = " + b,"c = " + c);
var d = 0 && NaN;
var e = NaN && 0;
console.log("d = " + d,"e = " + e);
var f = 2 && NaN;
var g = NaN && 2;
console.log("f = " + f,"g = " + g);
赋值运算符
- = :可以将符号右侧的值赋值给左侧的变量
- += :a += 5 等价于 a = a + 5
- -= :a -= 5 等价于 a = a - 5
- *= :a *= 5 等价于 a = a * 5
- /= :a /= 5 等价于 a = a / 5
- %= :a %= 5 等价于 a = a % 5
关系运算符
通过关系运算符可以比较两个值之间的大小关系
- 如果关系成立返回true,反之关系不成立返回false
大于
= 大于等于
< 小于
<= 小于等于 - 对于非数值型进行比较时,会先转换为数值型然后再比较
- 任何值和NaN做任何比较都是false
- 如果符号两侧都是字符串的时候,不会转换为数值进行比较,而会分别比较字符串中Unicode编码
- 比较字符编码时是一位一位进行比较,第一位得出结论就不在往下比较了
- 如果两位一样,则比较下一位,所以借用它来对英文进行排序
- 比较中文时没有意义
- 注意!比较两个字符串类型的数字时,一定要先转型!
console.log("开始比较关系啦")
console.log("1 > true :" , 1 > true); //false
console.log("1 >= true:" , 1 >= true); //true
console.log("1 > '0':" , 1 > "0"); //true
console.log("10 > null:" , 10 > null); //true
console.log("10 > 'hello' = " , 10 > "hello"); //false
console.log("10 <= 'hello':" , 10 <= "hello"); //false
console.log("true > false:" , true > false); //true
console.log("'1' <= '5':" , "1" <= "5"); //true
console.log("'11' <= '5':" , "11" <= "5"); //true
console.log("'a' < 'b':" , "a" < "b"); //true
console.log("'adc' < 'bcd':" , "adc" < "bcd"); //true
相等运算符
相等运算符 ==
- 当时用 == 来比较两个值是否相等,如果值的类型不同,则会自动进行类型转换,将其转换为相同的类型然后再比较
- undefined 衍生自 null ,所以这两个值做相等比较的时候,会判定为true
- NaN 不和任何值相等,包括他本身
可以通过isNaN()函数来判断一个值是否是NaN
不等运算符 !=
- 当时用 != 来比较两个值是否相等,如果值的类型不同,则会自动进行类型转换,将其转换为相同的类型然后再比较
全等运算符 ===
- 类似于 == ,但不会做自动的类型转换,如果值的类型不同,直接返回fasle
不全等运算符 !==
- 类似于 != ,但不会做自动的类型转换,如果值的类型不同,直接返回true
console.log("开始相等运算符比较啦");
console.log("1 == 1:", 1 == 1); // true
var a = 10;
console.log("a == 4:", a == 4); // false
console.log("'1' == 1:", "1" == 1); // true
console.log("true == '1':", true == "1"); // true
console.log("null == 0:", null == 0); //null
console.log("undefined == null:", undefined == null); // true
console.log("NaN == NaN:", NaN == NaN); // false
var b = NaN;
console.log("b == NaN:", b == NaN); // false
console.log("isNaN(b):", isNaN(b)); // true
console.log("undefined === null:", undefined === null); // false
console.log("'123' === 123:", "123" === 123); // false
console.log("1 != '1':", 1 != "1"); //false
console.log("1 !== '1':", 1 !== "1"); //true
条件运算符
条件运算符,也叫三元运算符
- 语法:条件表达式?语句1:语句2;
- 执行的流程:
条件运算符在执行时,首先对条件表达式进行求值
如果该值为true,则执行语句1,并返回执行结果
如果该治为false,则执行语句2,并返回执行结果
- 如果条件表达式的求值结果是一个非布尔值,会现将其转化为布尔值然后在进行运算
console.log("开始条件运算符啦")
true ? console.log("true") : console.log("false");
var a = 1 , b = 2;
a > b ? console.log("a大") : console.log("b大");
var max = a > b ? a : b;
console.log("max =" + max);
var c = 100;
var d = 200;
var e = 300;
var max01 = c > d ? c : d;
max01 = max01 > e ? max01 : e;
console.log("max01 = " + max01);
// 可以,但是不推荐
var max02 = c > d ? c > e ? c : e : d > e ? d : e;
var max03 = c > d ? (c > e ? c : e) : (d > e ? d : e);
console.log("max02 = " + max02);
console.log("max03 = " + max03);
// 对比console.log()中 , 和 + 的使用
console.log(", a , b =" ,a, b);
console.log("+ a + b =" + a + b);
运算符的优先级
从上到下,优先级一次递减,同一层并列,从左到右:(不需要死机硬背,不记得时候就用()来辨别)
. [] new
()
++ --
! ~ +(单目) -(单目) typeof void delete
% * /
+(双目) -(双目)
<< >> >>>
< <= > >=
== !== ===
&
^
|
&&
||
?:
= += -= *= /= %= <<= >>= >>>= &= ^= |=