Skip to content

Latest commit

 

History

History
214 lines (138 loc) · 4.19 KB

05-运算符.md

File metadata and controls

214 lines (138 loc) · 4.19 KB

第五章 运算符

运算符就是我们拿到的各种数据用逻辑实现对比,运算,赋值等操作,得出想要的数据

1. 逻辑运算符

  • && 逻辑与

&&前后分别添加一个表达式,对表达式结果进行判断。会有一个返回值(计算之后的值)

a&&b:

​ 如果a的结果为真,则返回b,否则返回a

a?b:a//等价式

其中判断是否为真有强制类型转换: 0 undefined null NaN false "",这些结果为false,其余为true

  • || 逻辑或

a||b:

​ 如果a的结果为真,则返回a,否则返回b

a?a:b//等价式

也有强制类型转换

  • ! 逻辑非

一切数据类型都可以求逻辑非,结果将强制转换成布尔型数据

!a:

​ 如果a的结果为真,则返回false,否则为true

a?false:true//等价式

也有强制类型转换

2. 算术运算符

加法有两个含义:拼接或者加

"asd"+"fgh"//"asdfgh"字符串拼接

小学数学。。。返回两个数据的和、差、积、商、取余,有NaN非数值参与返回NaN

let a = 5,
    b = 2;
a+b;//7
a+NaN;//NaN
a-b;//3
a*b;//10
a/b;//2.5
a%b;//1

正常数值比较符合预期,但是不同的数据类型也可以进行算术运算

自加自减

var a = 1;
console.log(++a);//2,先自增,再返回值
console.log(a);//2
a = 1;
console.log(a++);//1,先返回,再自增
console.log(a);//2

--和++是一样的

var a = 1;
console.log((++a)+(a++)+(++a));//2 + 2 + 4 = 8
//在单个运算中运算完之后再增加,但是谁写这样的代码都是找锤,请少用。

3. 比较运算符

> < == === >= <= != !==

讲两个变量进行比较,返回true或者false

3>2;//true
3<2;//false
3==3;//true
3==='3'//false
2>=2;//true
2<=2;//true
3!=2;//true
3!=='3';//true

4. 赋值运算符

=

将=后面的值传递到=号前面的储存空间当中

let a = 1;//等号右边的值是1,传递到等号左边的储存空间,打印a显示1
let b = a;//等号右边a的值是1,同样传递,打印b显示1

其中赋值操作两大类:分为字面量和引用类型,后面讲

5. 类型转换

JS是动态类型语言,所以类型不同的时候进行运算会进行类型转换:

其中 数值 布尔 字符串 对象 null undefined都可以强制类型转换

但是转换目标一般是数值,布尔,字符串

  • 转字符串:

任何类型变量转字符串可以简单理解为将变量值加上引号

​ 底层是对变量使用toString方法

​ 在不理解的情况下在控制台打出(""+变量)测试

其中(非特殊情况下没有重写toString方法的)对象会转换成"[object Object]"

其中(非特殊情况下没有重写toString方法的)数组会去括号加"";

({}).toString();//加括号是因为区分对象与代码块,此代码与下一行值一样
""+{};//"[object Object]"
""+null;//"null"
""+undefined;//"undefined"
""+[1,23,3];//"1,23,3"去中括号
""+123123;//"123123"
""+NaN;//"NaN"
“”+false;//“false”

以上是基础,很重要,花时间掌握。

  • 转布尔型:

Boolean()传入变量

0 NaN "" null undefined 直接转换成false,其余先转换成字符串再转布尔,其余都是真,这是判断的基准

Boolean({});//true
!!{};//等价上,true
  • 转数值

Number()传入变量

null和""和false会转成0,true会转成1,"Infinity"和"-Infinity"会转换成Infinity和-Infinity,

其余都是调用toString()如果是数值形式,就转数值,不然就是NaN

Number("123");//123
+123;//同上等价,强制转数值或者-

6.运算符带来的强制类型转换

有字符串时加法运算符会把其余类型转换成字符串

"123"+3;//1233
3+"1";//31

其余非数值类型加法会先转数值(如果可以的话),如果不行,转成字符串转再数值加(转数值的方法)

123+null//null转数值时0,结果为123
0+undefined//undefined转数值为NaN,结果为NaN

-或者*或则/或者%优先转数值数值,同上

7.非运算符带来的强制类型转换

比如:

let a = null;
//...
//...
a = {};
//...
if(a){console.log(1)}//判断a是否为空

此时会强制类型转换为boolean型