ES6 学习目录
1. let
>1 定义变量的时候没有变量的预解释
>2 不能重复定义变量
> 3 虽然不进行预解释,但是代码执行前会先将定义的变量过滤一遍,一旦发现不合法的直接报错,代码也不执行了
2.const
> 定义静态变量 不能修改值 必须要赋值
3. 数组赋值
4.对象赋值
ES6去重
1. new Set(arr) 去掉重复的项目,返回一个对象,包括NaN
正常情况下,NaN === NaN 返回的是false,但是在set里,一样能够去重
console.log(new Set([1,2,3,3,4,5,5,6,null,undefined,undefined,NaN,NaN]));
2. Array.from 可以把类数组对象、可迭代对象转化为数组
var newArr = Array.from(new Set([1,2,3,3,4,5,5,6,null,undefined,undefined,NaN,NaN]));
console.log(newArr)
export,import ,export default 的区别
ES6模块主要有两个功能:export和import
export和import(一个导出一个导入)
export 用于对外输出本模块(一个文件可以理解为一个模块)变量的接口
import 用于在一个模块中加载另一个含有export接口的模块
变量操作 例如:
一个文件a.js export var name="sukey";
另一个文件
多个变量:
如果是导出多个变量就应该按照下边的方法,用大括号包裹着需要导出的变量
var name1="李四";
var name2="张三";
export { name1 ,name2 }
对应的 import { name1 , name2 } from "/.a.js"
函数:
function add(x,y){
alert(x*y)
}
export { add }
引用:
import { add } from "/.a.js"
export default{
data () {return{ } },
created:function(){
add(4,6)
}
}
export与export default的区别:
1、export与export default均可用于导出常量、函数、文件、模块等
2、你可以在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使用
3、在一个文件或模块中,export、import可以有多个,export default仅有一个
4、通过export方式导出,在导入时要加{ },export default则不需要
var name="李四";
export default name
注:
1. export default输出一个变量,不需要加{},那么import模块的时候也不需要大括号
2. 在一个文件或者模块中,export、import可以有多个,而export default仅有一个
3. 通过export方式导出,在导入时要加{ },exp ort default则不需要
Promise的基本用法
ECMAScript 和 JavaScript 的关系
1996 年 11 月,JavaScript 的创造者 Netscape 公司,决定将 JavaScript 提交给标准化组织 ECMA,希望这种语言能够成为国际标准。次年,ECMA 发布 262 号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为 ECMAScript,这个版本就是 1.0 版
该标准从一开始就是针对 JavaScript 语言制定的,但是之所以不叫 JavaScript,有两个原因。一是商标,Java 是 Sun 公司的商标,根据授权协议,只有 Netscape 公司可以合法地使用 JavaScript 这个名字,且 JavaScript 本身也已经被 Netscape 公司注册为商标。二是想体现这门语言的制定者是 ECMA,不是 Netscape,这样有利于保证这门语言的开放性和中立性。
因此,ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现(另外的 ECMAScript 方言还有 Jscript 和 ActionScript)。日常场合,这两个词是可以互换的
ES6与ECMAScript 2015的关系
ES6 的第一个版本,就这样在 2015 年 6 月发布了,正式名称就是《ECMAScript 2015 标准》(简称 ES2015)。
2016 年 6 月,小幅修订的《ECMAScript 2016 标准》(简称 ES2016)如期发布,这个版本可以看作是 ES6.1 版,因为两者的差异非常小(只新增了数组实例的includes方法和指数运算符),基本上是同一个标准。
根据计划,2017 年 6 月发布 ES2017 标准
所以 ES6 既是一个历史名词,也是一个泛指,含义是 5.1 版以后的 JavaScript 的下一代标准,涵盖了 ES2015、ES2016、ES2017 等等,而 ES2015 则是正式名称,特指该年发布的正式版本的语言标准。本书中提到 ES6 的地方,一般是指 ES2015 标准,但有时也是泛指“下一代 JavaScript 语言”
Babel 转码器
Babel 是一个广泛使用的 ES6 转码器,可以将 ES6 代码转为 ES5 代码,从而在现有环境执行。
这意味着,你可以用 ES6 的方式编写程序,又不用担心现有环境是否支持
let命令
1. let 用来声明变量 类似于var 没有 变量提前声明(预解释)
2.let声明的变量只在所在的代码块内有效(块级作用域)
3.let不允许在相同作用域内,重复声 明同一个变量
ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错
4.let实际上为 JavaScript 新增了块级作用域
外层作用域无法读取内层作用域的变量
内层作用域可以定义外层作用域的同名变量
4. 不存在变量提升
console.log(b) //ReferenceError b is not defined
let b = 'a'
typeof操作符返回一个字符串,表示未经计算的操作数的类型
为什么需要块级作用域?
1. 内层变量可能会覆盖外层变量
2. 用来计数的循环变量泄露为全局变量
ES6 语法
1. 模板字符串
将变量或者表达式 直接嵌入到字符串 使用反引号(``)拼接多行字符串
2. 箭头函数
1> 只含有1个表达式
2> 含有多条语句
3>this 的指向问题
3. set 函数
let set = new Set([1,2,3,4]) //构造函数 值不重复
[...set] //... 扩展运算符 将类数组对象转换以逗号分隔的序列
for of // 遍历
4. map 函数
5. generator 生成器函数