JS中的delete操作符

首先,delete删除成功返回true,失败返回false

js代码:

function wxCount ($element) {
    this.init($element);
}

wxCount.prototype = {
    init : function(){...}, //初始化方法
    count : function(){...}, //计算方法
    destroy : function(){
        delete this;
    } //删除方法
}

仔细一看便知,这里的this指向的是function wxCount(),而在javascript中,delete是无法删除一般的变量或者function的,永远都会返回false

example:

<script type="text/javascript">
    x = 1;         // 创建全局属性x
    var y = 2;     // var声明,y为变量
    obj = {
          a : 3,
          b : 4
    };              // 创建全局对象obj,并有a和b两个成员变量

    delete x;       // returns true

    delete y;       // returns false 

    delete Math.PI; // returns false 

    delete obj.a; // returns true
    delete obj.b; // returns true 

    delete obj;   // returns true

    function f() {
          var z = 5;
        var obj2 = {
            c : 6,
              d : 7
        }
        obj3 = {
            e : 8
        }
          delete z;     // returns false
        delete obj2;     // returns false
        delete obj2.c;     // returns true
        delete obj3;     // returns true
    }
</script>

大多数情况下可以理解为:通过变量或者函数声明的属性不能删除。

1.全局属性可以删除

x = 150;
delete x; //return true

function f() {
    obj = {
        a : 2
    }
}
delete obj; //return true

x可以理解为全局对象GLOBAL的一个属性,即GLOBAL.x,可以删除成功。函数中的obj也被置为全局属性,同理。

2.通过var或者function声明的属性不能删除

var x = 150;
delete x; //return fale
function y() {}
delete y; //return false

3.内置的属性不能删除

delete Math.PI //reuturn false
function (param) {
    delete param; //return false
    console.log(param); //1
}(1);

4.原型上的属性

function People(){}
People.prototype.age = 18;
var Perez = new People();
Perez.age = 100;
console.log(Perez.age); //100
delete Perez.age; //return ture
console.log(Perez.age); //18
//返回成功但是并没有什么用,Perez还是会继承原型上的age属性

delete People.prototype.age;
console.log(Perez.age); //undefined

5.删除数组中元素

var ipr = ["zhong","du","sun","an","yuan"];
delete ipr[4];  //return true
console.log(ipr);  //["zhong","du","sun","an"]
console.log(ipr.length);  //5
console.log(4 in ipr);  //false
console.log(ipr[4]);  //undefined

删除数组中元素,数组长度不会发生变化,但是元素实际不存在数组中了。

var ipr = ["zhong","du","sun","an",undefined];
console.log(4 in ipr);  //ture

如果将最后个元素置为undefined,实际还是存在数组中。

关于delete更深的问题和兼容性问题,可以参考
深入理解JS的delete

时间: 2024-08-25 03:03:51

JS中的delete操作符的相关文章

js中的new操作符与Object.create()的作用与区别

js中的new操作符与Object.create()的作用与区别 https://blog.csdn.net/mht1829/article/details/76785231 2017年08月06日 19:19:26 阅读数:1058 一.new 操作符 JavaScript 中 new 的机制实际上和面向类的语言完全不同. 在 JavaScript 中,构造函数只是一些使用 new 操作符时被调用的函数.它们并不会属于某个类,也不会实例化一个类.实际上,它们甚至都不能说是一种特殊的函数类型,它

js中的new操作符

一.js中new操作符来声明一个对象:例如有如下一个实例function Person(){Person.prototype.fn=function(){console.log(1);}}var p=new Person(); 上例中使用new操作符来声明一个对象实际上是进行了三个动作: 1.var p={}; 2.p._proto_=Person.prototype; 3.Person.call(p); 二.以上的三个操作是在使用new操作符创建对象的时候实际执行的动作. 以上为本人对new操

js小知识 delete操作符

说明:delete操作符用于删除对象的某个属性. 语法: delete object.property //删除 对象.属性 delete object['property'] //删除 对象['属性'] 返回值:bool类型,成功删除的时候回返回true,否则返回false. 注意: 如果你删除的属性在对象上不存在,那么delete将不会起作用,但仍会返回true 如果 delete 操作符删除成功,则被删除的属性将从所属的对象上彻底消失.然后,如果该对象的原型链上有一个同名属性,则该对象会从

模拟实现js中的new操作符

能否实现js的new操作符 new new运算符创建了一个用户自定义的对象类型的实例或具有构造函数的内置对象类型之一 定义一个构造函数Student,该函数接收两个参数name和age: function Student(name,age){ this.name=name this.age=age } let first=new Student('dylan','26') console.log(first.name);// dylan console.log(first.age);// 26

js中的delete

delete删除的是构造函数中的属性,不能删除原型对象中的属性 function Foo(){} Foo.prototype.bar = 42; var foo = new Foo(); delete foo.bar; alert(foo.bar); // 42 delete Foo.prototype.bar; // delete it from the prototype Object alert(foo.bar); // undefined

JS中的new操作符原理解析

1 var Person = function(name){ 2 this.name = name; 3 } 4 Person.prototype.sayHello = function() { 5 console.log('hello ' + this.name); 6 } 7 var p1 = new Person('HANMEI'); 8 p1.sayHello(); 1. 创建一个类的实例:创建一个空对象obj,然后把这个空对象的__proto__设置为Person.prototype(

js中操作符 || 和 &amp;&amp;

一.第一部分(引子) 先来介绍一下在js中由其他数据类型转化为boolean时到底是转化成true还是false js中,当以下值转成boolean类型的时候,会被转换成false 0 ""(空串) false undefined null NaN 其余的则会被转化为true 这里顺便说一句,js中将数据转化为boolean类型的方式有 1.Boolean() 2.!! //eg var value = 5; console.log(typeof value);//number con

[转]深入详解javascript之delete操作符

最近重新温习JS,对delete操作符一直处于一知半解的状态,偶然发现一篇文章,对此作了非常细致深入的解释,看完有茅塞顿开的感觉,不敢独享,大致翻译如下. 原文地址:http://perfectionkills.com/understanding-delete/ P.S. 作者是PrototypeJS的开发组成员之一 ========分割线======== 在开始之前,先让我们看一段代码 Js代码     >>> var sum = function(a, b) {return a + 

关于js中的回收机制,通俗版

在前面的几篇文章中,我讲解过了js中的回收机制,但是对于当时的我来说,我自己对回收机制的这个概念也有些懵懵懂懂,现在对回收机制有了更深入的理解,所以特此发布此文给于总结,也好加深记忆. 如果你想学习闭包那么js中的回收机制是必不可少的,当然学习闭包除了需要理解js中的回收机制以外还需要了解其他的概念,我的其他文章有相关的说明,这里不做闭包的讲解. 为什么要有回收机制?why? 打个比方,我有一个内存卡,这个内存是8G的,我把文件,视频,音乐,都保存到了这个内存卡,随着我的储存的内容越来越多,这个