Javascript中delete运算符

2017-07-19 07:54:11

Delete是Javascript语言中使用频率较低的操作之一,但是有些时候,当我们需要做delete或者清空动作时,就需要delete操作。在这篇文章中,我们将深入探讨如何使用它,以及它是如何工作的。

删除的目的,如你所想,就是要删除某些东西,更具体的说,它会删除对象的属性,如下例:

var Benjamin = {
	"name": "zuojj",
	"url" : "http://www.zuojj.com"
};

delete Benjamin.name;

//Outputs: Object { url: "http://www.zuojj.com" }
console.log(Benjamin);

delete运算符将不会删除普通变量,如下例:

var benjamin = "http://www.zuojj.com";
delete benjamin;

//Outputs: "http://www.zuojj.com"
console.log(benjamin);

但是,它可以删除“全局变量”,因为它们事实上是全局对象(浏览器中是window)对象的属性。

// Because var isn't used, this is a property of window
benjamin = "zuojj";

delete window.benjamin;

// ReferenceError: benjamin is not defined
console.log(benjamin);

delete运算符也有一个返回值,如果删除一个属性成功了,返回true,如果不能删除属性,因为该属性是不可写,将返回false,或者如果在严格模式下会抛出一个错误。

var benjamin = {
    "name": "zuojj",
    "url" : "http://www.zuojj.com"
};

var nameDeleted = delete benjamin.name;

// Outputs: true
console.log(nameDeleted);

"use strict";
var benjamin_02 = "zuojj";

//Outputs: Uncaught SyntaxError: Delete of an unqualified identifier in strict mode. 
delete benjamin_02;

你可能不知道在什么情况下使用删除运算符。答案是,只要你真的想从对象中删除一个属性。

有的时候,Javascript开发不是删除一个属性,而是把这个属性值设置为null.像下面这样:

var benjamin = {
    "name": "zuojj",
    "url" : "http://www.zuojj.com"
};
benjamin.name = null;

虽然这有效地切断从原来的值的属性,但该属性本身仍然存在的对象上,你可以看到如下:

// Outputs: Object { name: null, url: "http://www.zuojj.com" }
console.log(benjamin);

同时,像in和for in 循环运算将不会报告null属性的存在,如果你使用个对象,可能使用这些方法来检查一个对象,你可能想确保你真正删除任何不需要的属性。

最后,你应该记住,删除并没有破坏属性的值,仅仅属性本身,看下面的例子:

var name     = "zuojj",
		benjamin = {};

benjamin.name = name;

delete benjamin.name;

//Outputs: "zuojj"
console.log(name);

 

这里,name和benjamin.name映射到相同的值,真如你所看到的,删除benjamin.name并不会影响name.

以上,就是我对delete运算符的概述,不妥之处,欢迎大家批评指正。



  • 2018-12-07 22:19:33

    修改 Nginx 进程最大可打开文件数(worker_processes和worker_connections)

    worker_processes:操作系统启动多少个工作进程运行Nginx。注意是工作进程,不是有多少个nginx工程。在Nginx运行的时候,会启动两种进程,一种是主进程master process;一种是工作进程worker process。例如我在配置文件中将worker_processes设置为4,启动Nginx后,使用进程查看命令观察名字叫做nginx的进程信息,我会看到如下结果:

  • 2018-12-07 22:55:02

    nginx worker_processes 配置

    据另一种说法是,nginx开启太多的进程,会影响主进程调度,所以占用的cpu会增高, 这个说法我个人没有证实,估计他们是开了一两百个进程来对比的吧。

  • 2018-12-08 11:44:26

    php 时间函数strtotime 使用详解

    这篇文章介绍的内容是关于php 时间函数strtotime 使用详解 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

  • 2018-12-09 15:52:37

    【Android - 进阶】之Animator属性动画

    在3.0系统之前,Android给我们提供了逐帧动画Frame Animation和补间动画Tween Animation两种动画: 逐帧动画的原理很简单,就是将一个完整的动画拆分成一张张单独的图片,然后将它们连贯起来进行播放; 补间动画是专门为View提供的动画,可以实现View的透明度、缩放、平移和旋转四种效果。

  • 2018-12-09 18:12:45

    显示软键盘,并让布局压缩

    博客 学院 下载 图文课 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye GitChat 搜博主文章 写博客传资源 原

  • 2018-12-09 22:48:14

    ToolBar修改返回按钮图标

    使用Toolbar时,有时因为不同的手机设备,不能使用系统默认的主题样式或者图标,必须指定特定的资源,防止APP在不同设备上的效果不一样! 我在使用Toolbar时,把这个布局作为一个公共的了,所以修改起来比较容易,下面是该Toolbar的布局文件: