let命令:
- 用来声明变量
- 不存在变量提升,所声明的变量必须声明后才能调用,否则报错
- 暂时性死区(TDZ)在代码块内,使用let命令声明变量之前,该变量都是不可用的
- 不允许重复声明
块级作用域
function f1() {
let n = 5;
if (true) {
let n = 10;
}
console.log(n); // 5
}
const命令:
- const声明一个只读的常量。一旦声明,常量的值就不能改变
- 不存在变量提升,所声明的变量必须声明后才能调用,否则报错
- 暂时性死区(TDZ)在代码块内,使用let命令声明变量之前,该变量都是不可用的
- 不允许重复声明
- 本质:并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动
变量结构赋值:
数组的解构赋值:
let [a, b, c] = [1, 2, 3];
- 本质:“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值
- Set 结构,也可以使用数组的解构赋值
let [x, y, z] = new Set(['a', 'b', 'c']);
x // "a"
- 解构赋值允许指定默认值:
let [foo = true] = [];
foo // true
对象的解构赋值:
- 数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
let { bar, foo } = { foo: 'aaa', bar: 'bbb' };
foo // "aaa"
bar // "bbb"
let { baz } = { foo: 'aaa', bar: 'bbb' };
baz // undefined
- 默认值:对象的解构也可以指定默认值
- 默认值生效的条件是,对象的属性值严格等于undefined
var {x = 3} = {x: undefined};
x // 3
var {x = 3} = {x: null};
x // null
字符串的解构赋值:
- 字符串被转换成了一个类似数组的对象
const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"
数值和布尔值的解析赋值:
- 解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错
函数参数的解构赋值
function add([x, y]){
return x + y;
}
add([1, 2]); // 3
用途:
- 交换变量的值
let x = 1;
let y = 2;
[x, y] = [y, x];
- 从函数返回多个值
// 返回一个数组
function example() {
return [1, 2, 3];
}
let [a, b, c] = example();
- 函数参数的定义
// 参数是一组有次序的值
function f([x, y, z]) { ... }
f([1, 2, 3]);
// 参数是一组无次序的值
function f({x, y, z}) { ... }
f({z: 3, y: 2, x: 1});
- 提取 JSON 数据
let jsonData = {
id: 42,
status: "OK",
data: [867, 5309]
};
let { id, status, data: number } = jsonData;
console.log(id, status, number);
// 42, "OK", [867, 5309]
- 函数参数的默认值
- 遍历 Map 结构
const 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
- 输入模块的指定方法
字符串的新增方法
- String.fromCodePoint()
用于从 Unicode 码点返回对应字符 - String.raw()
该方法返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,往往用于模板字符串的处理方法。
String.raw`Hi\n${2+3}!`
// 实际返回 "Hi\\n5!",显示的是转义后的结果 "Hi\n5!"
- codePointAt()
能够正确处理 4 个字节储存的字符,返回一个字符的码点。
let s = '𠮷a';
s.codePointAt(0) // 134071
s.codePointAt(1) // 57271
s.codePointAt(2) // 97
-
normalize()
用来将字符的不同表示方法统一为同样的形式,这称为 Unicode 正规化。 -
includes(),startsWith(),endsWith()
includes():返回布尔值,表示是否找到了参数字符串。
startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
-
repeat()
repeat方法返回一个新字符串,表示将原字符串重复n次 -
padStart(),padEnd()
如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。
'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'
-
trimStart(),trimEnd()
ES2019 对字符串实例新增了trimStart()
和trimEnd()
这两个方法。它们的行为与trim()
一致,trimStart()
消除字符串头部的空格,trimEnd()
消除尾部的空格。它们返回的都是新字符串,不会修改原始字符串 -
matchAll()
matchAll()方法返回一个正则表达式在当前字符串的所有匹配
网友评论