值的传递和引用数据类型:
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-187.png)
赋值是从右向左赋值,10赋值给了a,c-->b-->a,console.log(b);一定会报错,b并没有被赋值,如果改成c=b=a;这时b,c都会被赋值。
基本数据类型在进行值传递时,只是复制了一份属性值进行操作。
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-188.png)
引用数据类型在进行值的传递时,传递的是引用地址。
栈区定义了一个 o1指向堆区lisi,将o1的属性传给o2,此时o1,o2的地址是相同的,o2直接将堆区内的name改为terry,所以o1访问时name也改变了。
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-189.png)
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-190.png)
操作符
算术操作符
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-191-1024x513.png)
- a,b均为number类型,直接计算
- a,b不是number类型,并且不是string或者object类型,将当前变量转换为number类型进行计算
- 只要其中有一个变量为string类型,另一个变量转换为string类型进行字符串拼接(如果为object类型,默认调用toString())
- 如果其中一个变量为object类型,另一个变量不为string,将另一个进行数据类型转换为number,然后调用object中valueOf/toString进行计算
- a>默认调用toString()
- b>当只重写toString(),调用tostring()
- c>当只重写valueof()时,调用valueof()
- d>当既重写了tostring又重写了valueof,调用valueof
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-192.png)
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-193.png)
比较运算符 返回值为boolean类型
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-194.png)
- a>b
- 如果a,b不为number类型,将a,b转换为number类型之后再进行比较
- 如果两个变量均为string类型:直接比较字符编码
- =:赋值
- 从右向左进行赋值
- ==:相等比较
- a,b均为number----直接对比
- a,b都不是number---转换为number
- a,b为string----字符编码
- null==undefined:true
- a,b为对象,比较引用地址
- ===:全等比较
- 只进行比较不进行数据类型转换,只要数据类型不同,即为不等
- null===undefined:false
逻辑元素符
- 逻辑与&&
- 同真为真,有假则假
- 如果第一个操作数为null/NaN/undefined/0/false/ "",直接返回第一个操作数
- 如果第一个操作数为其他,返回第二个操作数
- 逻辑或||
- 有真则真,同假则假
- 如果第一个操作数为null/NaN/undefined/0/false/"",直接返回第二个操作数
- 如果第一个操作数为其他,返回第一个操作数
- 逻辑非!
- 直接取反
- !a:先将a变量转换为boolean类型,然后后取反
- 连用两次逻辑非,就可以将任意数据类型转化为Boolean类型
三目运算符
符合执行第一个表达式,不符合执行第二个表达式
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-195.png)
一元操作符
- 加法+: +a
- +number--->number
- 如果a不是number类型,将a转换为number
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-197.png)
- 减法-:-a 取反
- ++ :
- a++ 先操作变量,然后进行++操作 a=a+1
- ++a 先进行++操作,然后操作变量 a=a-1
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-198.png)
- -- :
- a--: a=a-1
- --a: a=a-1
位运算
使用二进制进行计算,效率更高
js中:所有的位运算32位的2进制进行计算
原码--->反码-->补码
正数:原码=反码=补码
负数:反码=原码的符号位不变,其他位取反 补码=反码+1
128 64 32 16 8 4 2 1
-3:
1000 0000 0000 0000 0000 0000 0000 0011---->1000 0011 原码
1111 1100 反码 1111 1101 补码
4: 0000 0100 原码=反码=补码
sum=-3+4 10000 0001-->超过位数舍去 0000 0001 补码
符号位0为正数,所以补码=反码=原码
数据类型转换
- null和undefined没有转换函数
- Number: *--->number
- Number()直接转换函数
- parseInt():转换为整型
- parseFloat():转换为浮点数
- +a:Number()
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-200.png)
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-201.png)
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-205.png)
- Boolean: *-->boolean
- !!a: 两次取反返回boolean
- Boolean():转换函数
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-202.png)
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-203.png)
- String : *--->string
- String():转换函数 直接在变量外添加引号
- toString() :
- null和undefiend没有toString方法
- toString(num):转换成num进制
- a+' '
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-206.png)
流程控制语句
分支语句
- if语句:
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-207.png)
- switch-case语句:
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-208.png)
break:跳出循环体
continue:跳出本次循环,继续下一次循环
循环语句
- 三要素:初始条件 迭代条件 结束条件
- for(初始条件;结束条件;迭代条件){ 循环体 }
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-209.png)
- 死循环 : for(;;){}
Label语句
name:for(){}
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-210-1024x243.png)
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-214.png)
while语句 条件前置循环语句
开始条件;
while(结束条件){ ///循环体 //迭代条件}
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-213.png)
死循环: while(true){}
do-while语句 后置条件语句
开始条件;
do{ // 循环体 //迭代条件} while(结束条件)
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-215.png)
for in循环 增强for循环
用于遍历对象
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-216.png)
with语句 将作用域定位
![](http://120.27.222.121/wp-content/uploads/2020/10/图片-217.png)