ES6----入门(一)

42 篇文章 1 订阅

ES6新特性 

ECMAScript 6 是ECMA于2015.06发布的版本,作为一个分界点,现在我们通常把这之后的版本统称为ES6。ES6带来了许多全新的语法,同时添加了类的概念,可以预见的是,JavaScript正朝着工程化语言迈进,我们并不知道这对于年轻的JavaScript来说是好还是坏,因为它最开始是做为一款轻量级的脚本语言而风靡全球的。

一 新的原始类型和变量申明

1,symbol

在ES6之前,我们知道JavaScript支持6种数据类型:object,string,boolean,number,null,undefined。现在,ES6新增了一种原始数据类型:symbol,表示独一无二的值,即每个symbol类型的值都不相同。这让我想起了另一个特殊的值:NaN,想一想,他们是不是有一点类似呢!

 var sy = Symbol('test');
 var sy1 = Symbol('test');
 console.log(tepeof sy);//'symbol'
 sy == sy1;//false
 var sy2 = new Symbol('test');//error : Symbol is not a constructor

创建symbol数据类型的值时,需要给Symbol函数传递一个字符串,并且有一点特殊的是:不能使用new关键字调用它。另外,每个symbol类型值都是独一无二的,即使传递的是相同的字符串。
 

2,let和const

ES6新增了两个申明变量的关键字:let和const。他们申明的变量仅在let和const关键字所在的代码块内起作用,即在使用let和const的那一对大括号{}内起作用,也称块级作用域(ES6之前只有函数作用域和全局作用域)。let和const申明变量不会在预编译过程中有提升行为(在全局申明也不会变成window的属性),且不能重复申明。所以要使用这类变量,只能在let和const关键字之后使用它们。

 {
     let a = 0;
     console.log(a);//0
 }
 console.log(a);//error a is not defined

const用来申明一个常量,申明时必须赋值,且一旦申明就不能改变。

其实说const变量不能更改是不准确的,请看下面的例子:

const obj = {
    name:'ren',
    age:12
};
obj = {};//error
obj.sex = male;
consol.log(obj);//{name:'ren',age:12;sex:'male'}

const申明的如果是一个原始值,那么上面的说法是准确的,如果const申明的是一个引用值,那么更准确的说法应该是一个不能被重新赋值的变量。
 

3,解构赋值

解构赋值是对赋值运算符的扩展。它是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。

let [a,b,c] = [1,2,3];
console.log(a,b,c);//1,2,3

let [a,b,c] = [1,,3];
console.log(a,b,c);//1,undefined,3

let [a,,b] = [1,2,3];
console.log(a,b);//1,3

let [a,..b] = [1,2,3];//...是剩余运算符,表示赋值运算符右边除第一个值外剩余的都赋值给b
console.log(a,b);//1,[2,3]

事实上所有可枚举(iterable)的对象都可以使用结构赋值,例如数组,字符串对象,以及ES6新增的Map和Set类型。

let obj = {name:'ren',age:12,sex:'male'};
let {name,age,sex} = obj;
console.log(name,age,sex);//'ren',12,'male';

二 新的对象和方法

1,Map和Set

Map对象用于保存键值对,任何值JavaScript支持的值都可以作为一个键或者一个值。这听起来和对象差不多啊?其实它们还是有区别的:

  • object的键只能是字符串或ES6的symbol值,而Map可以是任何值。
  • Map对象有一个size属性,存储了键值对的个数,而object对象没有类似属性。
let myMap = new Map([['name','ren'],['age',12]]);

console.log(myMap);//{'name'=>'ren','age'=>12}

myMap.set('sex','male');

console.log(myMap);//{'name'=>'ren','age'=>12,'sex'=>'male'}

myMap.get('name');//'ren'

myMap.has('age');//true

myMap.delete('age');//true

myMap.has('age');//false

myMap.get('age');//undefined
  • Map构造函数接收一个二维数组来创建一个Map对象。数组元素的第0位表示Map对象的key,第1位表示Map对象的value。
  • Map对象使用set方法来新增数据,set方法接收两个参数,第一个表示key,第二个表示value。使用get方法获取数据,参数是对象的key。
  • Map对象使用delete方法来删除数据,接收一个参数,表示需要被删除的key。
  • Map对象使用has方法检测是否已经具有某个属性,返回boolean值。
  • Set对象和Map对象类似,但它是用来存储一组唯一值的,而不是键值对。类似数组,但它的每个元素都是唯一的。

利用Set对象唯一性的特点,可以轻松实现数组的去重:

let mySet = new Set([1,2,3]);

console.log(mySet);//{1,2,3}

mySet.add(4);

console.log(mySet);//{1,2,3,4}

mySet.delete(1);//true

mySet.has(1);//false

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值