Let
变量i的作用域
1 | //ES5 |
重复定义
1 | var i = 0; |
const 定义常量
1 | const data = 10; |
定义常量为数组时 , 常量数组内部值可以改变 , 但是常量不能重新赋值
进制转换
- 0b:二进制
- 0o:八进制
- 0x:十六进制
1
2
3
4
5
6
7
8
9
10
11
12
13console.log(0b10); //2
console.log(0o10); //8
console.log(0x10); //16
console.log(0b11 === 3); //true
console.log(0o10 === 8); //true
console.log(0x10 === 16);//true
let num = 10;
console.log(num.toString(8)); //8进制转换
console.log(num.toString(2)); //2进制转换
console.log(num.toString(16));//16进制转换
console.log(num.toString(5)); //5进制转换
字符串解析
嵌入字符串
1 | let name = "Elias" |
字符串模板
1 | let name = "Elias" |
按 ${ }
模板分割字符串输出形成
1 | let name1 = "Elias" |
当字符串模板出现在首位或末位时, 非模板数组输出空值在首位或末位
1 | let name1 = "Elias" |
详细可查 👉ECMAScript
模板和表示形式
1 | let name = "Elias" |
把模板和表示形式分离
Symbol类型
概念
1 | let str1 = String("helloWorld"); |
对于 s1 == s2
: Symbol类型会分配一个内部哈希值 , 所以在比较的时候是用哈希值作比较 ,而不是用赋予的 value 值作比较 , 所以不相等
作为常量
1 | const Java = Symbol(); |
这样就可以直接根据常量名判断了
作为属性
首先理解下面这个
1 | let s1 = String("mySymbol"); |
- 首先 s1 、s2 的值都为 mySymbol
- 然后给对象 obj 的 s1 键(mySymbol)赋 hello 值
- 然后给对象 obj 的 s2 键(mySymbol)赋 world 值 , 由于是同一个键就把上面的覆盖了
1 | let s1 = Symbol("mySymbol"); |
接着这里就好理解了
半隐藏属性
1 | const MYKEY = Symbol(); |
解构赋值
数组赋值
1 | let [a, b, c] = [10, 20, 30]; |
对象赋值
1 | let {name, age} = { age: 20 , name: 'Elias'}; |
函数赋值
1 | function func1() { |
函数参数名指定
1 | function func2({x=1, y=2}){ |
数组循环 for…of
1 | let list = [10, 20, 30]; |
- for…of 只关心 list 内的值
- for…in 关心 lis t所有的属性,可根据
Array.prototype.Len = function(){}
得出结论 - 前者把 list 当作数组 , 后者把 list 当作变量
函数默认值
1 | //字符参数 |
可变长参数
1 | function sum(...args) { |
1 | args.forEach(val => { |
箭头函数 =>
1 | let list = [10, 20, 30]; |
let 写不写都可以
基本对象定义
1 | let title = "ES6从入门到外出"; |
类定义 class
1 | class Player { |
getting / setting 定义
1 | class Player { |
类继承
1 | class Car { |
循环对象
1 | let list = [10, 20, 30]; |
实现可迭代对象
普通的数组内的值可以用 for..of 循环出来 , 因为是在数组内部实现了迭代器 , 因为这些在底层就已经定义好了的。平时使用起来没感觉到而已。
但是我们自己定义的对象是没有这种功能的,平常实例化的时候多数只是传递一个参数,但是当我们给对象传递了一个数组的时候呢,如何取去操作多个对象呢。
这里就需要在我们自己定义的类里面去实现迭代器接口
1 | class Player { |
因为在Player类里面实现了迭代器接口,所以我们才能用 for…of 遍历
Player { list: [ 'Curry', 'Harden', 'LeBron' ] }
Player 对象里是个键值对
1 | //修改一下构造器,观察结果 |
1 | //修改参数,观察结果 |
1 | let player = new Player(); |
简单迭代器
- function* { } : 迭代生成器
- yield : 迭代返回
1 | function* myGenerator() { |
1 | //这里可以用在读取数据库结果集时 |
yield 就类似方法里的 return , return 一般都是只有一个 , 而 yield 能有多个 , 并且每次能返回不同的内容
实现可迭代对象 - yield
1 | class MyList { |