数组扁平化
老方案
let arr = [1, 2, 4, 6,[5, 4, 5,[98, 3], [34], [7]]];
arr.toString().split(',').map(Number);
新方案:
flat()
const arr = [1, [2, [3, [4, 5]]], 6];
console.log(arr.flat(Infinity));
深拷贝
老方案:
JSON.parse(JSON.stringify(obj))
const person = {
name: "shaka",
age: 18,
hobby: ['Code']
}
const person2 = JSON.parse(JSON.stringify(person))
新方案
structuredClone()
const person = {
name: "shaka",
age: 18,
hobby: ['Code']
}
const copied = structuredClone(person)
console.log(copied.hobby === person2.hobby);//false
at代替arr.length
支持数组和字符串,再也不用使用这种冗余的写法了 arr[arr.length-1]
const arr = [12, 3, 4, 2, 42, 5, 59]
console.log(arr.at(-1));//59
trimStart 和 trimEnd
trimStart() 方法从字符串的开头删除空格。trimLeft() 是此方法的别名。
trimEnd() 方法从一个字符串的末端移除空白字符。trimRight() 是这个方法的别名。
使用方法和trim是一致的,这里就不写了
endsWith() 检测字符串结尾
str.endsWith(searchString, length);
searchString 要搜索的子字符串。
length 在 str 中搜索 searchString 的结束位置
const str = 'shaka is a boy'
console.log(str.endsWith('boy'));//true
console.log(str.endsWith('shaka', 5));//true
length 当不填写值时,默认值为str.length,也就是真正的字符串结尾处,从下标为0的字符开始,空格和符号也算字符。
也是开始的位置。
可选链运算符?.
const person = {
name: 'shaka',
cat: {
name: 'duoduo'
}
};
我们现在有这么一个对象
const dog = person.dog.name
console.log(dog);
我们去输出这样一个代码,毫无疑问会报错
但是有的时候,我们这个数据没有,但是我们不想让它报错,需要继续走下去开发,怎么做
const dog = person.dog?.name
console.log(dog);//undefined
空值合并运算符(??)
const nullValue = null;
const emptyText = ""; // 空字符串,是一个假值,Boolean("") === false
const someNumber = 42;
const valA = nullValue ?? "valA 的默认值";
const valB = emptyText ?? "valB 的默认值";
const valC = someNumber ?? 0;
console.log(valA); // "valA 的默认值"
console.log(valB); // ""(空字符串虽然是假值,但不是 null 或者 undefined)
console.log(valC); // 42
保证常量不为 null 或者 undefined。
同时与||是有去别的
const nullValue = null;
const emptyText = ""; // 空字符串,是一个假值,Boolean("") === false
const someNumber = 42;
const valA = nullValue || "valA 的默认值";
const valB = emptyText || "valB 的默认值";
const valC = someNumber || 0;
console.log(valA);
console.log(valB);
console.log(valC);
也就是说??只有当左侧为null和undefined的时候,返回其右侧操作数,否则返回左侧操作数。
需要注意的是将 ?? 直接与 AND(&&)和 OR(||)运算符组合使用是不可取的,会报语法错误