https://www.cnblogs.com/itlkNote/p/6830682.html
https://www.cnblogs.com/meteorcn/p/node_mianshiti_interview_question.html
阮一峰
http://es6.ruanyifeng.com/
http://www.ruanyifeng.com/
http://www.w3school.com.cn/js/index.asp
https://www.w3schools.com/default.asp
块作用域
ES6 的块级作用域必须有大括号
函数只能声明在当前作用域的顶层
6 种声明变量的方法
var,function,let,const,import,class
var "变量提升",变量泄露为全局变量
let 用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效
"暂时性死区"
不允许重复声明,内层作用域可以定义外层作用域的同名变量
const 声明一个只读的常量。一旦声明,常量的值就不能改变
立即初始化,不能留到以后赋值
const的作用域与let命令相同:只在声明所在的块级作用域内有效。
命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用
不可重复声明
保证的并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动(如果是一个对象/数组,则对象内部可以改变)
对象冻结Object.freeze
function 立即执行函数表达式(IIFE)不再必要了
ES5
允许在块级作用域内声明函数。
函数声明类似于var,即会提升到全局作用域或函数作用域的头部。
同时,函数声明还会提升到所在的块级作用域的头部。
ES6
块级作用域的函数声明当作let处理
块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用
globalThis ES5 之中,顶层对象的属性与全局变量是等价的
浏览器 顶级对象 window/self
Web Worker 顶级对象 self
Node 顶级对象 global
ALL 顶级对象 globalThis
"解构赋值","模式匹配"
数组的解构赋值
只要等号两边的模式相同,左边的变量就会被赋予对应的值let [x,y] = ['a','b'];
解构不成功,变量的值就等于undefined
不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组
只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值
当一个数组成员严格等于undefined,默认值才会生效let [x = 1] = [undefined];
默认值是一个表达式,那么这个表达式是"惰性求值"的,即只有在用到的时候,才会求值。
对象的解构赋值
数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值
解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量
会将{x}理解成一个代码块,从而发生语法错误。只有不将大括号写在行首,避免 JavaScript 将其解释为代码块
数组本质是特殊的对象,因此可以对数组进行对象属性的解构
字符串的解构赋值 const [a, b, c, d, e] = 'hello';
字符串被转换成了一个类似数组的对象
类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值
数值和布尔值的结构赋值
只要等号右边的值不是对象或数组,就先将其转为对象
由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错
函数参数的解构赋值
圆括号问题
解构赋值虽然很方便,但是解析起来并不容易
一个式子到底是模式,还是表达式,没有办法从一开始就知道,必须解析到(或解析不到)等号才能知道
只要有可能导致解构的歧义,就不得使用圆括号
不能使用圆括号的情况
变量声明语句
函数参数
赋值语句的模式
可以使用圆括号的情况
赋值语句的非模式部分,可以使用圆括号
用途
交换变量的值
从函数返回多个值
函数参数的定义
提取 JSON 数据
函数参数的默认值
遍历 Map 结构
输入模块的指定方法
String 基础
String 属性
String 方法
charAt() 指定索引处的字符
charCodeAt() 返回一个数字,表示给定索引处的字符的Unicode值
indexOf() 返回指定值的第一次出现的调用String对象中的索引,或如果没有找到-1
lastIndexOf() 返回指定的值最后一次出现的调用String对象中的索引,或如果没有找到-1
localeCompare() 返回一个数字表示参考字符串是否到来之前或之后或相同的排序顺序给定的字符串:0 相同,-1参数值排序后,1参数值排序前
toLocaleLowerCase() 转换为小写,同时尊重当前的语言环境
toLocaleUpperCase() 换为大写,同时尊重当前的语言环境
toLowerCase() 转换为小写
toUpperCase() 转换为大写
split() 通过分离串入子拆分一个String对象到字符串数组
slice() 提取字符串的一部分,并返回一个新的字符串,string.slice( beginslice [, endSlice] )
作为一个负指数,endSlice表示从字符串末尾的偏移
substr() 返回基于给定参数的新的子字符串,string.substr(start[, length]),index从0到length-1
substring() 返回基于给定参数的新的子字符串,string.substring(indexA, [indexB]),index从0到length-1
toString() 指定对象的字符串
valueOf() 返回指定对象的原始值
concat() 结合两个或多个字符串,并返回一个新字符串
match() 用于匹配的字符串正则表达式
replace() 用于查找一个正则表达式和一个字符串之间的匹配,并用新的子替换匹配的子串
search() 执行搜索的正则表达式和指定的字符串之间的匹配
String HTML 包装器
anchor() 超文本目标的HTML锚 a+name
link() 超文本链接 a+src
big() 大的字体 big
small() 小的字体 small
bold() 粗体 b
italics() 斜体 i
sub() 下标 sub
sup() 上标 sup
strike() 删除线 strike
fontcolor() 指定的颜色 font+color
fontsize() 指定的字体大小 font+size
fixed() 固定间距字体 tt
blink() 闪烁,已废弃 blink
String扩展
Iterator
Generator
ES5 只有全局作用域和函数作用域
ES6 +块级作用域