快速复习一遍JavaScript(四)· 运算符

什么是运算符

运算符也叫操作符,通过运算符可以对一个或者多个值进行运算,并获取运算结果

  1. , 运算符:可以分割多个语句,一般可以在声明多个变量时使用

  2. typeof:可以用来获得一个值的类型
    它会将该值的类型以字符串的形式返回:number string boolean undefined object

  3. 算数运算符(二元运算符)
    当对非Number的值进行运算时,会将这些值先转换为Number类型在进行运算(String类型做+法有特例)
    任何值和NaN做运算都得到NaN

    +:加法并返回
    	任何值和字符串做加法运算都会先转换为字符串,然后两个字符串拼接成一个字符串并返回
    -:减法并返回 -0转Number
    *:乘法并返回 *1转Number
    /:除法并返回 /1转Number
    %:模运算(取余数)并返回
    
  4. 一元运算符:只需要一个操作数
    + :正号 +a转Number
    - :负号
    当对非Number的值进行运算时,会将这些值先转换为Number类型在进行运算

  5. 自增和自减
    ++ :自增 对于一个变量自增之后,原变量的值会+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. 语法:条件表达式?语句1:语句2;
  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
% * /
+(双目) -(双目)
<< >> >>>
< <= > >=
== !== ===
&
^
|
&&
||
?:
= +=  -= *= /= %= <<= >>= >>>= &= ^= |=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值