js表达式和运算符
...大约 2 分钟
解构赋值【es2015】引入
解构赋值语法是一种 Javascript 表达式。可以将数组中的值或对象的属性取出,赋值给其他变量。
<script>
const [a = 10, b] = [undefined, 2]; // 如果数组中的元素是undefined,则使用默认值
console.log(a); // 输出: 10
console.log(b); // 输出: 2
const nestedObj = {
user: {
name: 'Bob',
age: 30
}
};
// 从嵌套的对象中提取数据
const { user: { name: userName, age: userAge } } = nestedObj;
console.log(userName); // 输出: Bob
console.log(userAge); // 输出: 30
</script>
相等运算符(==
和 !=
)和严格相等运算符(===
和 !==
)
- 如果操作数的类型不同,
==
运算符会在比较之前尝试将它们转换为相同的类型。 - 如果两个操作数都是对象,只有当它们指向同一个对象时才返回
true
。{}!={}
- 两个操作数有任意一个为
NaN
,返回false
。NaN不等于NaN。
幂(**)
幂 ( **
)运算符返回第一个操作数取第二个操作数的幂的结果。它等价于 Math.pow()
,不同之处在于,它还接受 BigInt 作为操作数。
幂运算符是右结合的:a ** b ** c
等于 a ** (b ** c)
。
2 ** 3; // 8
3 ** 2; // 9
3 ** 2.5; // 15.588457268119896
10 ** -1; // 0.1
NaN ** 2; // NaN
NaN ** 0; // 1
1 ** Infinity; // NaN
2 ** 3 ** 2; // 512
2 ** (3 ** 2); // 512
(2 ** 3) ** 2; // 64
-(2 ** 2); // -4
(-2) ** 2; // 4
in
如果指定的属性在指定的对象或其原型链中,则 in
运算符返回 true
。一般用于对象和数组【数组必须使用索引号,使用数组元素的值会返回false】
in虽然可以用于数组,但是数组最好用【Array.prototype.includes()
】。
includes
方法用于数组,不适用于对象。includes
检查的是值,而不是键(属性名)。
可选链运算符(?.)
可选链运算符(?.
) 用于访问对象的属性或调用函数。如果使用此运算符访问的对象或调用的函数是 undefined
或 null
,则表达式会短路并计算为 undefined
,而不是抛出错误。
const adventurer = {
name: 'Alice',
cat: {
name: 'Dinah',
},
};
const dogName = adventurer.dog?.name;
console.log(dogName);
// Expected output: undefined
console.log(adventurer.someNonExistentMethod?.());
// Expected output: undefined
空值合并运算符(??)
空值合并运算符 ( ??
)是一个逻辑运算符,当左侧的操作数为 null
或者 undefined
时,返回其右侧操作数,否则返回左侧操作数。
const foo = null ?? 'default string';
console.log(foo);
// Expected output: "default string"
const baz = 0 ?? 42;
console.log(baz);
// Expected output: 0
const a=NaN ?? 2 //结果是NaN