ES6基础初步
ES6简介
let命令
ES6新增了let命令,用来声明变量,它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
{ var a=1; let b=2; } console.log(a); console.log(b);
let不存在变量提升
var
命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined,
按照一般的逻辑,变量应该在声明语句之后才可以使用。let
命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。
console.log(a); console.log(b); var a; a=1; let b=2;
let暂时性死区
在代码块内,使用let
命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”
var a=1; if(true){ console.log(a); let a=2; console.log(a); }
块级作用域
第一场景,内层变量会覆盖外层变量
var tmp = new Date(); function f() { console.log(tmp); if (false) { var tmp = "hello world"; } } f();
第二场景,用来计数的循环变量泄露为全局变量
var s = 'hello'; for (var i = 0; i < s.length; i++) { console.log(s[i]); } console.log(i);
const命令
const声明一个只读的常量,一旦声明,常量的值就不能改变
const PI = 3.1415; PI // 3.1415 PI = 3; // TypeError: Assignment to constant variable
解构赋值
数组的解构赋值
ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值。
let [a, b, c] = [1, 2, 3];
对象解构赋值
对象的属性没有次序,变量必须与属性同名,才能取得到正确的值
let { bar, foo } = { foo: "aaa", bar: "bbb" }; foo // "aaa" bar // "bbb" let { bar } = { foo: "aaa", bar: "bbb" }; baz // undefined
字符串解构赋值
字符串被转换成一个类似数组的对象
const [a, b, c, d, e] = 'hello'; a // "h" b // "e" c // "l" d // "l" e // "o”
函数参数的解构赋值
function add([x, y]){ return x + y; } add([1, 2]); // 3
模板字符串
$('#result').append(` There are <b>${basket.count}</b> items in your basket, <em>${basket.onSale}</em> are on sale! `);