这是一种检查属性是否存在的安全方法,否则分配一个属性?

Vis*_* PC 1 javascript properties object

以下是MDN示例的摘录

var d = withValue.d || (
  withValue.d = {
    enumerable: false,
    writable: false,
    configurable: false,
    value: value
  }
);
Run Code Online (Sandbox Code Playgroud)

这是检查属性是否存在的安全方法,否则分配并初始化它?如果没有更好,安全和优化的方式?

Cer*_*nce 5

不,这不安全,因为该属性可能确实存在于对象上但是是假的,在这种情况下,withValue.d ||将失败并进行交替,d尽管该d属性已经存在,但仍将对象分配给该属性.请hasOwnProperty改用,不要将赋值放在需要表达式的位置:

if (!withValue.hasOwnProperty('d')) {
  withValue.d = {
    enumerable: false,
    writable: false,
    configurable: false,
    value: value
  }
}
const { d } = withValue;
Run Code Online (Sandbox Code Playgroud)

如果d属性(如果存在)将始终是一个对象,那么原始代码将起作用,因为对象始终是真实的.(但由于赋值为表达式,代码仍然有些臭)