JavaScript中诡异的delete操作符
作者:junjie 发布时间:2024-04-10 16:15:33
标签:JavaScript,delete,操作符
delete这个操作符呢,在javascript中不是很常用,但是他的特性的确很诡异。
1,删除对象的属性,代码:
var o = {
a: 1,
b: 2
};
delete o.a;
alert(o.a); //undefined
那么到底delete删除的是对象的属性还是对象的属性值呢,我开始觉得删除的应该是值,因为结果是undefined,而没有报错。但是事实上,我的看法是错误的,举例说明:
var o = {};
var a = {
pro: "zhenn"
};
o.c = a;
delete o.c; //删除对象o的属性a
console.log(o.c); // undefined
console.log(a.pro); // zhenn
通过上述代码,不难看出在delete o.c之后呢,并没有删除o.c所指向的值,也就是对象a依然存在,否则a.pro应该是过不了编译这关的。说到这里,可以这么理解delete删除对象 的属性,其实相当于删除了对对象中属性值的引用而已,但是这个值依然在对象栈中!
2,对数组的操作,先看代码:
var arr = [1,2,3];
delete arr[2];
console.log(arr.length); // 3
console.log(arr); // [1,2,undefined]
又一次证明了,delete并没有真正删除元素,只是删除了元素所对应的键值。为了更进一步认清delete的本质,和Array中的pop方法比较一下。如下:
var arr = [1,2,3];
arr.pop();
console.log(arr); // [1,2]
console.log(arr.length) // 2
这下应该真相大白了。
3,以上对对象和数组的操作,还很好理解,但是对于变量的操作,难免让人琢磨不透,代码如下:
var a = 1;
delete a;
alert(a); // 1
function fn(){ return 42; }
delete fn;
alert(fn()); // 42
b = 2;
delete b;
alert(b); // b is not defined;
很难解释通啊,同样是全局变量,用var声明的竟然删除不了,而直接声明的变量b竟然可以删除,不能不说delete很诡异了,在ECMA给出的解释中,也仅仅是说通过var声明的变量和通过function声明的函数拥有DontDelete特性,无法被删除。


猜你喜欢
- 几何变换图像的几何变换是指将一幅图像映射到另一幅图像内。有缩放、翻转、仿射变换、透视、重映射等操作。1 缩放使用cv2.resize()函数
- 如果你学过操作系统,那么对于锁应该不陌生。锁的含义是线程锁,可以用来指定某一个逻辑或者是资源同一时刻只能有一个线程访问。这个很好理解,就好像
- 我有两个继承一个基类的Django模型:- Request- Inquiry- Analysis请求有两个外键到内置用户模型。create_
- ERROR 1819 (HY000): Your password does not satisfy the current policy
- 我们都知道在9i之前,要想获得建表和索引的语句是一件很麻烦的事。我们可以通过export with rows=no来得到,但它的输出因为格式
- SQL Server 2005附加数据库文件时出现了Read-Only错误,附加的时候,系统提示mdf文件为只读,可是打开文件属性,这个属性
- 本文实例讲述了Python单例模式的使用方法。分享给大家供大家参考。具体如下:方法一import threading  
- 前言在程序中我们经常可以看到有很多的加密算法,比如说MD5 sha1等,今天我们就来了解下这下加密算法的吧,在了解之前我们需要知道一个模块嘛
- 之前写了一个matlab的,越用越觉得麻烦,如果不同数据集要改类别数目,而且运行速度慢。所以重新写了一个Python的,直接读取xml文件夹
- 概况Vue3 里要实现数据的响应式监听一共有两种方式既:ref 和 reactive他们既有区别又有联系。ref()ref数据响应式监听。r
- Python中的字典由于是对象的集合属于复合数据类型,类似于列表。定义字典字典是 Python 对数据结构的实现,通常称为关联数组。字典由键
- 一、所需库安装pip install PyAudiopip install SpeechRecognitionpip install bai
- 作为站长而言,有时候我们可能会碰到更换服务器或者为网站做一个整体布局修改和升级,我们首先需要做的就是对数据库和整个wordpress网站的
- 本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件的名称,从另一个文件夹中找到与这一文件夹中文件同名
- def getFibonacci(num): res=[0,1] a=0 b=1 for x in
- 一、Python安装Window系统下,python的安装很简单。访问python.org/download,下载最新版本,安装过程与其他w
- 要求:分别以james,julie,mikey,sarah四个学生的名字建立文本文件,分别存储各自的成绩,时间格式都精确为分秒,时间越短成绩
- names=["zhao00","qian01","sun02","l
- 工作中遇到大概20万的数据插入操作,程序编完后发现运行超时,修改PHP最大执行时间到600,还是超时,检查超时前插入的数据条数推算一下,大概
- 一、mysqlcheck简介mysqlcheck客户端可以检查和修复MyISAM表。它还可以优化和分析表。mysqlcheck的功能类似my