js es6 delete
前言
首先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的更多相关文章
- js es6 map 与 原生对象区别
区别 object和Map存储的都是键值对组合.但是: object的键的类型是 字符串: map的键的类型是 可以是任意类型: 另外注意,object获取键值使用Object.keys(返回数组): ...
- 原生JS:delete、in、typeof、instanceof、void详解
delete.in.typeof.instanceof.void详解 本文参考MDN做的详细整理,方便大家参考[MDN](https://developer.mozilla.org/zh-CN/doc ...
- js ES6 Set和Map数据结构详解
这篇文章主要介绍了ES6学习笔记之Set和Map数据结构,结合实例形式详细分析了ECMAScript中基本数据结构Set和Map的常用属性与方法的功能.用法及相关注意事项,需要的朋友可以参考下 本 ...
- js ES6 多行字符串 连接字符串
1. 以前,js多行字符串用\n写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用` ... `表示: 旧版写法 alert("你好,\n 我叫\n Olive" ...
- 2019.7月-前端面试总结(H5+C3+JS+ES6+Vue+浏览器)
第二次面试 HTML HTML5中的新标签,举例一下 canvas绘画,本地离线存储localStorage,sessionStorage,video和audio元素,语义化元素,表单类型(date, ...
- JS的 delete操作符 删除对象属性
JS如何删除对象中的某一属性 var obj={ name: 'zhagnsan', age: 19 } delete obj.name //true typeof obj.name //undefi ...
- JS&ES6学习笔记(持续更新)
ES6学习笔记(2019.7.29) 目录 ES6学习笔记(2019.7.29) let和const let let 基本用法 let 不存在变量提升 暂时性死区 不允许重复声明 块级作用域 级作用域 ...
- 深入理解JS的delete
原文链接: Understanding delete原文作者: Kangax原文日期: 2010年01月10日 翻译日期: 2014年02月07日 翻译人员: 铁锚 !!!!!!!!草稿版本的翻译完成 ...
- JS中delete删除对象属性
1.删除对象属性 function fun(){ this.name = 'mm'; } var obj = new fun(); console.log(obj.name);//mm ...
- js/es6 元素拖动
元素事件:鼠标按下事件/鼠标移动事件/鼠标松开事件 元素样式:让元素脱离文档流,采用绝对定位的方式. 一.鼠标按下事件 当鼠标在元素上面按下时,保存元素的初始偏移量和鼠标按下时的坐标,然后在状态变量里 ...
随机推荐
- Acwing第132场周赛
AcWing 5366. 大小写转换 签到题,可以用stl里面的tolower函数 #include <bits/stdc++.h> #define ls p<<1 #defi ...
- WPF --- 触摸屏下的两个问题
引言 本片文章分享一下之前遇到的WPF应用在触摸屏下使用时的两个问题. 场景 具体场景就是一个配置界面, ScrollViewer 中包含一个StackPanel 然后纵向堆叠,已滚动的方式查看,然后 ...
- XAF Blazor 中使用 Blazor 组件
前言 文章的标题是不是感觉有点奇怪,但实际我们在XAFBlazor中使用Blazor组件是很繁琐的,我们需要将Blazor组件封装成属性编辑器(PropertyEditor),再用非持久化对象(Non ...
- centos解决 pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
一.下载 openssl 编译安装 openssl 官方下载地址:https://www.openssl.org/source/ wget https://github.com/openssl/ope ...
- 深入浅出Java多线程(十一):AQS
引言 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第十一篇内容:AQS(AbstractQueuedSynchronizer).大家觉得有用请点赞,喜欢请关注!秀才在此谢 ...
- Proxmark3入门指南
Proxmark3笔记 --Proxmark3完全入门指南 写在前面 这里所有针对扇区.区块的计数都是从0开始算 一些需要知道的知识 为了能看懂笔记,需要能回答以下问题 ID卡和IC卡主要的区别是什么 ...
- Apollo3-Blue-MCU芯片典型硬件电路解析
一 芯片简介 1.简介 Apollo3 Blue Wireless SoC是一款超低功耗无线mcu芯片,它的运行功耗降至6μA/ MHz以下.该器件采用ARM Cortex M4F内核,运行频率高达9 ...
- c 的头文件标准格式
前记: C语言的头文件是嵌入式系统中常用的,也是很多人没有注意的,但是写的很差的,这里给出一个经典的模板,仅供参考. 正文: 经典的格式: /***************************** ...
- Typora自定义主题详解--打造自己的专属样式
你真的会使用Typora吗? 欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章, 关注回复「主题」, 获取大师使用的typora主题: http://www.javaman.cn/ ...
- Github账号开启账号双重验证
原文: Github开启双重验证 - Stars-One的杂货小窝 今天在浏览开源项目的时候,突然Github有个提示我要在9月18日前开启双重验证,说是不完成的话,到时候的Github账号会受到限制 ...