发表于: 2020-03-05 21:41:48

0 1619


今天完成的事情:

学习JS基础知识

var a = 1;

var b = a + ++a + a++ * a + a++ *(a = a++ + ++a * a) + a


等同于

var a = 40;


var b = 1 + 2 + 2 * 3 + 3 *(a = 4 + 6 * 6) + 40; 等于169 

遇到相邻的俩个运算符,并且左边的运算符优先级大于等于右边的运算符,则直接运行左边的运算符




明天计划的事情:

继续学习
遇到的问题:


收获:


**引用类型的变量,存放的是内存地址**

**凡是出现对象字面量的位置,都一定在内存出现一个新的对象**

> 扩展知识:JS中的垃圾回收

> JS引擎,会定期的发现内存中无法访问到的对象,该对象称之为垃圾,JS引擎会在合适的时间将其占用的内存释放


如果是一个声明+赋值的表达式,返回结果为undefined


求余

余数的符号,与被除数相同

```

-10/3  -1  

10/3  1


```



## 其他类型使用算数运算

1. 除加号之外的算数运算符

将原始类型转换为数字类型(自动完成转换),然后进行运算

- boolean: true 1 ,false 0
```js
var a=true; 
a=+a; 转换为1
```
- string:如果字符串内部是一个正确的数字,直接变为数字,如果是一个非数字,则得到NaN(能识别Infinity,不能把字符串内部的东西当做表达式),如果字符串是一个空字符串(没有任何内容)转换为0,字符串转换时会忽略前后空格
> NaN虽然是数字,但它和任何数字做任何运算,得到的结果都是NaN

-  null: 0
-  undefined: NaN

将对象类型先转换为字符串类型,然后再将字符串转换为数字类型

对象类型 -> "[object object]"  -> NaN

2. 加号运算符

- 加号一边有字符串,含义变为字符串拼接

将另一边的其他类型,转换为字符串

数字 -> 数字字符串
boolean -> boolean字符串
null -> "null"
undefined -> "undefined"
对象 -> "[object object]"

加号两边都没有字符串,但一边有对象,将对象转换为字符串,然后按照上面的规整进行
```js
({}+123//"[object object]123"
```

- 其他情况和上面的数学运算一致



# 比较运算符

大小比较: >  <  >=   <=
相等比较:==  !=  ===  !==

**比较运算符的返回类型:boolean**

**算数运算符的优先级高于比较运算符**

## 大小比较

## 细节

1. 两个字符串比较大小,比较的是字符串的字符编码

2. 如果一个不是字符串,并且两个都是原始类型,将他们都转换为数字进行比较

NaN与任何数字比较,得到的结果都是false

Infinity比任何数字都大

-Infinity比任何数字都小

3. 如果其中一个是对象,将对象转换为原始类型,然后按照规则1或规整2进行比较

目前,对象转换为原始类型后,是字符串"[object object]"


## 相等比较

### ==  和 !== (相等比较不相等比较)

==:比较两个数据是否相等
!==:比较两个数据是否不相等

**细节**

1. 两端的类型相同,直接比较两个数据本身是否相同(两个对象比较的是地址)

2.两端的类型不同

1). null 和 undefined ,它们之间相等,和其他原始类型比较,则不相等
2). 其他原始类型,比较时先转换为数字,再进行比较
3). NaN与任何数字比较,都是false,包括自身
4). Infinity和-Infinity,只能和自身相等
5). 对象比较时,要先转为原始类型后,再进行比较

**由于相等和不相等比较,对于不同类型的数据比较违反直觉,因此,通常我们不使用这种比较方式,而是使用更加接近直觉的严格相等和严格不相等比较**

### === 和 !== (严格相等和严格不相等)

===:两端的数据和类型必须相同
!==:两端的数据和类型不同

1. 两端类型相同,规则和相等比较一致
2. 两端类型不同,为false


数字规则

1). NaN与任何数字比较,都是false,包括自身
2). Infinity和-Infinity,只能和自身相等


# 自增和自减

## 基本功能

++:将某个变量的值自增1

--:将某个变量的值自减1

## 细节

### 自增自减表达式

x++:将变量x自增1,得到的表达式的值是自增之前的值
```js
var a=0
console.log(x++)//0
console.log(x)//1
```
++x:将变量x自增1,得到的表达式的值是自增之后的值
```js
var a=0
console.log(++x)//1
console.log(x)//1
```

x--:将变量x自减1,得到的表达式的值是自增之前的值
--x:将变量x自减1,得到的表达式的值是自增之后的值

### 优先级

从高到低

1. ```++ --```
2. ```* / %```
3. ```+ -```

优先级的运算细节:

1. 从左到右依次查看
2. 如果遇到操作数,将数据的值直接取出
3. 如果遇到相邻的俩个运算符,并且左边的运算符优先级大于等于右边的运算符,则直接运行左边的运算符




返回列表 返回列表
评论

    分享到