Javascript:检查某些东西是否可以添加_added_属性

标签 javascript properties

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

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

例如,如果我有这段代码:

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

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

例如,我知道 object 可以有属性而 undefined 不能,但我不热衷于创建一个可能不够用的已知事物列表将来。 instanceof object 这样的东西就足够了吗?

最佳答案

没有属性的值列表非常短: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);

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

关于Javascript:检查某些东西是否可以添加_added_属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56614515/

相关文章:

javascript - Titanium - ScrollView 中的文本区域

iphone - UIButton.layer.cornerRadius 不存在?

java - Spring 属性文件

Python 用列表装饰属性 setter

python - 谷歌应用程序引擎上 TextProperty 的最大大小是多少

ios - 我写了一个 iOS 应用程序,它完全不使用任何变量,总是使用属性。那是对的?

javascript - 使用 jQuery 进行 RSS 时多个帖子不可见

javascript - 按 T​​ab 或 Enter 时如何在自动完成中添加值?

javascript - 我的 Cordova 应用程序会被拒绝吗?从 json 响应加载外部数据

javascript - 如何在 Kendo UI Scheduler 控件中捕获空单元格单击事件