发表于: 2020-03-05 21:41:48
0 1625
今天完成的事情:
学习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. 如果遇到相邻的俩个运算符,并且左边的运算符优先级大于等于右边的运算符,则直接运行左边的运算符
评论