目录
- // 原始js判断非空操作
- // 判断糅杂,不易书写
- if (data && data.children && data.children[0] && data.children[0].title) {
- // I have a title!
- }
- let object = {name:'Lily',age:20}
- // 对于静态的属性调用
- object?.name // Lily
- object?.address // undefined
-
- // 对于动态的属性调用 (variable 是动态变量)
- object?.[variable] // 不存在:undefined
-
-
- // 动态属性:另一个例子
- let data;
- console.log(data?.children?.[0]?.title) // undefined
-
- data = {children: [{title:'codercao'}]}
- console.log(data?.children?.[0]?.title) // codercao
-
- // 方法调用
- object.runsOnlyIfMethodExists?.()
- object.getTeacherList?.()
-
- ----------------------------------------------------
-
- // 使用??运算符 搭配使用
- console.log(undefined ?? 'codercao'); // codercao
- let arr = object?.list ?? [] // []
expr1 ??= expr2 逻辑空值运算符仅在 nullish 值( |
- 空的合并运算符(??)从左到右操作,如果 x 不为 nullish 值则中表达式不执行。
- 因此,如果 x 不为null 或者 undefined,则永远不会对表达式y进行求值。
- 如果y是一个函数,它将根本不会被调用。因此,此逻辑赋值运算符等效于
-
- x ?? (x = y);
此逻辑赋值运算符仅在左侧表达式为 falsy 值(虚值) 时才赋值。Falsy 值(虚值)与 null 有所不同,因为 falsy 值(虚值)可以是任何一种值:undefined,null,空字符串 (双引号 ""、单引号’’、反引号 ``),NaN,0。IE 浏览器中的 document.all,也算是一个。 |
- x ||= y 等价于 x || x = y
-
- // 举例如下:
- document.getElementById('search').innerHTML ||= 'No posts found matching this search.'
- 等价于:
- document.getElementById('search').innerHTML ||
- document.getElementById('search').innerHTML = 'No posts found matching this search.'
此逻辑赋值运算符仅在左侧为真时才赋值 |
x &&= y 等价于 x && (x = y)