ES10 新增了一种变量定义语法:let
和 const
支持在块级作用域之内使用 {}+
运算符定义变量。这种语法称为“可选链式语法”。
什么是“可选链式语法”?
在 ES10 之前,我们定义变量时通常采用以下语法:
let myVariable = myObject.myProperty;
如果 myObject
为 null
或 undefined
,那么该语句会抛出一个类型错误。为了避免这种错误,我们通常会添加一些条件代码进行判断:
let myVariable; if (myObject) { myVariable = myObject.myProperty; }
这种代码比较冗长,而且容易出错。ES10 新引入的可选链式语法就是为了解决这个问题。
使用可选链式语法,上述代码可以简化为:
let myVariable = myObject?.myProperty;
如果 myObject
为 null
或 undefined
,则 myVariable
的值为 undefined
,而不是抛出类型错误。
如何使用可选链式语法?
可选链式语法支持在任何标识符后面添加一个问号 ?
,表示如果该标识符的值为 null
或 undefined
,则后面的属性访问不执行,并返回 undefined
。
例如:
let myVariable = myObject?.myProperty?.myMethod();
上述代码中,如果 myObject
或者 myObject.myProperty
的值为 null
或 undefined
,则 myMethod
方法不会执行,myVariable
的值为 undefined
。
同时,可选链式语法也支持访问数组元素:
let myVariable = myArray?.[1]?.[2]?.[3];
上述代码中,如果 myArray
或者 myArray[1]
或者 myArray[1][2]
的值为 null
或 undefined
,则 myVariable
的值为 undefined
。
可选链式语法的兼容性
可选链式语法是 ES10 新增的语法,目前还不被所有浏览器支持。不过可以通过 polyfill 或者 Babel 转换来实现兼容。
示例代码
下面是一个简单的可选链式语法示例:
-- -------------------- ---- ------- --- ------ - - ----- ------- ---- --- ---- - ------ ------------ ------- ----- - - ------------------------------- -- --------- ------------------------------------ -- --------- -------------------------------- -- ---------
结论
可选链式语法是 ES10 新增的语法之一,可以方便地避免因为 null
或 undefined
引起的类型错误。虽然目前不被所有浏览器支持,但通过 polyfill 或者 Babel 转换可以实现兼容。使用可选链式语法可以提高代码的可读性,并降低出错的风险。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67078f5dd91dce0dc86a21c5