自学JavaScript - day 3
JavaScript
条件判断
var a=1;
if(a>0){
alert("+");
}
else if(a==0){
alert("0");
}
else{
alert("-");
}
javascript把null
、undefined
、0
、NaN
和空字符串''
视为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的默认对象表示方式{}
可以视为其他语言中的Map
或Dictionary
为解决键不能用除字符串以外的数据类型的问题,最新的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
Array
、Map
、Set
都属于iterator
类型
遍历使用:
for…of
for...of
与for...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:全部执行)