# 常用技巧
# 1. addEventListener 监听事件
语法:
dom节点.addEventListener('事件', 事件回调)
示例:
const aa = document.querySelector('.aa');
aa.addEventListener('click', checkGuess);
function checkGuess(){}
1
2
3
4
5
2
3
4
5
注意:
addEventListener()
中作为参数的函数名不加括号。
# 2. in 操作符
描述:如果指定的属性在指定的对象或其原型链中,则 in
运算符返回 true
。
语法:
prop in object
示例:
let mycar = {make: "Honda", model: "Accord", year: 1998};
delete mycar.make;
"make" in mycar; // 返回 false
// 如果你只是将一个属性的值赋值为undefined,而没有删除它,则 in 运算仍然会返回true。
let mycar = {make: "Honda", model: "Accord", year: 1998};
mycar.make = undefined;
"make" in mycar; // 返回 true
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 3. 逻辑空赋值(??)
描述:当左侧的操作数为 null
(opens new window) 或者 undefined
(opens new window) 时,返回其右侧操作数,否则返回左侧操作数。
语法:
leftExpr ?? rightExpr
示例:
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
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 4. 可选链运算符(?.)
描述:允许读取位于对象链深处的属性的值,而不必明确验证链中的每个引用是否有效,在引用为空 (nullish (opens new window) ) (null
(opens new window) 或者 undefined
(opens new window)) 的情况下不会引起错误,该表达式短路返回值是 undefined
。
语法:
obj.val?.prop obj.val?.[expr] obj.func?.(args)
示例:
let customer = {
name: "Carl",
details: {
age: 82,
location: "Paradise Falls" // details 的 address 属性未有定义
}
};
let customerCity = customer.details?.address?.city; // undefined
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Map →