规格文件:http://ecma-international.org/ecma-262/6.0/
1 let
不存在变量提升
暂时性死区 tdz
不允许重复声明
2 变量提升
[javascript]
var tmp = new Date();
function f(){
console.log(tmp);
if(false){
var tmp = "Hello world!";
}
}
f(); // undefined
[/javascript]
3 const定义之后值不能变,但是
[javascript]
const foo = {};
foo.prop = 123; // 可以
const foo = Object.freeze({});
foo.prop = 123; // 不起作用
const a = [];
a.push("Hello"); // 可以
a.length = 0; // 可以
a = [‘Dave’]; // 报错
[/javascript]
4 ES6声明变量6种方式
var
function
let
const
import
class
let、const、class声明的全局变量不是全局对象的属性
5 解构赋值
[javascript]
let [foo, [[bar], baz]] = [1, [[2], 3]];
let [x, , y] = [1, 2, 3];
let [x, …y] = [1, 2, 3, 4];
let [x, y, …z] = ["a"];
// 默认值是表达式,表达式是惰性求值的
let [x = f()] = [1]; // f()不执行
// 对象的解构赋值
var {foo, bar} = {foo:’aaa’, bar: ‘bbb’};
var {foo: baz} = {foo:’aaa’, bar: ‘bbb’};
baz // ‘aaa’
模式不会被赋值
使用括弧避免JavaScript将{}解析为代码块
//字符的解构赋值
let {length:len} = ‘hello’;
[/javascript]
{ 1 } Comments
评论
发表评论