首页 > 解决方案 > Javascript:检查某些东西是否可以为它添加属性

问题描述

编辑:更清楚地表明需要确定我是否可以属性添加到一个值,而不是一个值是否可以拥有自己的属性。

有没有办法检查是否可以向a添加属性value

例如,如果我有以下代码:

function test( value ) {
    // return true if it is possible to add properties to value
}

除了实际添加value要测试的属性之外,是否有可靠的方法来推断是否value可以添加属性?

例如,我知道objectcan 有属性undefined但不能,但我并不热衷于创建一个已知事物的列表,这些已知事物在未来可能不够用。类似的东西instanceof object就足够了吗?

标签: javascriptproperties

解决方案


没有属性的值列表很短:undefinednull. 对这些的测试应该很简单(value == null)。

请注意,所有其他原语都可以具有属性(通过装箱),但是由于装箱的对象会立即丢失,因此向它们添加属性是没有意义的:

 1..test = 1;
 "test".test = 1;
 Infinity.test = 1;
 NaN.test = 1;
 true.test = 1;
 Symbol().test = 1;
 1n.test = 1;

要检查非基元,typeof value === "object"可以使用,但null也是一个对象(一个非常特殊的对象,实际上它算作基元但typeof关于它的谎言),您必须明确检查value !== null.

虽然您通常可以为对象添加属性,但它们可以被冻结,然后添加属性是无用的,这同样适用于代理。

  const obj = {};
  Object.freeze(obj);
  obj.test = 1;
  console.log(obj.test);

由于无法检测到代理,因此无法确定是否可以添加属性。


推荐阅读