编辑:更清楚的是需要确定我是否可以添加属性到一个值,而不是一个值是否可以拥有它自己的属性。
有没有办法检查是否可以添加属性到值
?
例如,如果我有这段代码:
function test( value ) {
// return true if it is possible to add properties to value
}
除了实际添加属性 value
进行测试之外,是否有可靠的方法来推断 value
是否可以添加属性?
例如,我知道 object
可以有属性而 undefined
不能,但我不热衷于创建一个可能不够用的已知事物列表将来。 instanceof object
这样的东西就足够了吗?
最佳答案
没有属性的值列表非常短:undefined
和 null
。对这些进行测试应该很简单(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/