前言

运算符应该是最基本的一些知识了,在JS里基本上有以下几种运算符分类

  • 算数运算符 (+ - * / %)
  • 自增/自减运算符 (++ --)
  • 一元运算符 (+ -)
  • 逻辑运算符 (&& || !)
  • 赋值运算符 (=、+=、-=、*=、/=、%=)
  • 比较运算符(==、===...)
  • 三元运算符(条件运算符)

在此不会逐一展开说明,只会选择一些个人觉得蛮值得留意的展开讲解。

 

 

算数运算符

就是普通的加、减、乘、除; 而 % 是代表取模/取余

    var a;
    a = 7 % 3;
    console.log(a)  //打印结果为 1

Remarks:

1、在JS中算数运算符的运用和计算中,比较值得留意的应该是 “浮点数”

因为JS中的浮点数计算是不十分准确的(精确度不足)!

    console.log(0.1+0.2) 
    //不是预期的 0.3,而是 0.30000000000000004

所以,谨记:千万别用浮点数进行精确度需求高的运算!

 

2、任何值和字符串 string 做 + 法运算时,+号变为拼接作用,将值转换为字符串,再拼接

    console.log(1 + 2 + "3")  //打印 33; 从左往右,3 + “3”
    console.log("1" + 2 + 3) //打印 123; “12” + 3

 

 

自增/自减运算符

自增

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

首先,需要明确一个概念:a a++ 或 ++a,包括待会提及的自减 a--/--a, 他们是两种完全不同的东西

  1. a 是变量
  2. a++/++a、a--/--a 这些是一个表达式
  • a 作为变量,无论是进行 a++ 或 ++a,变量 a 的值都会增加 1
  • 不同的是整个表达式本身的值:
    • a++,此表达式的值是旧值(不 +1,a自增前的值),可以这么理解:a 在前,++ 在后,所以是先拿“旧 a”的值,再自增
    • ++a 则是新值(+1,a自增后的值),可以这么理解:++ 在前,a 在后,所以是得先加(自增),因此是新值

 

自减

原理同上!

开发中,大多使用后置的自增/自减,并独占一行: num++ / num--

举例:

    var n1 = 10;
    var n2 = 20;

    var result1 = n1++;

    console.log(n1); // 11  变量必自增
    console.log(result1); // 10  旧值

    result = ++n1;
    console.log(n1); //12  变量必自增
    console.log(result); //12  新值

    var result2 = n2--;
    console.log(n2); // 19 变量必自减
    console.log(result2); // 20  旧值

    result2 = --n2;
    console.log(n2); // 18 变量必自减
    console.log(result2); // 18  新值

 

 

一元运算符

正号 +

  1. 正号不会对数字产生任何影响。比如说,2和+2是一样的。
  1. 我们可以对一个其他的数据类型使用 +,来将其转换为 number【重要的小技巧】
    console.log(1 + 2 + +"3"); //打印 6; 3+3

 

负号 -

负号可以对数字进行取反

 

 

逻辑运算符

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

 

重点记住是其 短路 特性

1、&&(and)的短路:

  • 如果第一个值为false,则不会执行后面的内容,并返回第一个值
  • 如果第一个值为 true,则继续执行第二条语句,并返回第二个值
    var bar1 = 0 && c;
    console.log('bar1====='+bar1);
    //bar1=====0

    var foo1 = 5 && c;
    console.log('foo1===='+foo1);
    //报 c is not defined错误。

 

2、JS中的||属于短路的或

  • 如果第一个值为true,则不会执行后面的内容,并返回第一个值
  • 如果第一个值为 false,则继续执行第二条语句,并返回第二个值。
    var foo = 5 || c;
    console.log('foo===='+foo);
    //foo====5 不报错

    var bar = 0 || c;
    console.log('bar===='+bar);
    //报 c is not defined错误。

*remarks:&& 的优先级高于 ||,但可以通过括号()来改变优先级

 

 

比较运算符

比较值得注意的是进行 相等 判断时采用的运算符 一般而言有两种:

1、== 相等判断;这个符号并不严谨,会做隐式转换,将不同的数据类型,转为相同类型进行比较(大部分情况下,都是转换为数字)

    console.log("6" == 6); // 结果:true。这里的字符串"6"会先转换为数字6,然后再进行比较
    console.log(true == "1"); // 结果:true
    console.log(0 == -0); // 结果:true

    console.log(null == 0); // 结果:false

 

2、=== 全等判断;全等在比较时,不会做类型转换。如果要保证绝对等于(完全等于),我们就要用它

    console.log("6" === 6);  //false
    console.log(6 === 6); //true

 

 

三元运算符

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

语法:

条件表达式 ? 语句1 : 语句2;

 

执行的流程:

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

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

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

    var status = (age >= 18) ? "adult" : "minor";
延伸阅读
  1. 上一篇: JS笔记 | 3. 对象Object (this、原型对象、Class语法糖)
  2. 下一篇: JS笔记 | 1. 数据类型和栈内存vs堆内存

发表评论

您尚未登录,登录后方可评论~~
登陆 or 注册

评论列表

暂无评论哦~~