前言

首先delete 不同于nodejs delete,看下有什么不同。

正文

var test=5;
delete test;
console.log(test);

结果是test没有受到任何影响,依旧可以输出5。

再来一个:

var x={y:{z:5}};
var data=x.y;
console.log(x.y);//输出{z:5}
delete x.y;
console.log(x);//输出{}
console.log(x.y);//输出undef
console.log(data);//输出{z:5}

那么这个时候可以明白其实我们删除的是x与y的联系,y的内存地址其实还在的。

我们知道delete是有返回值的,那么这么来的吧,看下它是否删除成功.

 var test=5;
var flag=delete test;
console.log(flag);

这个时候返回为false,那么它是返回不成功的。

那么得出一个疑问,到底什么可以删除什么不可以删除?

问题探索

猜想:

是否只能删除的是它的属性? 而且必须是自定义的属性?

疑问:上面删除test的时候其实是global的一个属性,那么自定义属性不成立。

那么是否是global之外的自定义属性都可以删除呢?

var arr = [1,3,4,6,73,2];
delete arr[2];
console.log(arr.length); // 6
console.log(arr[2]); //undefiend consoel.log(arr);
//[ 1, 3, , 6, 73, 2 ]

那么可以看到其实删除的真的是内存引用,还是讲指针指向了undefind?

经过前面的案例,其实是将指针指向了undefind,也就是未初始化状态。

这里我们可以看到其实delete对元组和object处理方式是不同的,那么我们

不能当做单一的来处理这一系列问题。

提出疑问:

到底delete 对象的属性的时候是否让该属性置空了还是删除了呢?

看个荔枝:

var test={
k:5
}
var testx=test;
delete test.k;
console.log(test);//{}
console.log(testx);//{}

看见其被删除了,而不是置空了。

再来看下隐式全局变量和显示全局变量:

x=6;
var y=7;
delete x;
delete y;
console.log(y);//7
console.log(x);//undefine

可以删除隐式的声明,不能删除显示的声明。

那么最后看下别人的删除数组的例子:

方式一:

var arr = [1,3,5,21,3,4,53,21,5,2];
arr.forEach(function(val,index){ if(val < 10){ delete arr[index]; } }) console.log(arr); //[ , , , 21, , , 53, 21, , ] //可以使用filter过滤掉空值 [ 21, 53, 21 ];
arr = arr.filter(function(val){return val});

方式二:

for(var i=0;i<arr.length;i++){

    if(arr[i] < 10){

        arr.splice(i,1);
i--;
}
})
console.log(arr);// [ 3, 21, 4, 53, 21, 2 ]

可以想象一下,其实方式一的效率更高,因为其不用每一次都去创建一个新的数组。

js es6 delete的更多相关文章

  1. js es6 map 与 原生对象区别

    区别 object和Map存储的都是键值对组合.但是: object的键的类型是 字符串: map的键的类型是 可以是任意类型: 另外注意,object获取键值使用Object.keys(返回数组): ...

  2. 原生JS:delete、in、typeof、instanceof、void详解

    delete.in.typeof.instanceof.void详解 本文参考MDN做的详细整理,方便大家参考[MDN](https://developer.mozilla.org/zh-CN/doc ...

  3. js ES6 Set和Map数据结构详解

    这篇文章主要介绍了ES6学习笔记之Set和Map数据结构,结合实例形式详细分析了ECMAScript中基本数据结构Set和Map的常用属性与方法的功能.用法及相关注意事项,需要的朋友可以参考下   本 ...

  4. js ES6 多行字符串 连接字符串

    1. 以前,js多行字符串用\n写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用` ... `表示: 旧版写法 alert("你好,\n 我叫\n Olive" ...

  5. 2019.7月-前端面试总结(H5+C3+JS+ES6+Vue+浏览器)

    第二次面试 HTML HTML5中的新标签,举例一下 canvas绘画,本地离线存储localStorage,sessionStorage,video和audio元素,语义化元素,表单类型(date, ...

  6. JS的 delete操作符 删除对象属性

    JS如何删除对象中的某一属性 var obj={ name: 'zhagnsan', age: 19 } delete obj.name //true typeof obj.name //undefi ...

  7. JS&ES6学习笔记(持续更新)

    ES6学习笔记(2019.7.29) 目录 ES6学习笔记(2019.7.29) let和const let let 基本用法 let 不存在变量提升 暂时性死区 不允许重复声明 块级作用域 级作用域 ...

  8. 深入理解JS的delete

    原文链接: Understanding delete原文作者: Kangax原文日期: 2010年01月10日 翻译日期: 2014年02月07日 翻译人员: 铁锚 !!!!!!!!草稿版本的翻译完成 ...

  9. JS中delete删除对象属性

    1.删除对象属性 function fun(){   this.name = 'mm';   }   var obj = new fun();   console.log(obj.name);//mm ...

  10. js/es6 元素拖动

    元素事件:鼠标按下事件/鼠标移动事件/鼠标松开事件 元素样式:让元素脱离文档流,采用绝对定位的方式. 一.鼠标按下事件 当鼠标在元素上面按下时,保存元素的初始偏移量和鼠标按下时的坐标,然后在状态变量里 ...

随机推荐

  1. kafka的简单架构

    定义 Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue) , 主要应用于大数据实时处理领域. 1) Producer : 消息生产者,就是向 kafka broker ...

  2. websocket服务器的创建

    就这上篇文章的代码,我们会继续实现以下websocket的协议. 为什么要使用websocket呢? 它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平 ...

  3. 海量数据去重的Hash与BloomFilter

    今天我们谈论一下散列表,我之前的两个博文写的都是关于平衡二叉树的 平衡二叉树 增删改查时间复杂度为log2n 平衡的目的是增删改以后,保证下次搜索能稳定排除一半的数据: 总结:通过比较保证有序,通过每 ...

  4. day06-Java流程控制

    Java流程控制 1.用户交互Scanner java.util.Scanner是Java5的新特征,我们可以通过Scannner类来获取用户的输入. 基本语法: Scanner s = new Sc ...

  5. 数与计算机 (编码、原码、反码、补码、移码、IEEE 754、定点数、浮点数)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  6. Spring Boot学习日记10

    今天学习了多环境切换profile 精髓 1.SpringBoot启动会加载大量的自动配置类 2.我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中: 3.我们再来看这个自动配置 ...

  7. Android保存多张图片到本地

    目录介绍 01.实际开发保存图片遇到的问题 02.直接用http请求图片并保存本地 03.用glide下载图片保存本地 04.如何实现连续保存多张图片 05.关于其他介绍 好消息 博客笔记大汇总[16 ...

  8. 新零售SaaS架构:线上商城系统架构设计

    零售商家为什么要建设线上商城? 传统的实体门店服务范围有限,只能吸引周边500米以内的消费者.因此,如何拓展服务范围,吸引更多的消费者到店,成为了店家迫切需要解决的问题. 缺乏忠实顾客,客户基础不稳, ...

  9. 记录--没有await,如何处理“回调地狱”

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 太长不看 不要嵌套使用函数.给每个函数命名并把他们放在你代码的顶层 利用函数提升.先使用后声明. 处理每一个异常 编写可以复用的函数,并把 ...

  10. 记录--手写$forceUpdate,vm.$destroy方法

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 vm.$forceUpdate (1)作用 迫使Vue.js实例重新渲染.注意它仅仅影响实例本身以及插入插槽内容的子组件,而不是所有子组件 ...