数组的解构赋值。
新的赋值方式
还记得以前的时候,对于一些元素的赋值.一般常用方法就是:1
2
3var a="zone",
b="acorn",
c="赵日天";
而现在 我们在Es6
中可以使用一种新的赋值方式:1
2
3
4var [a,b,c]=[1,2,3];
console.log(a)//1;
console.log(b)//2;
console.log(c)//3;
感觉写法还是听酷炫的。
新增的默认值
1 | var [a,b="12",c]=[1,,2] |
不过有点需要注意的是:
只有当这个元素对应的值严格相等(即为===)undefined
的时候,默认值才会生效例如下面这个例子:1
2
3
4let [a,b,c="zone"]=[1,undefined,null];
console.log(a);//1
console.log(b);//undefined
console.log(c)//null
数值的扩展
在ES6中,提供了一种二进制
和八机制
数值的新的写法,分别是用前缀0b
(Binary)和0o
(octal);
例如1
20b1110===14;
0o110===72;
Math对象的扩展
在ES5中,我们几个常用的Math
的方法主要是:1
2
3随机数: Math.random();
向上取值:Math.floor();
向上取值:Math.ceil();
在ES6中,我们又新增了几个Math
的方法:
Math.trunc()
Math.trunc()
用于去除一个数的小数部分,返回整数部分。(感觉与Math.floor()
作用类似)
Math.sign()
Math.sign()
用来判断一个数到底是正数、负数、还是零.例如:1
2
3
4
5
6Math.sign(2);//1
Math.sign(-0);//-0
Math.sign(-2);//-1
Math.sign(0);//0
Math.sign("2");//1
Math.sign("2a1");//NAN
这样 对于Math.sign()
的几个返回值大致就是
- 参数为正数,返回
1
; - 参数为负数,返回
-1
; - 参数为0,返回
-0
; - 参数为-0返回
-0
; - 参数为其他值时,会先转换成number类型,然后再作判断。
Math.cbrt()
Math.cbrt()
用于计算一个数的平方根。
函数的拓展
函数新增的默认值
在ES5中,其实是不能直接为函数的参数指定默认值的,要想设置默认值,一般是采取这种变通的方式,例如:
1 | function zone(name){ |
在ES6中,可以为参数设置默认值,直接写在参数定义的后面。例如:1
2
3
4
5
6function zone(name="赵日天"){
this.name=name;
console.log(this.name);
}
zone();//赵日天
zone("acorn");//acorn
函数的Length属性
指定了默认属性以后,函数的length
属性,将返回没有指定默认值的参数个数,也就是说指定了默认值以后,length
属性将失真。
例如:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17var a =function (name,a,b,c){
this.name=name||"赵日天";
console.log(this.name);
}
a.length;//4
var b=function (name="赵日天",ba,sad,as,d,asd,a,ada){
this.name=name;
console.log(this.name)
}
b.length;//0
var c=function(a,s,sd,sa,name="acorn"){
this.name=name;
console.log(this.name)
}
c.length;//4
通过上面的例子。我们可以发现.对于对于有指定了默认值的函数参列表,length
在取值的时候,会触碰到
就停止。
新增的数据类型————Symbol
在ES5中,一般常见的数据类型也就以下6种:
- Undefined
- Null
- Boolean
- String
- Number
- Object
在ES6中,新增加了一种数据类型————symbol
例如1
2var a=Symbol();
typeof a//"symbol"
##set
与map
set
方法就是ES6
提供的新的数据结构,类似于数组,但是成员的值都是唯一的,没有重复的。
怎么说呢。比如我们要清除一个数组中的多余项,在ES5中我们需要这样做:1
2
3
4
5
6
7
8
9
10
11
12
13
14 var a=[1,2,3,1,2,3,2,12,3,566,7,89,0,"1","2",2,3];
function play(arr){
var now=[];
for(var i=0;i< arr.length;i++){
if(now.indexOf(arr[i])===-1){
now[now.length]= arr[i];
}else{
continue;
}
}
return now;
}
play(a);//[1, 2, 3, 12, 566, 7, 89, 0, "1", "2"]
现在 有了ES6 又有了一种更加简便的方法1
2
3
4
5 var a=[1,2,3,1,2,3,2,12,3,566,7,89,0,"1","2",2,3];
function dedupe(array) {
return Array.from(new Set(array));
}
dedupe(a);//[1, 2, 3, 12, 566, 7, 89, 0, "1", "2"]
###set
的属性和方法set
结构的实例有以下属性:
Set.prototype.constructor
:构造函数,默认即时set
函数;Set.prototype.size
:返回Set
实例成员总数;
Set实例的方法分为操作方法(用于操作数据)与遍历方法(用于遍历成员)。
操作方法:
add(value)
:添加某个值,返回Set结构本身.delete(value)
:删除某个值,返回以一个布尔值,表示删除是否成功。has(value)
:返回一个布尔值,表示改值是否是Set
的成员。clear()
:清楚所有成员,没有返回值。
Map
的基本用法
javascript
对象本质上就是,键值对的集合,但是在ES5中,对象的键名只能由字符串
来担任。例如:1
2
3
4
5
6var zone=document.getelementById("zone");
var a={
zone:1,
name:"asdasd"
}
这里的zone代表的是 一个对象,但是在 a这个对象中,也会被转换成字符串。
这里是因为。在ES5中。一个对象只接受 字符串作为其键名
,上面的例子中zone
会制动转换为"zone"
;
在ES6中引入了Map
这种数据结构,类似于对象,也是键值对的集合。但是这里面键名
不仅限于字符串,各种类型的值都可以当做键名
,简直碉堡了。例如下面这个例子1
2
3
4
5
6
7
8
9var a={zone:"赵日天"};
var b={
a:"a",
b:"b"
}
var c= new Map();
c.set(a,"hello");
c.set("acorn","三大赵日天")
c//Map {Object {zone: "赵日天"} => "hello", "acorn" => "三大赵日天"}
Map实例的属性和操作方法
size
属性size
属性会返回Map结构的成员总数(类似于length)1
2
3
4let zone=new Map();
zone.set("zone",true);
zone.set("a","日天");
zone.size//2set(key,value)
属性set
顾名思义,就是设置key
所对应的键值,然后返回整个Map结构,如果key
值已经存在,后者会覆盖前者1
2
3
4
5let zone=new Map();
zone.set("zone",true);
zone.get("zone");//true;
zone.set("zone",false);
zone.get("zone"); //false;get(key)
get
方法读取key
对应的键值,如果找不到key
,返回undefined
- has(key)
has
方法返回一个布尔值,表示某个值是否出现在Map数据结构中。 - delete(key)
delete
方法删除某个值,返回一个布尔值,表示删除是否成功。 - clear()
clear()
方法清除所有成员,并没有返回值.