解构赋值:
你的变量都这样赋值:
let a = 1;
let b = 2;
let c = 3;
其实你可以这样:
let [a, b, c] = [1, 2, 3];
let [a, [[b], c]] = [1, [[2], 3]];
要注意的是,数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值:
let { a, b } = { a: 'aaa', b: 'bbb' };
a // "aaa"
b // "bbb"
let { c } = { a: 'aaa', b: 'bbb' };
c // undefined
字符串遍历:
字符串怎么遍历?
现在字符串可以被for...of
循环遍历
for ( let item of 'abc' ) {
console.log( item )
}
// "a"
// "b"
// "c"
实例方法:
includes(), startsWith(), endsWith():
怎么确定一个字符串是否包含在另一个字符串中?是不是上来就 indexOf ?
那你记得 includes 吗?对的,它现在同样可以用于字符串:
let s = 'Hello world!';
s.includes('o') // true
s.startsWith('Hello') // true
s.endsWith('!') // true
- includes():返回布尔值,表示是否找到了参数字符串。
- startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
- endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
repeat():
返回一个新字符串,表示将原字符串重复n
次。参数如果是小数会被取整,参数是负数或者Infinity
会报错,是字符串则会先转换成数字
'a'.repeat(3) // "aaa"
'a'.repeat(2.9) // "aa"
'a'.repeat(Infinity)// Error
'a'.repeat(-1)// Error
'a'.repeat(-0.9) // ""
'a'.repeat(NaN) // ""
'a'.repeat('a') // ""
padStart(),padEnd():
字符串不够指定长度,会在 padStart 头部、padEnd 尾部补全
'a'.padStart(5, 'b') // 'bbbba'
'a'.padEnd(5, 'b') // 'abbbb'
trimStart(),trimEnd():
消除字符串头部、尾部的空格,它们返回的都是新字符串,不会修改原始字符串
const s = ' abc ';
s.trim() // "abc"
s.trimStart() // "abc "
s.trimEnd() // " abc"
replaceAll():
replace() 只能换第一个?现在 replaceAll() 它来了 :
'aabbcc'.replace(/b/g, '_') //当初的我们
'aabbcc'.replaceAll('b', '_') //现在的我们
数值分隔符:
1,000,000,000,000 这样的数值是不是很清楚?
现在,我们也可以有了:
123_00 === 12_300 // true
12345_00 === 123_4500 // true
12345_00 === 1_234_500 // true
允许 JavaScript 的数值使用下划线(_
)作为分隔符
函数参数的默认值:
以前的我们想要有个参数默认值:
function log(x, y) {
y = y || 'World';
console.log(x, y);
}
log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello World
现在的我们:
function log(x, y = 'World') {
console.log(x, y);
}
log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello
箭头函数:
家喻户晓的箭头函数我就不说了:
let f = v => v;
// 等同于
let f = function (v) {
return v;
};
函数参数的尾逗号:
函数的最后一个参数可以有尾逗号
function clownsEverywhere(
param1,
param2,
) { /* ... */ }
clownsEverywhere(
'foo',
'bar',
);
这有啥用呢?我想想应该是 版本管理的时候 在原来最后一个参数后面添加一个逗号,会显示添加逗号的那一行发生了变动,有尾逗号的话,就不会显示变化
catch 命令的参数省略:
现在catch后面可以不再跟随不用的参数:
try {
// ...
} catch {
// ...
}
扩展运算符:
将一个数组,变为参数序列,也是复制数组的新的简便写法:
console.log(...[1, 2, 3])
// 1 2 3
console.log(1, ...[2, 3, 4], 5)
// 1 2 3 4 5
const a1 = [1, 2];
const a2 = [...a1];
//[...a1]会返回原数组的克隆,再修改a2就不会对a1产生影响
再见了我们的 apply(),再见了concat()
将字符串转为的数组:
[...'hello']
// [ "h", "e", "l", "l", "o" ]
对象属性同名简写 :
以前的对象属性名要这么写:
const name = 'aaa'
const age = '33'
const obj = {
name: name,
age: age
}
console.log(obj) // { name: 'aaa', age: '33' }
现在可以这样简写:
const name = 'aaa'
const age = '33'
// 属性同名可简写
const obj = {
name
age
}
console.log(obj) // { name: 'aaa', age: '33' }