以前,我就晓得delete只能够删除隐性属性(就是没有进行声明的变量),但是不知道为什么这样?

隐性属性:在页面中以前没有声明过该变量,直接进行赋值的 str='hongda'

其实这是由属性的特性决定的。

属性的特性

所有的属性(property) 都可以有很多特性(attributes)。

  1. {ReadOnly}——忽略向属性赋值的写操作尝,但只读属性可以由宿主环境行为改变——也就是说不是“恒定值” ;
  2. {DontEnum}——属性不能被for..in循环枚举
  3. {DontDelete}——糊了delete操作符的行为被忽略(即删不掉);
  4. {Internal}——内部属性,没有名字(仅在实现层面使用),ECMAScript里无法访问这样的属性。

注意,在ES5里{ReadOnly},{DontEnum}和{DontDelete}被重新命名为[[Writable]],[[Enumerable]]和[[Configurable]],可以手工通过Object.defineProperty或类似的方法来管理这些属性。

代码:

  1. var foo = {};
  2.  
  3. Object.defineProperty(foo, "x", {
  4. value: ,
  5. writable: true, // 即{ReadOnly} = false
  6. enumerable: false, // 即{DontEnum} = true
  7. configurable: true // 即{DontDelete} = false
  8. });
  9.  
  10. console.log(foo.x); //
  11. console.dir(foo.x);
  12.  
  13. // 通过descriptor获取特性集attributes
  14. var desc = Object.getOwnPropertyDescriptor(foo, "x");
  15. console.dir(desc);
  16.  
  17. console.log(delete foo.x);
  18. console.log(foo.x);
  19.  
  20. foo.y = ;
  21. console.log(foo.y);
  22. console.log(delete foo.y);
  23. console.log(foo.y);

  1. var foo = {};
  2.  
  3. Object.defineProperty(foo, "x", {
  4. value: ,
  5. writable: true, // 即{ReadOnly} = false
  6. enumerable: false, // 即{DontEnum} = true
  7. configurable: false // 即{DontDelete} = true
  8. });
  9.  
  10. console.log(foo.x); //
  11. console.dir(foo.x);
  12.  
  13. // 通过descriptor获取特性集attributes
  14. var desc = Object.getOwnPropertyDescriptor(foo, "x");
  15. console.dir(desc);
  16.  
  17. console.log(delete foo.x);
  18. console.log(foo.x);

能不能删是有configurable决定的,也就是DontDelete,注意它们是相反的

foo.y=30是,y默认的configurable为true,所以可以删除。

  1. <script type="text/javascript" >
  2. var foo = {};
  3. foo.y = ;
  4. var desc = Object.getOwnPropertyDescriptor(foo, "y");
  5. console.dir(desc);
  6. </script>

在eval中处理声明变量时所有的变量都默认configurable为true,即都是可以删除的

所有在firebug控制台中的调试文本似乎是以 Eval code 来编译和执行的,而不是在全局或函数代码中执行。

所以在firebug控制台中声明的变量也是可以删除的。

http://www.cnblogs.com/TomXu/archive/2012/02/06/2330609.html

http://www.cnblogs.com/aaronjs/articles/3148934.html

JavaScript:Delete属性的更多相关文章

  1. javascript delete方法

    学习delete可以参考下面两个博客,写的都很好,本文大部分参考与以下两个博客 http://www.cnblogs.com/windows7/archive/2010/03/28/1698387.h ...

  2. JavaScript:属性的操作

    一.属性的设置和获取 1.属性的设置和获取主要有两种方式: <!DOCTYPE html> <html lang="en"> <head> &l ...

  3. JavaScript 对象属性

    JavaScript 对象属性 属性中的 . 和 [ ](点 和 方括号)的区别 .  :取对象自身的属性值: [ ]:括号内容可以是变量: var obj = {}; obj.name = 'Twx ...

  4. JavaScript document属性和方法

    JavaScript document属性和方法 --------------------------------------------属性: 1. Attributes     存储节点的属性列表 ...

  5. JavaScript 全局属性/函数

    JavaScript 全局 JavaScript 全局属性和方法可用于创建Javascript对象. JavaScript 全局属性 属性 描述 Infinity 代表正的无穷大的数值. NaN 指示 ...

  6. 删除要被替换的元素的所有事件处理 程序和 JavaScript 对象属性

    使用本节介绍的方法替换子节点可能会导致浏览器的内存占用问题,尤其是在 IE 中,问题更加明显.在删除带有事件处理程序或引用了其他 JavaScript 对象子树时,就有可能导致内存占用问题.假设 某个 ...

  7. Javascript对象属性与方法汇总

    Javascript对象属性与方法汇总 发布时间:2015-03-06 编辑:www.jquerycn.cn 详细介绍下,javascript对象属性与对象方法的相关知识,包括javascript字符 ...

  8. Javascript delete 引用类型对象

    很少使用javascript的delete,最近因为一个小bug发现删除引用类型对象的时候有一点不同.如下面例子: var testVar = { a : { test : 1 } }, test1 ...

  9. javascript 节点属性详解

    javascript 节点属性详解 根据 DOM,html 文档中的每个成分都是一个节点 DOM 是这样规定的:整个文档是一个文档节点每个 html 标签是一个元素节点包含在于 html 元素中的文本 ...

随机推荐

  1. King's Quest---poj1904(连通图缩点)

    题目链接:http://poj.org/problem?id=1904 题意:国王有n个儿子,每个儿子喜欢ki个女孩,国王想让王子与他喜欢的人结婚,就让巫师做一个列表出来,但是国王想知道王子能和哪些女 ...

  2. BZOJ5056 OI游戏 最短路+组合数学

    链接接接接接! 正解:最短路+小学奥数 乘法原理 解题报告: 首先读懂题意(,,,我觉得我吃枣死于语文太差读不懂题目QAQ 大意就是港,要求从第一个点到其他各点的长度都是最短的方案有多少个(ummm, ...

  3. tomcatserver解析(五)-- Poller

    在前面的分析中介绍过,Acceptor的作用是控制与tomcat建立连接的数量,但Acceptor仅仅负责建立连接.socket内容的读写是通过Poller来实现的.   Poller使用java n ...

  4. dp训练

    根据这位大佬的https://www.cnblogs.com/Bunnycxk/p/7360183.html 题目链接:https://www.luogu.org/problemnew/show/P3 ...

  5. 7.12 Models -- Frequently Asked Questions

    一.Should I use a query or a filter to seach records?我应该使用一个查询或者过滤器来搜索记录吗? 这取决于你想要搜索多少reocrds并且它们是否被加 ...

  6. thinkphp 隐藏表单验证原理

    function savetoken() //创建session('hash') ,然后在魔板中表单中加入隐藏域 getsession('hash'),提交表单验证值是否一样,如果一样验证通过,同时重 ...

  7. C/S模型之TCP协议

    服务端: // WSASever.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <WinSock2.h> # ...

  8. loadrunner:HTTP接口脚本实例

    Action() { lr_rendezvous("getAppHomeModulesList"); lr_start_transaction("getAppHomeMo ...

  9. python 文件不存在时才能写入,读写模式xt

    想向一个文件中写入数据,但是前提必须是这个文件在文件系统上不存在.也就是不允许覆盖已存在的文件内容. 可以在open() 函数中使用x 模式来代替w 模式的方法来解决这个问题.比如: >> ...

  10. Git本地仓库与远程github同步的时候提示fatal: remote origin already exists 错误解决办法

    Git本地仓库与远程github同步的时候提示fatal: remote origin already exists 错误解决办法 1.git在本地的电脑创建了仓库,要远程同步github的仓库.使用 ...