优秀程序员分享ES6相关知识,ES6新增语法
好程序员
让&&const
[size=0.9em]let 和 [size=0.9em]var 之间的区别
让变量名=变量值
使用let创建变量和使用var创建变量的区别
1.用var声明的变量会被提升,用let声明的变量不会被提升。
用let创建变量
让xxx=xxx;
使用 let 创建函数
让 xxx=(){}
创建自执行函数
;((){
})();
2.用let定义的变量不允许在同一个作用域内重复声明一个变量[size=0.9em](只要当前作用域存在这个变量,无论用var还是let声明,都会再次用let声明,报错:一个变量不能重复声明),但可以重复定义(赋值)。
设i=10;
let i=20;/ 会报错,
我=20; 重复赋值不会报错
3、暂时死区:在代码块中,在使用let命令声明变量之前,无法使用该变量。
如果属实) {
// TDZ 开始
tmp = 'abc'; // ,报错后,不会输出以下内容
.log(tmp); // ,报错后不会输出以下内容
让tmp; // TDZ 结束
.log(tmp); //
tmp = 123;
.log(tmp); // 123
//下面也会报错TDZ
.log(x); //
让x;
//作为对比,如果一个变量根本没有声明,那么使用时就不会报错。
.log(x);// ""
4. ES6语法创建的变量(let)具有块级作用域
[ES5]
全球范围
函数执行形成的私有作用域
[ES6]
除了ES5中的两个作用域外,ES6中还新增了块级作用域(我们可以将块级作用域理解为之前学过的私有作用域,私有作用域和作用域链都有一些机制)[size = 0.9em] 在 ES6 中,大多数用 {} 包裹的项称为块级作用域;
[大小=0.9em]常量
const详细知识点与let类似
const声明的常量只要声明了就必须赋值,并且变量的值是固定的,不能修改;
[size=0.9em] 注意:并不是变量的值不能改变,而是变量指向的内存地址不能改变。 对于简单类型的数据(数字、字符串、布尔值),值存储在变量指向的内存地址处,因此相当于常量。 但对于复合类型的数据(主要是对象和数组)来说,变量指向的内存地址只是一个指针,const只能保证指针是固定的。 失控。 因此,将对象声明为常量时必须非常小心。
[size=1em][size=1em]const声明的变量也有临时死区,即只能在声明的位置之后使用;
JS中创建变量的方法总结
[尺寸=1em][尺寸=1em][ES5]
var : 创建变量
:创建函数
ES5中创建变量或函数:存在变量提升、重复声明等特点;
[尺寸=1em][尺寸=1em][ES6]
· let 创建变量
const:在 ES6 中创建常量
ES6中创建的变量或常量:没有变量提升、没有重复声明、块级作用域;
类:创建一个类
:进口
ES6 中的解构赋值
[size=1em][size=1em]根据原值的结构,快速获取原值的某一部分(快速赋值给变量)。
数组解构赋值
[size=1em][size=1em]解构赋值本身就是ES6的语法规范。 使用什么关键字来声明这些变量并不重要。 如果不使用关键字声明,相当于添加自定义属性;(严格模式下必须使用关键字声明,因为不使用关键字声明的变量在严格模式下是不允许的;),如果值无法解构,那么变量的值为;
让[a,b,c]=[12,23,34];
var [d,e,f]=[35,41,63];
.log(a,b,c)//12,23,34;
.log(d,e,f)//35,41,63;
[q,w,e]=[1,2,3];//相当于添加三个属性:q,w,e值分别为1,2,3; (严格模式下会报错)
[size=1em][size=1em]多维数组的解构赋值可以让我们快速得到需要的结果
让 [a,b,c]=[[45,36],12,[23,43,[1,2[4,[8]]]]23,34];
.log(a)//[45,36]
.log(b)//12
.log(c)//[23,43,[1,2,[4,[8]]]]
//数组中不需要解构的值可以用逗号(,)打开,逗号代表打开项
让[,,,A]=[12,23,45];
.log(A)//
让 [,,B]=[12,23,45]
.log(B)//45
[size=1em][size=1em] 解构赋值中,支持扩展运算符,即[size=1em]...[size=1em]。 只要使用了扩展运算符,就相当于生成了一个新的数组或对象。 如果该值无法解构,则新生成的数组或对象为空,但扩展运算符必须放在末尾
让 [a,...c]=[12,1,4,83,34];
.log(a)//12
.log(c)//[1,4,83,34];
let [a,...b,c]=[12,1,4,83,34];//会报错,扩展运算符只能放在最后;
对象解构赋值
[size=1em][size=1em] 对象的简明表示法:
const foo = '酒吧';
const baz = {foo};
巴兹// {foo:“酒吧”}
// 相当于
const baz = {foo: foo};
[size=1em][size=1em] 解构对象和数组之间有一个重要区别。 数组的元素按顺序排列,变量的值由其位置决定; 虽然对象的属性没有顺序,但变量必须与属性具有相同的名称才能获得正确的值。
让 { foo, bar } = { foo: "aaa", bar: "bbb" };
foo //“aaa”
酒吧//“bbb”
如果变量名与属性名不一致,则必须这样写。
让 { foo: baz } = { foo: 'aaa', bar: 'bbb' };
巴兹//“aaa”
实际分配的是后者,而不是前者。
让 obj = { 第一个:'你好',最后一个:'世界' };
让 { 第一个:f,最后一个:l } = obj;
f // '你好'
l // '世界'
第一个//错误:第一个不是
如果你想使用声明的变量进行解构赋值,你必须非常小心。
// 错误的措辞
让x;
{x} = {x:1};//会报错
发生语法错误是因为引擎将 {x} 解释为代码块。 这个问题只能通过在行首不写大括号来解决,避免它被解释为代码块。
// 正确的拼写
让x;
({x} = {x: 1});
将其放在括号中可以防止将其解释为代码块。