js中删除数组或对象

JavaScript013

js中删除数组或对象,第1张

在vue中使用

vue.delete()

删除对象属性

通过delete操作符, 可以实现对对象属性的删除操作, 返回值是布尔

例:      var obj={name: 'zhagnsan',age: 19 }

            delete obj.name //true

            typeof obj.name //undefined

同样可用于函数,数组,变量,对象,但对象不能删除,只能做到删除对象属性

删除变量

例: var name ='zs' //已声明的变量

        delete name  //false

        console.log(typeof name)  //String

        age = 19  //未声明的变量

        delete age //true

        typeof age //undefined

        this.val = 'fds'  //window下的变量

        delete this.val   //true

        console.log(typeof this.val)  //undefined

删除数组

以声明数组返回false,未声明返回true

var arr = ['1','2','3'] ///已声明的数组

delete arr //false

console.log(typeof arr)  //object

arr = ['1','2','3']  //未声明的数组

delete arr  //true

console.log(typeof arr)  //undefined

var arr = ['1','2','3']  //已声明的数组

delete arr[1]  //true

console.log(arr)  //['1','empty','3']

删除函数

var fn = function(){} //已声明的函数

delete fn //false

console.log(typeof fn)  //function

fn = function(){}  //未声明的函数

delete fn //true

console.log(typeof fn)  //undefined

删除对象

var person = {

  height: 180,

  long: 180,

  weight: 180,

  hobby: {

    ball: 'good',

    music: 'nice'

  }

}

delete person  ///false

console.log(typeof person)  //object

var person = {

  height: 180,

  long: 180,

  weight: 180,

  hobby: {

    ball: 'good',

    music: 'nice'

  }

}

delete person.hobby  ///true

console.log(typeof person.hobby)  //undefined

首先,<code>delete</code>删除成功返回<code>true</code>,失败返回<code>false</code>。

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

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

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

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

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

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

深入理解JS的delete

第一种方法是比较彻底的,使用delete删除之后,JS的垃圾处理机制会自动将无指向的函数占用空间删除。

同时 delete删除之后的一个对象,会连同名称一起,在这个对象中被删除清空。

而a.show=null,只不过是将这个对象的一个名为show的键值给赋予了一个null的数据,虽然占用空间会急剧缩小,但这个键值还是存在于这个对象中的。

至于没有了指向的function(){alert()}这个函数,会被垃圾回收机制消除掉,释放内存空间。