自学JavaScript - day3(条件判断、循环、Map和Set、iterable)

JavaScript

条件判断

var a=1;
if(a>0){
	alert("+");
}
else if(a==0){
	alert("0");
}
else{
	alert("-");
}

javascript把nullundefined0NaN和空字符串''视为false,其他值均视为true

//跳出页面显示框(???好像是叫这个吧)
var height=parseFloat(prompt('请输入身高(m):'));
//判断是否输入空值
if(height)
...

循环

for

var x=1;
for(int i=0;i<10;i++){
	x=x*i;
}
//若省略3个条件,则必须使用break,否则会死循环
for(;;){
	if(x=6)
		break;
	x++;
}

for…in(对象)

循环出对象的所有属性

var o={
	name:"123",
	age:456
};
for(var temp in o){
	//if(o.hasOwnProperty(temp))    //过滤对象继承的属性
		console.log(temp);
}

循环输出数组

var a=["a","b",'c'];
for(var i in a){
	console.log(i);		//索引0,1,2
	console.log(a[i]);	//值a,b,c(得到的值均为字符串类型)
}

for…of(iterable)

//遍历数组
var a=[1,2,4];
for(var temp of a){
	alert(temp);
}

//遍历Map
var m=new Map([[1,'a'],[2,'b']]);
for(var temp of m){
	alert(temp[0]+'='+temp[1]);
}

//遍历Set
var s=new Set(['a','b','c']);
for(var temp of s){
	alert(temp);
}

forEach(iterable)

iterable内置方法,接受一个函数,每次迭代就自动回调改函数

//数组
var a=[1,2,3];
a.forEach(function(element,index,array){
	//element:指向当前元素的值
	//index:指向当前索引
	//array:指向Array对象本身
	alert(element);
});

//Map
var m=new Map([[1,'a'],[2,'b']]);
m.forEach(function(value,key,map){
	alert(value);
});

//Set
var s=new Set(['a','b','c']);
s.forEach(function(element,sameElement,set){
	alert(element);
});

while

//计算100以内所有奇数之和
var x=0;
var n=99;
while(n>0){	
	x=x+n;
	n=n-2;
}

do … while

循环完判断,循环至少执行一次

var n=0;
do{
	n=n+1;
}while(n<10);

Map和Set

javascript的默认对象表示方式{}可以视为其他语言中的MapDictionary
为解决键不能用除字符串以外的数据类型的问题,最新的ES6规范引入了新的数据结构Map

Map

键值对结构,具有极快的查找速度

//1
var m=new Map([['a',1],['b',2],['c',3]]);
m.get('a'); //返回1

//2
var m=new Map();
m.set('a',1);
m.set('b',2);
m.has('a');		//判断是否存在键'a'
m.delete('a');	//删除键'a'
m.get('a');		//undefined

//遍历见循环for...of和foreach

一个键只能对一个值,所有多次把一个值放入一个键,该键的值会是最后放入的值

Set

set是一组key的集合,无重复key

//创建
var s1=new Set();			//创建一个空的Set
var s2=new Set([1,2,3]);	//提供一个数组作为输入
var s3=new Set([1,1,'1']);	//重复元素会自动过滤,s3为[1,'1']

//添加元素
s1.add(1); 		//s1中有1
//删除元素
s1.delete(1);	//s1为空

//遍历见循环for...of和foreach

iterable

ArrayMapSet都属于iterator类型
遍历使用:

for…of

for...offor...in:
for...in由于历史遗留问题,遍历的是对象的属性名称,Array也是一个对象,索引被视为属性
当给Array对象添加额外属性后,for...in循环结果会将额外属性包括在内,但length属性不会包括在内

var a=['a','b'];
a.name='A';
for(var x in a){
	console.log(x);//0,1,'A'
}

for...of修复了这些问题,它只循环集合本身的元素

var a=['a','b'];
a.name='A';
for(var x of a){
	console.log(x);//'a','b','A'
}

forEach

iterable内置方法,接受一个函数,每次迭代就自动回调改函数

//数组
var a=[1,2,3];
a.forEach(function(element,index,array){
	//element:指向当前元素的值
	//index:指向当前索引
	//array:指向Array对象本身
	alert(element);	//1,2,3
});

//Map
var m=new Map([[1,'a'],[2,'b']]);
m.forEach(function(value,key,map){
	alert(value);	//a,b
});

//Set
var s=new Set(['a','b','c']);
s.forEach(function(element,sameElement,set){
	//Set与Array类似,但Set无索引,因此回调函数的前两个参数都是元素本身
	alert(element);	//a,b,c
});

//如果对某些参数不感兴趣,由于javascript的函数调用不要求参数必须一致,因此可以忽略他们。例如,只需获取Array的element
var a=[1,2,3];
a.forEach(function(element){
	//element:指向当前元素的值
	alert(element);	//1,2,3
});

//forEach中断执行,把集合的一部分执行,另一部分忽略:先用filter再用forEach(filter:筛选出要执行的子集,forEach:全部执行)
发布了7 篇原创文章 · 获赞 0 · 访问量 114

猜你喜欢

转载自blog.csdn.net/qq_42713936/article/details/94588307