ES6总结--严格模式、let/const 、解构赋值
来源:互联网 发布:用百度云盘需要网络吗 编辑:程序博客网 时间:2024/04/28 13:39
1、严格模式与 ECMAScript 6
ECMAScript 5 引入严格模式来清理语言,在文件或者函数的第一行放入下面的内容就可以开启严格模式:'use strict'
;
严格模式引入了三种破坏性的改变:
语法改变:一些之前合法的语法在严格模式下面是不允许的。例如:
禁止 with 语句。它允许使用者添加任何对象到变量作用域链,这会减缓程序的执行速度,并且很难指出某个变量指向哪里。
删除一个独立的标识符(一个变量,而不是一个属性)是不允许的。
函数只能在作用域的顶层声明。
更多的保留字: implements interface let package private protected public static yield 。
更多种类的错误。例如:
给一个未声明的变量赋值会抛出 ReferenceError 。在非严格模式下,这样干就会创建一个全局变量。
修改只读的属性(比如字符串的长度属性)会抛出 TypeError 。在非严格模式下,不会产生任何效果。
不同的语义:在严格模式下,一些语法结构表现得不一样。例如:
arguments 不再随着当前参数值的改变而改变。
在非方法的函数中 this 是 undefined 。在非严格模式下,它指向全局对象( window ),也就是说如果调用一个构造器的时候没有使用 new ,就会创建一些全局变量。
严格模式是一个很好地说明了版本化是棘手的:即便能够制作一个干净版本的 JavaScript ,也很难被大家接受。主要原因是破坏了一些现存的代码,降低了执行速度,并且加入到文件中也很麻烦(更不用说交互的命令行)。
2、let和const命令
ES6 规定暂时性死区和let、const语句不出现变量提升(声明前可用),主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。
const、let不允许在相同作用域内,重复声明同一个变量。
const的作用域与let命令相同:只在声明所在的块级作用域内有效。
const 声明一个只读的常量。一旦声明,常量的值就不能改变。一旦声明变量,就必须立即初始化,不能留到以后赋值。
const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,(主要是对象和数组)所以将一个对象声明为常量必须非常小心。
3、解构赋值
数组的解构赋值let [foo, [[bar], baz]] = [1, [[2], 3]];foo // 1bar // 2baz // 3let [ , , third] = ["foo", "bar", "baz"];third // "baz"字符串的解构赋值const [a, b, c, d, e] = 'hello';a // "h"b // "e"c // "l"d // "l"e // "o"对象的解构赋值let { bar, foo } = { foo: "aaa", bar: "bbb" };foo // "aaa"bar // "bbb"let { baz } = { foo: "aaa", bar: "bbb" };baz // undefined函数参数的解构赋值[[1, 2], [3, 4]].map(([a, b]) => a + b);// [ 3, 7 ]
用途:
交换变量的值
let x = 1;let y = 2;[x, y] = [y, x];
从函数返回多个值
// 返回一个数组function example() { return [1, 2, 3];}let [a, b, c] = example();// 返回一个对象function example() { return { foo: 1, bar: 2 };}let { foo, bar } = example();
函数参数的定义
// 参数是一组有次序的值function f([x, y, z]) { ... }f([1, 2, 3]);// 参数是一组无次序的值function f({x, y, z}) { ... }f({z: 3, y: 2, x: 1});
提取JSON数据
let jsonData = { id: 42, status: "OK", data: [867, 5309]};let { id, status, data: number } = jsonData;console.log(id, status, number);// 42, "OK", [867, 5309]
函数参数的默认值
const change = (a=1,b=2,c)=>{ var s = a?a:1 //避免出现}
遍历Map结构
var map = new Map();map.set('first', 'hello');map.set('second', 'world');// 获取键值for (let [,value] of map) { console.log(value)}
输入模块的指定方法
const { aa, bb } = require("cc");
圆括号问题:
变量声明语句中,不能带有圆括号。
函数参数中,模式不能带有圆括号。
赋值语句中,不能将整个模式,或嵌套模式中的一层,放在圆括号之中
总结:
如果解构不成功,变量的值就等于undefined。
不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组。这种情况下,解构依然可以成功。
解构赋值允许指定默认值。
对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
默认值生效的条件是,对象的属性值严格等于undefined。
解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。
- ES6总结--严格模式、let/const 、解构赋值
- ES6新特性 let、const、变量对象的解构赋值
- 【ES6学习】— (1)ES6简介、let与const命令以及变量的解构赋值
- ES6笔记之一 let const 解构
- ES6学习笔记一之js发展、let、const、解构赋值
- ES6入门(let和const,解构赋值,正则扩展,字符串扩展,数值扩展)
- const、let、var区别+js严格模式
- 【ES6系列】解构赋值
- ES6 destructuring 解构赋值
- es6 chapter3 解构赋值
- ES6 解构赋值用途
- ES6:解构赋值
- ES6 解构赋值
- 【es6】解构赋值
- es6-变量解构赋值
- ES6-变量解构赋值
- ES6变量解构赋值
- ES6解构赋值详解
- jvm运行---个人笔记
- 十年的老代码,你敢动?
- Java数据结构之堆栈-使用数组实现堆栈
- python3.5+selenium3.4自动化测试1_错误图片用时间命名保存
- (三)spring boot + mybatis +pagehelper 添加Dao工具类
- ES6总结--严格模式、let/const 、解构赋值
- 传感器的基本介绍
- 原子类和valotile关键字
- AndroidStudio上第一个Kotlin项目
- JS创建对象与继承总结
- 设计模式六大原则
- 从面试题看问题之修饰符篇
- 初识kotlin-Android Studio-小新
- java简单实现遗传算法