值类型(基本数据类型):基本数据类型的值会存储在当前作用域下
var a=12;
- 首先在当前作用域下开辟一个空间存储
12
2)在当前作用域中声明一个变量a
3)让声明的变量和存储的12进行关联
直接按置操作:把原有的值复制一份,放在新的空间位置上,和原来的值没有关系,变量间相互不影响
一个变量只能存一个值
对象数据类型(引用数据类型):按内存空间【引用地址】地址来操作
引用数据类型不能直接存储到当前作用域(因为存储的内容过于复杂),我们需要新开辟一个空间把内容存储在这个空间中
js遇到对象:
1、先创建一个变量
(声明一个函数名和声明一个变量一样 ,如果两个变量名重复 是会冲突的)
2、浏览器为其开辟一个新的内存空间
,为了方便别的地方找到这个空间 会给空间分配一个16进制的地址
(16进制:0-9 a-f)
3、按照一定顺序,把对象中的键值对存到内存空间
4、把开辟内存的地址赋值给变量
(或者其他的东西比如事件),以后变量就可以通过地址找到内存空间然后进行操作
操作的是空间的引用地址:把原来空间地址赋值给新变量,但是空间没有被克隆,还是一个空间,这样就会出现多个变量关联的是相同的空间,相互之间就会存在影响
栈内存、堆内存
栈内存
:本身就是一个供js代码执行的环境,所有的基本数据类型都会在栈内存中开辟一个位置进行存储;作用域就是一个栈内存
堆内存
:用来存储引用类型中的信息值的,对象存储的是键值对
,函数存储的是代码字符串
判断操作语句
if、else if、else
如果好几个条件都成立了,只把第一个成立的条件执行,后面成立的条件忽略不管
条件的写法:
A==B,A!=B,A>=B,A<=B,
if(A)先把A转化为布尔类型判断真假以此来决定条件是否成立
if(A>B && A<10) 只有两个小条件都是真整体才是真
if(A>B || A==0)只要其中一个小条件成立,整体就是真
1 |
|
1 | var num = parseFloat('width:12.5px'); |
三元运算符:
语法 :条件?条件成立执行:条件不成立执行;
三元运算符就是if(){}else{}的另一种方法
num++ : num+=1,num=num+1;自身累加1
三元运算符不要else:条件?条件成立执行:null
空着(条件?条件成立执行:;)语法不符合,
可以用null 、undefined、 void 0
某一种条件下执行多条操作,使用小括号包起来,中间用逗号分隔
在三元运算符中不能出现break/continue/return;
这些关键词 不能改写为三元运算符
1 | var num=10; |
switch case:一个变量在不同值情况下的不同操作
switch case应用于if、else中
一个变量在不同值情况下的不同操作
1、switch后面小括号中存放的是一个值
(一般我们都写变量
:把变量存储的值拿来用,有时候也可能是一个计算)
2、case后面放的都是值
,目的是验证switch后面的值和哪一种case后面的值相等
,相等的进行对应的处理
3、default
:switch
后面的值和每一种case
情况对应的值都不相等,执行最后的default
,类似于else
4、switch
中比较用的是 ===
‘6’ == 6 为true; ‘6’===6 false;
5、不加break
不管后面的条件是否成立,都会继续向下执行,直到遇到break为止
6、最后一项可以不加break
也能跳出判断
1 | var num=10; |
A%B:取A/B的余数
案例剖析:
1 | var num=5; |
循环操作语句for循环
按照一定规律,重复去做某件事情,此时我们需要使用循环处理
步骤:
1、设置初始值
2、设置循环成立的条件(条件成立,执行循环体;不成立,循环结束)
3、条件成立,执行循环体中的内容
4、执行步长累加操作
continue:结束本轮循环,继续执行下一轮,循环体中continue后面的代码不会执行,它会直接的去执行步长累加,然后进入到下一轮
break:结束整个循环,循环体中一旦遇到break 后面的代码不执行而且步长累加也不执行了,循环都结束了
for循环:
1 | for(设置循环起始的值;设置循环执行的条件;步长累加){ |
案例剖析:
1 | //1、设置初始值; |
1 | var i=0; |
1 | for(var i=1;i<10;i+=2){ //i=1 4 7 |
倒序循环:
1 | var arr=[1,2,3] |
while循环
while(条件){
条件成立干的事
}
条件不成立了就不循环了
循环次数不确定、起始值不确定、也没有步长累加、就有一个条件时 使用
1 | //生成四位不重复验证码 |