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