一、构造器和操作符‘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)