JavaScripts基础(4)值类型、堆、栈、判断语句、循环语句

吐槽君 分类:javascript

值类型(基本数据类型):基本数据类型的值会存储在当前作用域下

var a=12;

  1. 首先在当前作用域下开辟一个空间存储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)只要其中一个小条件成立,整体就是真


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中一个变量在不同值情况下的不同操作

  1. switch后面小括号中存放的是一个值一般我们都写变量:把变量存储的值拿来用,有时候也可能是一个计算)
  2. case后面放的都是值,目的是验证switch后面的值和哪一种case后面的值相等,相等的进行对应的处理
  3. defaultswitch后面的值和每一种case情况对应的值都不相等,执行最后的default,类似于else
  4. switch 中比较用的是 ===

'6' == 6 为true; '6'===6 false;

  1. 不加break 不管后面的条件是否成立,都会继续向下执行,直到遇到break为止
  2. 最后一项可以不加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循环

按照一定规律,重复去做某件事情,此时我们需要使用循环处理

步骤:

  1. 设置初始值
  2. 设置循环成立的条件(条件成立,执行循环体;不成立,循环结束)
  3. 条件成立,执行循环体中的内容
  4. 执行步长累加操作

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;
	}
}
 

回复

我来回复
  • 暂无回复内容