一、构造器和操作符‘new’
构造函数:
- 命名以大写字母开头。
- 只能由
"new"
操作符来执行。
当一个函数被使用 new
操作符执行时,它按照以下步骤:
- 一个新的空对象被创建并分配给
this
。 - 函数体执行。通常它会修改
this
,为其添加新的属性。 - 返回
this
的值。
如果“new”函数有return语句,那么带有对象的 return
返回该对象,在所有其他情况下返回 this
。
主要目的 —— 实现可重用的对象创建代码。
二、可选链‘?.’
一种访问嵌套对象属性的安全的方式。即使中间的属性不存在,也不会出现错误。
如果可选链 ?.
前面的值为 undefined
或者 null
,它会停止运算并返回 undefined
。
例如 value?.prop
:
- 如果
value
存在,则结果与value.prop
相同, - 否则(当
value
为undefined/null
时)则返回undefined
。
?.
语法使其前面的值成为可选值,但不会对其后面的起作用。
变体:?.() ?.[]
user.
admin?.()
?.()
用于调用一个可能不存在的函数。
user?.
[
key]
?.[ ]允许从一个可能不存在的对象上安全地读取属性
三、symbol类型
可以使用 Symbol()
来创建这种类型的值
let
id =
Symbol
("id"
)
;
id 是描述为 "id" 的 symbol(一种数据)
即使我们创建了许多具有相同描述的 symbol,它们的值也是不同。
symbol 允许我们创建对象的“隐藏”属性,代码的任何其他部分都不能意外访问或重写这些属性。
如果我们要在对象 {...}
中使用 symbol,则需要使用方括号把它括起来。
[
id]
:
123
// 而不是 "id":123
symbol 属性不参与 for..in
循环。
Object.assign() 可以实现复制对象中的Symbol
全局 symbol 注册表。可以在其中创建 symbol 并在稍后访问它们,它可以确保每次访问相同名字的 symbol 时,返回的都是相同的 symbol。
要从注册表中读取(不存在则创建)symbol,使用 Symbol.for(key)
。
可以使用 Symbol.keyFor(sym),
返回一个symbol名字
同(sym
.description)