我的es6笔记
变量
1. let 和 const 声明的变量不在window上了
2. es6中对于块级作用域里的函数声明实现不统一,要避免在大括号里声明函数,尽量用函数表达式来替代。
3. let和const声明的变量有暂时性死区
解构赋值
1. 解构赋值的本质是模式匹配,冒号左侧是模式,冒号右侧才是要赋值的变量。没有冒号的写法是冒号左右相同时的简写版本。
2. 解构赋值可以有默认值
3. 想跳过可以用逗号[, b, c] = [1, 2, 3]
4. 函数的传参括号其实就相当于一个隐形的数组解构赋值,var [a, b, c] = [1, 2, 3] 可以使用默认值(也是惰性求值的,用到才会计算),也可以嵌套,可以使用rest element (也必须在最后一个),与解构赋值的形式是统一的
var test = function(a, b, c){
}
test(1, 2, 3)
注意有一个区别在于:普通的解构赋值可以使用稀疏数组, 如 let [a, b, c] = [1, , 3] ([1, ,3] 在控制台打印出来是{0:1, 2:3, length:3})
而函数传参的话会报错,必须显式地输入undefined
函数
1. 给函数的参数设置默认值,会影响函数的length属性,设了默认值的参数及其后的参数不在统计内。rest参数也不会参与length的统计
2. 设置了默认值时,为了对默认值表达式求值,传参括号在初始化时会形成一个临时的作用域,即括号里与一个单独的作用域
3. 在var a = function b(){} 中,b才是函数的name属性,只有当右侧是匿名函数时,name才是a。用new b或者Object.create(b.prototype)创建的对象,在控制台打印时会出现函数名b,显示为 b { }
4. 箭头函数不能使用 arguments / new / yield
对象
1. 对象属性可以使用简写,但属性名表达式和简写不能同时使用,因为容易产生歧义
const foo = 'bar';
const bar = 'abc';
// 报错 ['bar']:'bar' 还是 ['bar']: 'abc' ?
const baz = { [foo] };
2. super关键字 只能用在对象方法的简写法中
3. 扩展运算符用于解构赋值当中时,只能拷贝右侧对象Object.keys()中未被分配(因为rest参数只能在最后,必定先分配之前的变量)的属性
let obj = {a:1}
// 下面这两种写法的结果是一样的
let {...obj1} = obj
let obj2 = {...obj}
rest参数是展开运算符的逆运算,但是rest参数必须在最后,rest参数不能跟表达式,而展开运算符没有这些限制
Class
1. class就是构造函数,但是不能设置原型上的属性,只能设置原型方法和实例属性。属性不管写在constructor里面还是外面,都会被视为实例属性。
2. class也有暂时性死区
3. class大部分是es5标准继承写法的语法糖,但继承方面有本质区别:
① class(构造函数)之间也做了继承,为了让子类可以调用父类的静态方法。
② 继承时用super先生成了父类实例,然后用子类的构造函数修改。es5时是先生成子类实例,然后用父类的构造函数修改。这样一来对于像Array这样无法通过apply借用的情况,es6也可以完美继承。
// es6的继承在es5里的写法
function Foo(){}
function Sub(name){
// 先生成父类实例
let obj = new Foo(){};
// 修改隐式原型
obj.__proto__=Sub.prototype;
// 修改子类实例
obj.name = name;
// 显式返回obj,替换new生成的默认对象
return obj
}
// 因为构造函数中没有使用this,所以这两种写法是一样的
let sub1 = new Sub()
let sub2 = Sub()
Module
1. es6模块默认在严格模式下执行
2. 在es6Module之前,js里只有值传递(高程p70),而import的实现是变量层面的引用传递
3. webpack模块的import不是真正的import,只是支持import写法,还是按值传递的方式导出变量的
我的es6笔记的更多相关文章
- ES6笔记(5)-- Generator生成器函数
系列文章 -- ES6笔记系列 接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还 ...
- ES6笔记系列
ES6,即ECMAScript 6.0,ES6的第一个版本是在2015年发布的,所以又称作ECMAScript 2015 如今距ES6发布已经一年多的时间,这时候才去学,作为一个JSer,羞愧羞愧,还 ...
- ES6笔记(1) -- 环境配置支持
系列文章 -- ES6笔记系列 虽然ES6已经发布一年多了,但在各大浏览器之中的支持度还不是很理想,在这查看ES6新特性支持度 Chrome的最新版本浏览器大部分已经支持,在Node.js环境上支持度 ...
- ES6笔记(2)-- let的块级作用域
系列文章 -- ES6笔记系列 一.函数级作用域 我们都知道,在ES6以前,JS只有函数级作用域,没有块级作用域这个概念 没有块级作用域,有利有弊,利于方便自由,弊于作用域内的变量容易被共享,例如这个 ...
- ES6笔记(3)-- 解构赋值
系列文章 -- ES6笔记系列 解构赋值,即对某种结构进行解析,然后将解析出来的值赋值给相关的变量,常见的有数组.对象.字符串的解构赋值等 一.数组的解构赋值 function ids() { ret ...
- ES6笔记(4)-- Symbol类型
系列文章 -- ES6笔记系列 Symbol是什么?中文意思是标志.记号,顾名思义,它可以用了做记号. 是的,它是一种标记的方法,被ES6引入作为一种新的数据类型,表示独一无二的值. 由此,JS的数据 ...
- ES6笔记(6)-- Set、Map结构和Iterator迭代器
系列文章 -- ES6笔记系列 搞ES6的人也是够无聊,把JS弄得越来越像Java.C++,连Iterator迭代器.Set集合.Map结构都出来了,不知道说什么好... 一.简单使用 1. iter ...
- ES6笔记(7)-- Promise异步编程
系列文章 -- ES6笔记系列 很久很久以前,在做Node.js聊天室,使用MongoDB数据服务的时候就遇到了多重回调嵌套导致代码混乱的问题. JS异步编程有利有弊,Promise的出现,改善了这一 ...
- ES6 笔记汇总
ES6 笔记汇总 二.ES6基础-let和const命令 三.变量的解构赋值 四.字符串的拓展 五.正则表达式的拓展 ...将会持续更新,敬请期待
- ES6笔记2
ES6笔记2 Promise Promise 是 ES6 引入的异步编程的新解决方案,语法上是一个构造函数 一共有3种状态,pending(进行中).fulfilled(已成功)和rejected(已 ...
随机推荐
- SQL注入之Sqli-labs系列第四十六关(ORDER BY注入)
0X1查看页面 0x2源码 <?php include("../sql-connections/sql-connect.php"); $id=$_GET['sort']; i ...
- [转]CentOS7利用systemctl添加自定义系统服务
原文:https://www.cnblogs.com/saneri/p/7778756.html CentOS7自定义系统服务 CentOS7的服务systemctl脚本存放在:/usr/lib/sy ...
- easyui Tree模拟级联勾选cascadeCheck,节点选择,父节点自动选中,节点取消,父节点自动取消选择,节点选择,所有子节点全部选择,节点取消,所有子节点全部取消勾选
最近项目中用到easyui tree,发现tree控件的cascadeCheck有些坑,不像miniui 的tree控件,级联勾选符合业务需求,所以就自己重新改写了onCheck事件,符合业务需求.网 ...
- Vue慕课网音乐项目随手记--node代理及数据抓取
1.抓取数据 链接 https://y.qq.com/portal/playlist.html Parameters 通过上图能看到,qq音乐通过设置了refer和host来保护接口. 那么怎么才 ...
- 嵌入页面的几种方法(转载自萤火虫小Q)
一.应用框架技术 ---- 要在宿主页面中嵌入外部页面的方法是,在宿主页面中包含外部页面的位置插入“< IFRAME name="XXX" width=X height=X ...
- gradle安装操作
下载你所需要对应的版本,gradle-4.3.1-bin.zip 下载后解压到你想要的目录 设置环境变量 在cmd模式下查看,出现信息证明安装成功
- 引擎设计跟踪(九.14.3.2) Deferred shading的后续实现和优化
最近完成了deferred shading和spot light的支持, 并作了一部分优化. 之前forward shading也只支持方向光, 现在也支持了点光源和探照光. 对于forward sh ...
- git 之路
1. 不要把配置文件放到你的 Git 代码仓库 https://www.oschina.net/translate/dont-include-configs-in-your-git-repos 2. ...
- Yii2 设计模式——设计模式简介
我们首先来思考一个问题:作为工程师,我们的价值是什么? 笔者认为是——解决用户问题. 我们的任何知识和技能,如果不能解决特定的问题,那么就是无用的屠龙之术:我们的任何经验,如果不能对解决新的问题有用, ...
- kotlin 编译 运行 hello world
kotlin 编译器下载地址:https://github.com/JetBrains/kotlin/releases/tag/v1.3.31 解压:kotlin-compiler-1.3.31.zi ...