属性访问错误
查询不存在对象的属性会报错,如果 . 的左边是 null 或
undefined,则属性访问表达式会失败。因此在写类似
`book.author.sername
这样的表达式时,要确保 book 和
book.author 是有定义的。以下是两种防止这类问题的写法:
1 | surname = book && book.author && book.author.surname |
1 | let surname = book?.author?.surname |
查询不存在对象的属性会报错,如果 . 的左边是 null 或
undefined,则属性访问表达式会失败。因此在写类似
`book.author.sername
这样的表达式时,要确保 book 和
book.author 是有定义的。以下是两种防止这类问题的写法:
1 | surname = book && book.author && book.author.surname |
1 | let surname = book?.author?.surname |
如果想迭代对象的属性,可以使用 for/in 循环,或者基于 Object.keys() 方法的结果使用 for/of :
1 | let o = {x:1, y:2, z:3} |
也可以像下面这样迭代每个键对应的值:
1 | let o = {x:1, y:2, z:3} |
解构赋值,ES6 新增语法,以下是解构赋值的一些示例代码:
1 | let [x,y] = [1,2] |
解构赋值让使用返回数组的函数变得异常便捷:
1 | function toPolar(x, y){ |
遍历一个对象所有属性的名/值对:
指定项目依赖,值为包名加上版本号。
版本号可以指定一个范围,有以下语法。
version
:精确的版本,例如 1.0.0
>version
:大于 version
>=version
:大于等于<version
: 小于<=version
: 小于等于~version
: 允许补丁级别的变化,例如 ~1.2.3
表示 >=1.2.3 <1.3.0
^version
:允许不更改最左侧非0版本号数字的变化,例如
^1.2.3
表示 >=1.2.3 <2.0.0
1.2.x
http://...
*
version1 - version2
等同于
>=version1 <=version2