Javascript 断言属性是不可配置的

Javascript 断言属性是不可配置的,javascript,object,properties,assert,Javascript,Object,Properties,Assert,给定一个对象obj,如何断言其属性prop是不可配置的 首先,我想我可以使用getOwnPropertyDescriptor: if(Object.getOwnPropertyDescriptor(obj,prop).configurable) 抛出错误(“属性是可配置的”); 但这并不是万无一失的,因为它可以被修改: var getDescr=Object.getOwnPropertyDescriptor; Object.getOwnPropertyDescriptor=函数(){ var

给定一个对象
obj
,如何断言其属性
prop
是不可配置的

首先,我想我可以使用
getOwnPropertyDescriptor

if(Object.getOwnPropertyDescriptor(obj,prop).configurable)
抛出错误(“属性是可配置的”);
但这并不是万无一失的,因为它可以被修改:

var getDescr=Object.getOwnPropertyDescriptor;
Object.getOwnPropertyDescriptor=函数(){
var ret=getDescr.apply(这是参数);
ret.configurable=false;
返回ret;
};

有一个简单的方法吗?

假设
obj
是一个(这可能不可靠,请参见),您可以使用

delete
与对象属性一起使用时,它返回调用内部方法的结果

如果属性是可配置的,[[Delete]]将返回
true
。否则,它将在严格模式下抛出
TypeError
,或在非严格模式下返回
false

因此,要断言
prop
是不可配置的

  • 在非严格模式下:

    功能资产不可配置(obj、prop){
    如果(删除对象[prop])
    抛出错误(“属性是可配置的”);
    }
    
  • 在严格模式下:

    功能资产不可配置(obj、prop){
    "严格使用",;
    试一试{
    删除obj[prop];
    }捕捉(错误){
    返回;
    }
    抛出错误(“属性是可配置的”);
    }
    
当然,如果属性是可配置的,它将被删除。因此,您可以使用它来断言,但不能检查它是否可配置