1. 声明变量由var变成let。let实际上为JavaScript新增了块级作用域。let与var相比具有的特性有
1、不允许重复声明一个变量
var a=5;
var a=7;
let b=6;
let b=8;//Uncaught SyntaxError: Identifier 'a' has already been declared重复声明变量报错,而var重复声明的变量不会报错
2、不存在变量提升,也就是预解析过程。只有变量声明后才可以调用,在该变量声明前使用会报错
console.log(a);//undefined     var存在变量提升过程
var a = 6;
console.log(b);//ReferenceError: b is not defined不存在变量提升过程
let b = 8;

3、let声明的变量具有作用域,只在代码块内有作用域。只在块级作用域内有效。
    for(let i=0;i<6;i++){
console.log(i);
}
console.log(i);//ReferenceError: i is not defined i只在for循环有效
//var声明的在全局内有效
for(var j=0;j<6;j++){
console.log(j);
}
console.log(j);//6

4、暂时性死区:只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,在代码块内,使用let命令声明变量之前,该变量都是不可用的。
var tmp = 123;

if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}

利用let的块级作用域这一特性,可以用于for循环的计数,添加索引值以及立即执行的匿名函数不再需要了。

//a[i]为DOM元素按钮的集合,点击按钮添加事件
for (let i = 0; i < 10; i++) {
a[i].onclick = function () {
console.log(i);
};
}

2.块级作用域:主要还是通过let来实现。{}表示代码块。只在代码块内有效

{
let a=4;
}
console.log(a);//报错

3、使用const定义一个只读的常量。一旦定义不可修改。且一旦定义必须初始化。

const a=5;
a=10;//报错 TypeError: Assignment to constant variable.
const c;//报错 SyntaxError: Missing initializer in const declaration

若为引用类型,因为变量名不指向数据,只指向数据所在地址,所以const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,例如

//若为数组
const arr = [1, 2, 3];
arr.push(4);
console.log(arr); //[1,2,3,4]
arr=[1,2,3,4];//报错
//若常量为对象
const obj = {name: '123'};
obj.name = "hxc";
console.log(obj);//{name:'hxc'
obj = {name:'345'};//报错

因此在定义对象或数组常量时要格外注意。const的其他特性与let一样,只在代码块内有效,不存在变量提升,暂时性死区。

4.解构赋值:ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。ES5之前对变量复制是指定值复制例如

var a = 1;
var b = 2;
var c = 3;

而es6允许解构赋值,例如

var [a,b,c] = [1,2,3];
console.log(a,b,c); //1,2,3
var [c,d,e,f] = [1,[2],3];
console.log(c,d,e,f); //1,[2],3,undefined

数组的解构赋值是按照对应顺序结构,且允许数组嵌套,如果解构不成功则为undefined。

对象也可以解构赋值,根据对象的属性解构赋值,变量必须与对象的属性名相同。未解构到的返回undefined;与数组相同允许嵌套。

var obj = {
name: 'hxc',
age: 18
}
var {name, age}=obj; console.log({name, age});
var {birth} = obj; //undefined

Ecmascript 6新特性的更多相关文章

  1. ECMAScript 6新特性(1)数组篇

    数组现有的方法: .concat():连接两个或更多的数组,并返回结果. .join():把数组的所有元素放入一个字符串.元素通过指定的分隔符进行分隔. .pop():删除并返回数组的最后一个元素 . ...

  2. ECMAScript 6 | 新特性

    新特性概览 参考文章: http://www.cnblogs.com/Wayou/p/es6_new_features.html ——————————————————————————————————— ...

  3. ECMAScript 6新特性介绍

    箭头函数 箭头函数使用=>语法来简化函数.在语句结构上和C#.Java 8 和 CoffeeScript相似,支持表达式和函数体. . =>`操作符左边为输入的參数.而右边则是进行的操作以 ...

  4. ECMAScript 6新特性简记

    ECMAScript 6.0是JavaScript语言的2015年6月的发布版. 一.let和const命令 let:用来声明变量,用法类似于var,但是只在let命令所在的代码块内有效. var a ...

  5. ECMAScript 6 新特性-set。const

    一.let命令是es6新增的特性,作用与var命令类似,声明变量,不同之处在于声明的变量的作用域为块级作用域.引入let后带来了很多新的特性. 1作用域,es5之前之后函数作用域和全局作用域,let的 ...

  6. ECMAScript 5 新特性

    Strict模式 开启strict: 在文件头部,或者在一个function头部内,添加‘use strict’或者“use strict”. Strict模式的限制,以及违反时出现的异常: 新定制了 ...

  7. ECMAScript 6新特性之Proxy

    ECMAScript 6中新增了一个全局构造函数:Proxy.该构造函数能够接收两个參数:一个目标对象.一个处理对象. 代码演示样例: var target = {}; var handler = { ...

  8. ECMASCRIPT 6中字符串的新特性

    本文将覆盖在ECMAScript 6 (ES6)中,字符串的新特性. Unicode 码位(code point)转义 Unicode字符码位的长度是21位[2].而JavaScript的字符串,是1 ...

  9. ECMAScript 5和ECMAScript6的新特性以及浏览器支持情况

    ECMAScript简介: 它是一种由Ecma国际(前身为欧洲计算机制造商协会)制定和发布的脚本语言规范,javascript在它基础上经行了自己的封装.但通常来说,术语ECMAScript和java ...

随机推荐

  1. FileResult,JavaScriptResult,JsonResult

    FileResult:可以响应任意文档的属性,包括二进制格式的数据,eg:图档,pdf,excel,zip,可以传入byte[],文档路径,Stream等不同的属性,让mvc将属性回传给客户端,除此之 ...

  2. jbpm6 开发环境搭建

     一.软件下载 1. eclipse       下载地址:http://www.eclipse.org/downloads/ 2.jbpm6.2 Installer       下载地址: ht ...

  3. node.js中文资料导航

    以下资料来自gitHUb上面:https://github.com/youyudehexie/node123 Node.js HomePage Node官网七牛镜像 Infoq深入浅出Node.js系 ...

  4. phpcms v9开源开发框架基础mvc解读

    根据对mvc的了解 简要写个mvc框架 也谈不上框架 希望对新手有帮助 简单的解析下mvc  你可以这样了解 m模型也就是数据库操作 v视图  c控制器 通过url来判断调用m和v来完成请求,本身没数 ...

  5. Kruskal-Wallis Test and Friedman test

  6. Python语法基础(长期)

    os.mkdir和os.mkdirs的区别? 前者如果"中间路径"不存在,会抛出异常,后者则会自动创建中间路径. map(function, iterable) 对于可迭代函数`` ...

  7. 使用可变对象作为python函数默认参数引发的问题

    写python的都知道,python函数或者方法可以使用默认参数,比如 1 def foo(arg=None): 2 print(arg) 3 4 foo() 5 6 foo("hello ...

  8. bottle.py中的SimpleTemplate

    import re class SimpleTemplate(object): re_block = re.compile(r'^\s*%\s*((if|elif|else|try|except|fi ...

  9. scrapy框架使用教程

    scrapy框架真的是很强大.非常值得学习一下.本身py就追求简洁,所以本身代码量很少却能写出很强大的功能.对比java来说.不过py的语法有些操蛋,比如没有智能提示.动态语言的通病.我也刚学习不到1 ...

  10. 【练习】@property练习题

    请利用@property给一个Screen对象加上width和height属性,以及一个只读属性resolution: 写了一段代码 class Screen(object): #利用property ...