js运算符

01、运算符的定义和分类

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

比如: typeof就是运算符,可以来获得一个值的类型。 它会将该值的类型以字符串的形式返回: number、string、boolean、undefined、object

注:运算符都是会返回结果的,而typeof这个运算符返回的结果就是变量的类型。那返回的结果的类型是什么呢?

是字符串。

运算符有很多分类,比如:

  • 算数运算符
  • 自增运算符
  • 逻辑运算符
  • 赋值运算符
  • 关系运算符
  • 三元运算符(条件运算符)

02、算术运算符

常见的算术运算符有以下几种:

+加、字符串连接
-
*
/
%取余
( )括号 优先级

求余例子:

假设用户输入345,怎么分别得到3、4、5这三个数呢?

代码如下:

得到3的方法: 345除以100,得到3.45然后取整,得到3。即: parseInt (345/100)
得到4的方法: 345除以100,余数是45,除以10,得到4.5,取整。即: parseInt(345 % 100 / 10)
得到5的方法: 345除以10,余数就是5。即: 345 % 10

算术运算符的运算规则

  1. 先乘除,后加减
  2. 小括号:能够影响计算顺序,且可以嵌套。先算括号里面的,如有嵌套先算嵌套括号里面的,没有中括号,没有大括号,只有小括号。
  3. 百分号:取余

例1(取余):

console.log(3 % 5);// 输出结果3

例2(注意算术符优先级):

/*
1. 1+6%4/2
2. 1+2/2
3. 1+1
4. 得到结果 a = 2
*/
var a = 1 + 2 * 3 % 4 / 2;

算术运算符的注意事项

  1. 当对非Number类型的值进行运算(包括+-*/)时,会将这些值转换为Number然后再运算。(PS:字符串+ Number字符串+字符串是特例,字符串无论+什么都是字符串,详情看下文)

    比如:

    var result = true + 1 // 等同 1 + 1
    var result2 = true + false // 等同 1 + 0
    var result3 = 1 + null // 等同1 + 0
    var result4 = 100 - '1' // 等同 100 - 1
    
  2. 任何值与NaN做运算的结果都是NaN

  3. 任何的值和字符串做加法运算,都会先转换为字符串,然后再做拼串操作

    比如:

    var a = 1 + 2 + '3' //结果33
    var b = '1' + 2 + 3 //结果123
    

    我们可以利用这一特点,来将一个任意的数据类型转换为String :我们只需要为任意的数据类型+一个""即可将其转换为String。这是一种隐式的类型转换,由浏览器自动完成,实际上它也是调用String()函数。也就是说,c =c + ""等价于c=String(c)

  4. 任何值做+-*/运算时都会自动转换为Number

    我们可以利用这一特点,为一个值-0*1/1 来将其转换为Number。原理和Number()函数一样。使用起来更加简单。

03、乘方

如果想计算a的b次方,可以使用以下函数:(Math的中文是"数学”,pow是"power幂")

Math.pow(a,b);

例1:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eb7hzqzp-1664598415821)(D:\文档\js文档\文档图片\wps1.jpg)]

代码如下:

Math.pow(3,Math.pow(2,2));

例2:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bojbhAD7-1664598415822)(D:\文档\js文档\文档图片\wps2.jpg)]

Math.pow(Math.pow(3,2),4);

04、开方

如果想计算数值a的开2次方,可以使用以下函数,sqrt即"square开方":

Math.sqrt(a);

05、一元运算符

一元运算符,只需要一个操作数。
常见的一元运算符如下:

  • typeof

    typeof就是典型的一元运算符。因为后面只跟一个操作数。

    如:

    var a = "123"
    console.log(typeof a) // 输出string
    
  • 正号+

    1. 正号不会对数字产生任何影响。比如说,2和+2是一样的。

    2. 我们可以对一个其他的数据类型使用+ ,来将其转换为number 。比如:

      var a = true
      a = +a
      console.log(a) // 输出1
      console.log(typeof a) // 输出number
      
      var b = '12'
      b = +b
      console.log(b) // 输出12
      console.log(typeof b) // 输出number
      
  • 负号-

    负号可以对数字进行取反

06、自增与自减

自增++

自增分为两种:a++++a

  1. 对于一个变量自增以后,原变量的值会立即自增1。也就是说,无论是a++ 还是++a ,都会立即使原变量的值自增1。

  2. 要注意的是:a是变量,而a++++a是表达式

    那这两种自增,有啥区别呢?

    区别是: a++++a的值不同: (也就是说,表达式的值不同)

    • a++的值等于原变量的值( a自增前的值)
    • ++a的值等于新值( a自增后的值)

自减–

原理同上

07、逻辑运算符

逻辑运算符有三个:

  • && 与(且):两个都为真,结果才为真
  • || 或:只要有一个为真,结果就为真
  • ! 非:对一个布尔值进行取反

连比的写法:

例1:

console.log(3 < 2 && 2 < 4) // 输出false

例2:

判断一个人的年龄是否在16-24之间:

var a = prompt("请输入年龄:")
alert(a >= 16 && a <= 24)

PS :上面的这个a>=18 && a<= 65 千万别想当然的写成18<= a <= 65, 没有这种语法。

注意事项

  1. 能参加逻辑运算的都是布尔值

  2. JS中的&&属于短路的与,也就是说只要第一个值为false,则不会看第二个值

  3. JS中的||属于短路的或,也就是说只要第一个值为true,则不会看第二个值

  4. 如果对非布尔值进行逻辑运算,则会先将其转换为布尔值,然后再操作。如:

    var a = 10; 
    a = !a // 任何非零的数值转换为布尔值都是true
    console.log(a) //输出false
    

非布尔值的与或运算【重要】

非布尔值进行与或运算时,会先将其转换为布尔值,然后再运算,但返回结果是原值。比如:

var a = 5 && 6 // true && true
console.log(a) // 输出 6 返回最后面的那个值

var b = 5 && 0 && 6 // true && false && true
console.log(b) // 输出 0 因为与运算在0这发生短路,不会进行后面的运算

var c = 5 || 6 // true || true
console.log(a) // 输出 5 因为或运算在5这发生短路,不会进行后面的运算

var d = 0 || 6 // false || true
console.log(b) // 输出 6 因为或运算是只要有一个为true就为true,而第一个值为false,所以继续进行后面的运算

08、赋值运算符

可以将符号右侧的值赋值给符号左侧的变量。

  • +=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

09、关系运算符

通过关系运算符可以比较两个值之间的大小关系,如果关系成立它会返回true,如果关系不成立则返回false.
关系运算符有很多种,比如:

>  	大于号
<   小于号
>=  大于等于号
<=  小于等于号
==  等于 在JavaScript中会进行隐式的类型转换,如果转换后的内容相等,那么就为true
=== 全等于  不会进行隐式的类型转换
!=  不等于
!== 不全等于

关系运算符,得到的结果都是布尔值:要么是true ,要么是false。

如:

var a = 5 > 10 //false
console.log(a) // 输出 false

非数值的比较

  1. 对于非数值进行比较时,会将其转换为数字然后再比较。

    例子:

    console.1og(1 > true); //false
    console.log(1 >= true); //true
    console.1og(1 > "0"); //true
    //console.1og(10 > nu11); //true
    //任何值和NaN做任何比较都是false
    console.log(10 <= "hello"); //false
    console.log(true > false); //true
    
    
  2. 特殊情况:如果符号两侧的值都是字符串时,不会将其转换为数字进行比较。比较两个字符串时,比较的是字符串的Unicode编码。[非常重要 ,这里是个大坑]

    比较字符编码时,是一位一位进行比较。如果两位一样,则比较下一位,所以借用它可以来对英文进行排序。

    PS :所以说,当你尝试去比较"123"和"56"这两个字符串时,你会发现,字符串"56’竟然比字符串"123"要大。也就是说,下面这样代码的打印结果,其实是true: (这个我们一定要注意,在日常开发中,很容易忽视)

    // 比较两个字符串时,比较的是字符串的字符编码
    console.log("56" > "123") // 输出true
    

    因此:当我们在比较两个字符串型的数字时,一定一定要先转型,比如parseInt()

  3. 任何值和NaN作比较都是false

==符号的强调

注意==这个符号是判断是否等于,而不是赋值

  1. ==这个符号还可以验证字符串是否相同,例如:

    console.log("你好呀" == "你好呀") // 输出true
    
  2. ==这个符号并不严谨,会将不同类型的东西,转化为相同类型进行比较(大部分情况下都是转换为数字)。如:

    console. 1og("6" == 6);   // 输出true。 这里的字符串"6"会先转换为数字6,然后再进行比较
    console. log(true == "1");  // 输出 true
    console.1og(0 == -0);  // 输出true 
    console. log(nu11 == 0);   // 输出false
    
  3. undefined衍生自null,所以这两个值做相等判断时,会返回true

    console.log(undefined == null) // 输出true
    
  4. NaN不和任何值相等,包括他本身

    console.log(NaN == NaN) // 输出false
    

    那么如果想判断某个值是否为NaN怎么判断呢?

    这时我们可以通过isNaN()函数来判断一个值是否为NaN,如:

    var a = 12
    console.log(isNaN(a)) // 输出false   如果a为NaN,则输出true,如果a不是NaN,则输出false
    

    ===符号的强调

    如果要保证完全等于,我们就要用三个等号===。全等不会做类型转换。例如:

    console.1og("6" === 6);   //false
    console.1og(6 === 6);   //true 
    

    由以上可知:

    • == 两个等号并不严谨,6和"6"是true
    • ===三个等号严谨,6和"6"是false

    另外==的反面是!====的反面是!==,如:

    console.1og(3 != 8);  //true
    console.1og(3 != "3"); //false, 因为3=="3"是true,所以反过来就是false。
    console.1og(3 !== "3"); //true, 应为3==="3"是false,所以反过来是true。
    

10、三元运算符

三元运算符也叫条件运算符

语法:

条件表达式?语句1:语句2  // 为true执行语句1,为false执行语句2

执行流程

条件运算符在执行时,首先对条件表达式进行求值:

  • 如果该值为true,则执行语句1,并返回执行结果
  • 如果该值为false,则执行语句2,并返回执行结果

如果条件的表达式的求值结果是一个非布尔值 ,会将其转换为布尔值然后再运算。

11、运算符的优先级

运算符的优先级如下:(越往上,优先级越高)

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值