js中删除数组或对象

JavaScript017

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

一般删除某个obj的属性话,那么可以通过delete删除obj.xx,但是无法删除原型链prototype上的属性和方法,当然var的也无法删除。

现在有某个时间插件,需要点击切换类型,由于是new obj生成的开始和结束时间组件,切换会导致选择具体时间时重复弹出,算是一个不具有代表性的问题解决。

基本实现的流程是,点击时间类型,独立初始化2个new obj时间组件。但由于需要额外切换时间类型,页面的时间组件需要重新实例化,这就产生了点击n次弹出n次的情况。

由于是内存中生成的new实例没有及时回收销毁,后面生成的重复叠加。思考下次点击的时候能否提前取消掉前次生成的new obj?

1.常规的null,delete都不适用当前情况,而js是运行在内存当中,只有刷新的时候才会丢失,变相能解决问题。判断xx=new obj,xx不为undefined的时候window.location.reload()刷新页面。测试。测试虽然的确可以解决问题,但是体验不会很好。尽管在点击时间类型前刷新页面,也符合清空重置的目标,但是体验不良好,暂作为下策。

2.既然刷新的本质是dom元素的重新渲染,那么通过局部的dom元素更新能否解决问题呢?

通过先移除元素再添加渲染到页面去。通过$('xx').html($("demo").prop("outerHTML"))把demo元素重新渲染一遍。发现的确可以解决当前少见的重复渲染问题。当前的问题是由于插件某方面的引起问题,基本的价值在于了解页面dom页面的渲染和js运行的基本流程,仅供熟悉参考。

var arr = new Array(0,1,2,3,4)  

 // 删除从2开始的两个元素,位置从0开始  

 // 返回移除元素的数组  

var reArr = arr.splice(2,2)