JS常用知识点整理

169 阅读3分钟

一、ES6的解构赋值

解构赋值语法是一种 Javascript 表达式。通过解构赋值,可以将属性/值从对象/数组中取出,赋值给其他变量,解构赋值在js非常常用。

// obj对象
const obj = {
    a: 1,
    b: 2,
    c: 3,
    d: 4,
    e: 5,
}

// 取obj对象中的值
const {a, b, c, d, e} = obj; // 可以用{}解构出obj中的值
console.log(a, b, c, d, e); // 结果是 1, 2, 3, 4, 5 

// 这个取值是基础的常用的,目前只能用obj对象的属性名,如果我们不需要这个属性名,那么还需要重新赋值,其实我们可以这么写;
const {a: abandon} = obj;
console.log(abandon); // 结果是 1,就是obj.a的值

// 我们也可以用 ...解构obj对象剩余值;
const {a: abandon, ...last} = obj;
console.log(abandon, last); // 结果是 1,{b: 2, c: 3, d: 4, e: 5}

// 如果obj2对象里嵌套有对象,也可以解构出来;
const obj2 = {
    a: {
        a1: 1,
        b1: 2,
    }
}
const {a: {a1, b1}} = obj2;
console.log(a1, b1); //结果是 1, 2

// 可以在解构时赋默认值,在没有解构出这个属性时可以用默认值
const obj2 = {
    a: {
        a1: 1,
        b1: 2,
    }
}
const {b = 95} = obj2;
console.log(b); // 结果是95

二、可选链运算符(?.)

可选链运算符?. ) 允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 运算符的功能类似于 . 链式运算符,不同之处在于,在引用为空 (nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。与函数调用一起使用时,如果给定的函数不存在,则返回 undefined

当尝试访问可能不存在的对象属性时,可选链运算符将会使表达式更短、更简明。在探索一个对象的内容时,如果不能确定哪些属性必定存在,可选链运算符也是很有帮助的。


const obj = {
    value: {
        name: 'ss',
    },
};
console.log(obj?.value?.app?.id) // 结果是 undefined

当用了可选链,在访问不存在的对象属性时,返回undefined

三、空值合并运算符(??)

空值合并运算符?? )是一个逻辑运算符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。

逻辑或运算符(||不同,逻辑或运算符会在左侧操作数为假值时返回右侧操作数。也就是说,如果使用 || 来为某些变量设置默认值,可能会遇到意料之外的行为。比如为假值(例如,'' 或 0)时。见下面的例子。

console.log('' || 1); // 结果为 1
console.log(0 || 1); // 结果为 1

以前,如果想为一个变量赋默认值,通常的做法是使用逻辑或运算符(||),然而,由于 || 是一个布尔逻辑运算符,左侧的操作数会被强制转换成布尔值用于求值。任何假值(0, '', NaN, null, undefined)都不会被返回,导致你如果需要0''等值的时候会出现不可预料的后果。

let value = 0; // 比如 value 是需要判断是否有值的数据
console.log(value || '未取值'); // 结果是 未取值,如果 0 也是我需要的值就不能这么判断了
console.log(value ?? '未取值'); // 结果是 0

在判断用户是否在输入框中输入值时,我们可以这么判断

if(value !== null && value !== undefined && value !== '') {}

但是这个写法比较麻烦,可以用 空值合并运算符(??)

if((value ?? '') !== '' ) {}

四、默认参数值

函数默认参数允许在没有值或undefined被传入时使用默认形参。

以前,一般设置默认参数的方法是在函数体测试参数是否为undefined,如果是的话就设置为默认的值。

// 如果不传参数,就设置默认参数
function fn (a, b) {
    const a1 = a || 0;
    const b1 = b || '';
    console.log(a1, b1);
}
fn(1);

有了默认参数,我们不需要再在函数体内做不必要的检查。

function fn (a = 0, b = '') {
    console.log(a, b);
}
fn(1);