`
skying8603
  • 浏览: 36712 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

javascript之delete的用法

阅读更多
在实际的Javascript中,delete o.x之后,Object对象会由于失去了引用而被垃圾回收,所以delete o.x也就“相当于”删除了o.x所指向的对象,但这个动作并不是ECMAScript标准,也就是说,即使某个实现完全不删除Object对象,也不算是违反ECMAScript标准。
1、js里的delete是指删除属性而不是删除对象
var o = {};
var a = { x: 10 };
o.a = a;
delete o.a;    // o.a属性被删除
o.a;           // undefined
a.x;           // 10, 因为{ x: 10 } 对象依然被 a 引用,所以不会被回收

2、并不是所有的属性都能被delete,prototype中声明的属性就无法被delete以及var定义的属性也无法被删除
function D(){this.x=42}
D.prototype.x = 12; 
function aa(){
 var o = new D(); 
 alert(o.x);
 delete o.x; 
 alert(o.x);
}

调用  aa()方法,会依次打印42  12
3、通过function声明的函数都无法被删除,但在一个函数中定义一个作为该函数的属性函数则可以被删除
function C() {
   this.B = function(){return 12;}
   delete this.B;
 }
function A(){
   return 13;
}
function E() { 
   this.B = function(){return 14;}
}

function bb(){
   var o = new C(); 
   alert(o.B);
   var e = new E(); 
   alert(e.B());
   delete A;
   alert(A());
}
 调用bb()方法,会依次打印undefined  14   13

4、但是有一点例外,就是通过 eval 执行的代码中,通过var声明的变量虽然与正常的var声明变量同属于Global对象,但它们不具有DontDelete特性,能被删除
   eval("var x = 36;");
   x;     // 42
   delete x;
   x;     // undefined

5、但是这也有一点例外,eval的代码中的函数内通过var定义的变量具有DontDelete,不能被删除。
eval("(function() { var x = 42; delete x; return x; })();");
// 返回 42

6、delete是普通运算符,会返回true或false。规则为:当被delete的对象的属性存在并且拥有DontDelete时返回false,否则返回true。这里的一个特点就是,对象属性不存在时也返回true,所以返回值并非完全等同于删除成功与否
分享到:
评论

相关推荐

    JavaScript Json Create、Select、Delete、Update

    在实际开发中,我们常常会遇到与服务器交互的情况,这时就需要使用到`JSON.stringify()`方法将JavaScript对象转换为JSON字符串,以便发送给服务器;而`JSON.parse()`则用于将接收到的JSON字符串转换回JavaScript对象...

    【JavaScript源代码】vue 中 get delete 传递数组参数方法.docx

    在JavaScript和Vue.js开发中,与后端进行数据交互时,我们经常需要使用HTTP的GET和DELETE方法传递参数。然而,对于数组类型的参数,浏览器在处理URL时会将其转化为键值对的形式,如`name[]=1&name[]=2&name[]=3`,这...

    JavaScript delete 属性的使用

    为了检测一个对象是否在其自身(而不是原型链)上拥有某个属性,可以使用`hasOwnProperty`方法: ```javascript if (a.hasOwnProperty('testMe')) { // 代码块 } ``` `hasOwnProperty`会返回`true`只有当属性是直接...

    解析JavaScript中delete操作符不能删除的对象

    在JavaScript中,`delete`操作符用于删除对象的属性或者变量。然而,并非所有属性或变量都可以使用`delete`操作符删除。以下是关于JavaScript中`delete`操作符不能删除的对象的详细分析: 首先,理解`delete`的工作...

    JavaScript使用delete删除数组元素用法示例【数组长度不变】

    在JavaScript中,如果需要真正地从数组中移除元素并更新数组长度,可以使用以下方法: 1. **`splice()` 方法**:`splice(index, count)`可以从数组中删除指定数量的元素,从给定的索引开始。例如,`a.splice(i, 1)`...

    javascript中的delete使用详解

    在JavaScript中,`delete`运算符常常引起误解。在JavaScript面向对象编程指南中,作者指出一个关于`delete`操作的常见误区,通过一个代码...因此,理解`delete`的限制和正确用法对于编写健壮的JavaScript代码至关重要。

    JavaScript 秘密花园.pdf

    但在ECMAScript5之前的版本中,使用关键字作为属性名(如`delete`)会导致`SyntaxError`,这是因为JavaScript解析器将关键字误识别为其自身的语义作用,而非属性名称。 《JavaScript的秘密花园》不仅是一份详尽的...

    Javascript中的delete介绍

    若要理解delete操作符的正确使用方法及其限制,首先需要对变量实例化、属性特性、可执行代码类型、执行上下文以及变量对象和激活对象有所了解。 首先,关于delete操作符的使用,它通常用于删除对象的属性。比如,当...

    JavaScript

    JavaScript是一种广泛应用于网页和网络应用...这些知识点涵盖了JavaScript的基础语法,包括变量声明、数据类型、函数、注释、数组、事件处理以及对象和方法的使用。了解和掌握这些概念对于编写JavaScript代码至关重要。

    JavaScript delete操作符应用实例

    JavaScript中的`delete`操作符主要用于从对象中删除属性,或者在某些旧的浏览器环境中尝试从数组中删除元素。然而,它的行为并不像C++中的`delete`,后者用于释放内存。在JavaScript中,`delete`不会直接影响到属性...

    javascript闭包的高级使用方法实例

    这段代码创建了一个新对象 `my`,它是 `old` 对象的副本,且具有与之相同的方法。通过这种方式,我们可以实现简单的继承,并在新的对象上修改特定方法。 4. **私有变量与数据封装**: 闭包可以用于创建私有变量,...

    浅析JavaScript中的delete运算符

    例如,试图删除对象原型链上的属性或JavaScript引擎的内置方法,`delete`操作通常会失败: ```javascript delete Array.prototype.push; // 返回false,无法删除 ``` 最后,如果`delete`操作的运算数不是一个属性...

    Actionscript中delete关键字例子

    让我们深入探讨`delete`关键字的使用及其在ActionScript中的工作原理。 首先,`delete`操作符可以用来删除对象的属性。当你创建一个对象并为其添加一些属性后,如果不再需要这些属性,可以使用`delete`来清除它们。...

    JavaScript语言参考手册

    这些对象同时在客户端和服务器端的 JavaScript 中使用。 Array 属性 方法 Boolean 属性 方法 Date 属性 方法 Function 属性 方法 Math 属性 方法 Number 属性 方法 Object 属性 方法 String 属性 方法 RegExp 属性 ...

    纯javascript对数据库操作

    通过HTTP方法(GET, POST, PUT, DELETE等),前端可以通过这些API接口与后端交互,执行对应的操作,如查询(GET)、创建(POST)、更新(PUT)和删除(DELETE)数据库中的数据。 **3. JSON格式** 在前后端交互中,...

    JavaScript_秘密花园

    - **使用`delete`操作符**:删除属性唯一有效的方法是使用`delete`操作符。简单地将属性值设为`undefined`或`null`并不会真正删除属性: ```javascript var obj = { bar: 1, foo: 2, baz: 3 }; obj.bar = ...

    JavaScript与C#通讯

    2. RESTful API:使用HTTP协议中的GET、POST、PUT、DELETE等方法,C#服务器提供RESTful接口,JavaScript通过Ajax请求调用这些接口,实现数据的增删改查。 二、Ajax请求 1. XMLHttpRequest (XHR):JavaScript中使用...

Global site tag (gtag.js) - Google Analytics