2020-09-17 Es6学习笔记
关于let
只要块级作用于中存在let和const命令,这个区块就形成了封闭作用域,凡是在声明之前使用这些变量就会报错
var a = 123;
if(true){
a=’abc’; //报错
let a;
}
这种称为暂时性死区
在没有let之前,typeof运算符是百分之百安全的,永远不会报错
*变量一定要在声明之后使用,否则就报错
*let不允许在相同作用域内,重复声明同一个变量。
// 报错
function () {
let a = 10;
var a = 1;
}
// 报错
function () {
let a = 10;
let a = 1;
}
function func(arg) {
let arg; // 报错
}
function func(arg) {
{
let arg; // 不报错
}
}
Const:声明一个只读常量,不可改变
import shim from ‘system.global/shim’; shim();
可以在所有环境拿到global。
import getGlobal from ‘system.global’;
const global = getGlobal();
//上面代码将顶层对象放入变量global。
let [head, ...tail] = [1, 2, 3, 4];
head // 1
tail // [2, 3, 4]
//这写法很dio
var [foo = true] = [];
foo // true
//指定默认值
Ps:
object.prototype.name=value
像对象里添加属性
变量声明语句中,不能带有圆括号
例如: var [(a)] = [1];
函数参数中,模式不能带有圆括号。
function f([(z)]) { return z; }
赋值语句中,不能将整个模式,或嵌套模式中的一层,放在圆括号之中。
({ p: a }) = { p: 42 }; 修改 ({p:(a)}) = {p:42};
([a]) = [5];
可以使用圆括号的情况只有一种:赋值语句的非模式部分,可以使用圆括号。
[(b)] = [3]; // 正确
({ p: (d) } = {}); // 正确
[(parseInt.prop)] = [3]; // 正确
因为他们都是赋值语句而不是声明语句,他们的括号都不属于模式的一部分
解构赋值对提取JSON对象中的数据,尤其有用。
var jsonData = {
id: 42,
status: "OK",
data: [867, 5309]
};
let { id, status, data: number } = jsonData;
console.log(id, status, number);
// 42, "OK", [867, 5309]
快速提取json对象的值
遍历Map结构
var map = new Map();
map.set('first', 'hello');
map.set('second', 'world');
for (let [key, value] of map) {
console.log(key + " is " + value);
}
// first is hello
// second is world
// 获取键名
for (let [key] of map) {
// ...
}
// 获取键值
for (let [,value] of map) {
// ...
}
Infinity 属性用于存放表示正无穷大的数值
模板字符串(template string)是增强版的字符串,用反引号()标识 // 字符串中嵌入变量 var name = "Bob", time = "today";
Hello ${name}, how are you ${time}?`
如果在模板字符串中需要使用反引号,则前面要用反斜杠转义。
concat
合并数组arr1.concat(arr2, arr3);
//es6官方文档学习笔记