发布网友 发布时间:2022-04-29 19:07
共5个回答
懂视网 时间:2022-05-15 10:26
对于数据属性,可以取得:configurable,enumberable,writable和value;
对于访问器属性,可以取得:configurable,enumberable,get和set。
由此我们可知:一个变量或属性是否可以被删除,是由其内部属性Configurable进行控制的,若Configurable为true,则该变量或属性可以被删除,否则不能被删除。
可是我们应该怎么获取这个Configurable值呢,总不能用delete试试能不能删除吧。有办法滴!!
ES5为我们提供了Object.getOwnPropertyDescriptor(object, property)来获取内部属性。
如:
var person = {name:'wenzi'};var desp = Object.getOwnPropertyDescriptor(person, 'name'); // person中的name属性console.log( desp ); // {value: "wenzi", writable: true, enumerable: true, configurable: true}
通过Object.getOwnPropertyDescriptor(object, property)我们能够获取到4个内部属性,configurable控制着变量或属性是否可被删除。这个例子中,person.name的configurable是true,则说明是可以被删除的:
console.log( person.name ); // wenziconsole.log( delete person.name ); // true,删除成功console.log( person.name ); // undefined
我们再回到最开始的那个面试题:
a = 1;var desp = Object.getOwnPropertyDescriptor(window, 'a');console.log( desp.configurable ); // true,可以删除var b = 2;var desp = Object.getOwnPropertyDescriptor(window, 'b');console.log( desp.configurable ); // false,不能删除
跟我们使用delete操作删除变量时产生的结果是一样的。
相关推荐:
JavaScript delete操作符应用实例_javascript技巧
热心网友 时间:2022-05-15 07:34
是关键字. 用于删除对象的属性.语法:
delete object.property
delete object['property']
delete 操作符会从某个对象上移除指定属性。成功删除的时候回返回 true,否则返回 false。但是,重要的是要考虑以下情况:
如果你删除的属性在对象上不存在,那么delete将不会起作用,但仍会返回true
如果 delete 操作符删除成功,则被删除的属性将从所属的对象上彻底消失。然后,如果该对象的原型链上有一个同名属性,则该对象会从原型链上继承该同名属性。(也就是说delete操作只会在自身的属性上起作用)
任何使用 var 声明的属性不能从全局作用域或函数的作用域中删除。
这样的话,delete操作不能删除任何在全局作用域中的函数(无论这个函数是来自于函数声明或函数表达式)
除了在全局作用域中的函数不能被删除,在对象(object)中的函数是能够用delete操作删除的。
任何用let或const声明的属性不能够从它被声明的作用域中删除。
不可设置的(Non-configurable)属性不能被移除。这意味着像Math, Array, Object内置对象的属性以及使用Object.defineProperty()方法设置为不可设置的属性不能被删除。
var Employee = {
热心网友 时间:2022-05-15 08:52
是热心网友 时间:2022-05-15 10:27
不是热心网友 时间:2022-05-15 14:26
是啊 你没有用过么?delete