目录

JavaScript的基础运算

# 运算符

计算机最基本的操作就是执行运算,执行运算时就需要使用运算符来操作。JavaScript按照使用场景的不同分成了很多种类型

  • 算术运算符
  • 赋值运算符
  • 关系/比较运算符
  • 逻辑运算符

# 运算元

运算元是运算符应用的对象,例如 5* 2 有两个运算元5和2,也称为参数。如果一个运算符对应的只有一个运算元,那么它是一元运算符,例如一元运算符负号-,其作用是对数字进行正负转换。如果一个运算符拥有两个运算元,那么就是二元运算符。

# JavaScript中的运算

# 算术运算符

  • 算术运算符用在数学表达式中,
  • 算术运算符是对数据进行计算的符号

image

# 取余(%)和求幂

取余运算符是%,例如console.log(10 % 3) // 1

求幂运算a ** b将a提升至a的b次幂,也称为a的b次方

console.log(2**3)
console.log(2**4)
1
2

# 赋值运算符

=实际也是一个运算符,被称之为赋值运算符

语句 x=value 将值value写入x然后返回x

链式赋值

let a, b, c;
a = b = c = 2 + 2;
console.log(a, b, c) // 4
1
2
3
  • 链式赋值从右到左进行计算
  • 先对最右边的 2+2 求值,然后将其赋值给左边的变量 c , b, a
  • 最后所有的变量共享一个值

# 原地赋值

原地赋值:经常需要对一个变量做运算,并将新的结果存储在同一个变量中

// 原地修改
var n = 10
n = n + 5
n = n * 2
1
2
3
4

使用+=*=修改

var n = 10
n += 5
n *= 2
1
2
3

所有的算术和位运算符都有简短的"修改并赋值"运算符 /= 和 -= 等。

image

# 自增和自减

  • 自增 (++)将变量加1

  • 自减 (--) 将变量减1

  • 自增和自减只能应用于变量,将其应用于数值(比如5++)则会报错。

  • ++或者-- 可以置于变量前,也可以置于变量后

  • 只有使用++或者--的返回值才能看到区别

  • 前置形式返回一个新的值,后置返回的是原来的值。

# 比较运算符

在JavaScript中,比较运算符的结果都是Boolean类型的

image

# 运算符的优先级

运算符放到一起时会有一定的优先级,优先级决定了表达式中运算执行的先后顺序。对应的MDN文档。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

# =====的区别

  • 普通的相等性检查==存在一个问题,它不能区分出0和false,或者空字符串和false这类运算;这是因为在比较不同类型的值时,处于判断符号 == 两侧的值会被先转换为数字;空字符串和false也是如此,转换为数字后都为数字1

  • 如果需要区分0和false,需要使用严格相等运算符 ===在进行比较时不会做任何的类型转换;即如果a和b属于不同的数据类型,那么a === b不会做任何的类型转换而立刻返回false

  • “不相等”表示为 !=,“严格不相等”表示为!==

  • 严格的相等运算符降低了犯错的可能性。

  • null比较特殊,null在进行比较的时候,应该是会被当成一个对象和原生类型的比较。

  • 对象类型一般返回false

    当对象类型和基本类型(==)比较时,对象类型会通过toPrimitive()函数转化后比较,例如

    var info = {
      name: 'zs',
      age: 20
    }
    console.log(123 == info) // false
    
    1
    2
    3
    4
    5

    但是如果重写对象中的toPrimitive函数,让其结果为123,那么==比较的结果就是true

    var info = {
        name:'zs',
        age: 20,
        [Symbol.toPrimitive](){
            return 123
        }
    }
    console.log(123 == info) // true
    
    1
    2
    3
    4
    5
    6
    7
    8

# 代码块

代码块是多行执行代码的集合,通过一个{}放到一起。

# if分支语句

if(...)语句会计算圆括号内的表达式,并将计算结果转换为布尔型,转换规则和Boolean函数的规则一致;数字0、空字符串、""、null、undefined和NaN都会被转换成false,因为它们被称为假值;其他值被转换为true,它们被称为真值。

# 逻辑运算符

逻辑运算符主要有三个:||(或),&&(与),!(非)。这些运算符可以组合到一起获取到最终的结果

image

# 逻辑或的本质

||表示"或"运算,"或"运算从左到右依次计算操作,处理每一个操作数时,都将其转换为布尔值,如果处理结果是true,就停止计算,返回这个操作数的初始值,如果所有的操作数都被计算过,则返回最后一个操作数。

注意:返回值是操作数的初始形式,不会转换为Boolean类型

# 逻辑与的本质

&&表示“与”运算,从左到右一次计算操作数,在处理每一个操作数时,都将其转换为布尔值,如果结果是false,就停止计算,并返回这个操作数的初始值,如果所有的操作数据都被计算过,则返回最后一个操作数。即与运算返回第一个假值,如果没有假值就返回最后一个值。

# 非运算

逻辑非运算符接受一个参数,分为两步计算:

  1. 将操作数转化为布尔类型,true/false
  2. 返回相反的值

两个非运算符(!!)有时候用来将某个值转化为布尔类型。第一个非运算将该值转换为布尔类型并取反,第二个非运算再次取反,最后就得到了任意布尔值的转化

上次更新: 2022/08/24, 08:36:37
最近更新
01
防抖和节流
02-06
02
正则表达式
01-29
03
async_await函数
12-30
更多文章>