关于JavaScript中的delete操作

看到一道题,是这样的:

(function(x){
delete x;
return x;
})(1);
  • 1

  • null

  • undefined

  • Error

    我选了Error、、、、,然而是错的,运行了一下,答案是1.

    难道不能delete函数中的参数吗?什么情况是可以delete的?什么情况是不可以delete的?

    去网上查了一下

    通常:delete 操作符用来删除一个对象的属性。

    语法:delete expression

    如果成功返回true,失败返回false,但是在严格模式中,如果该属性是一个不可配置的的,delete会抛出异常。

    如果 delete 操作符删除成功,则被删除的属性将从所属的对象上彻底消失。

"use strict"
var obj={
name:"aa"
}
Object.defineProperty(obj, "name", { writable: true,
enumerable: true,
configurable: false
});
delete obj.name;
console.log(obj.name);

obj.name设置为不可配置后delete,在严格模式下会抛出如下异常

Uncaught TypeError: Cannot delete property 'name' of #<Object>

delete 操作符还可以用来删除隐式声明的全局变量,就是没有用var声明的全局变量

实验时遇到一个问题

    var name="aa";
delete name;
console.log(name);

    var name1="aa";
delete name1;
console.log(name1);

运行时不一样的,在第一个例子中,会报错。因为name是内置的属性、、、

还有被标记了DontDelete的一些对象的属性不能被delete.

/*  foo是被正常声明的,所以带有DontDelete标记,从而不能被删除! */  

var foo = 1;
delete foo; // false
console.log(typeof foo); // "number"
/* bar是作为函数被声明,一样带有DontDelete,不能被删除。 */
function bar(){}
delete bar; // false
console.log(typeof bar);// "function" /*函数中var的变量,一样带有DontDelete,不能被删除。*/
function f() {
var z = 44;
delete z; // returns false
console.log(z);//44
}

需要注意的是一些内建的对象是自动持有这个标记的,从而不能被删除,比如函数内的arguments,以及函数的 length属性,以及传入的参数

如果变量被delete了,再对它取值会报错,index.html:11 Uncaught ReferenceError: x is not defined,x(某变量)找不到了。

关于JavaScript中的delete操作的更多相关文章

  1. JavaScript中使用ActiveXObject操作本地文件夹的方法

    转载地址    http://www.jb51.net/article/48538.htm 在Windows平台上, js可以调用很多Windows提供的ActivexObject,本文就使用js来实 ...

  2. Javascript中的delete

    一.问题的提出 我们先来看看下面几段代码,要注意的是,以下代码不要在浏览器的开发者工具(如FireBug.Chrome Developer tool)中运行,原因后面会说明: 为什么我们可以删除对象的 ...

  3. javascript中字符串常用操作整理

    javascript中字符串常用操作整理 字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用 ...

  4. Javascript中的delete介绍

    关于JavaScript中的Delete一直没有弄的很清楚,最近看到两篇这方面的文章,现对两文中部分内容进行翻译(内容有修改和添加,顺序不完全一致,有兴趣推荐看原文),希望能对大家有所帮助 一.问题的 ...

  5. 深入理解javascript 中的 delete(转)

    在这篇文章中作者从<JavaScript面向对象编程指南>一书中关于 delete 的错误讲起,详细讲述了关于 delete 操作的实现, 局限以及在不同浏览器和插件(这里指 firebu ...

  6. javascript中的数组操作

    1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...

  7. [转] JavaScript中的字符串操作

    一.概述    字符串在JavaScript中几乎无处不在,在你处理用户的输入数据的时候,在读取或设置DOM对象的属性时,在操作cookie时,当然还有更 多....JavaScript的核心部分提供 ...

  8. 深入理解JavaScript中的函数操作——《JavaScript忍者秘籍》总结

    匿名函数 对于什么是匿名函数,这里就不做过多介绍了.我们需要知道的是,对于JavaScript而言,匿名函数是一个很重要且具有逻辑性的特性.通常,匿名函数的使用情况是:创建一个供以后使用的函数.简单的 ...

  9. javascript中字符串常用操作总结、JS字符串操作大全

    字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用操作做个整理,一者加深印象,二者方便今后温 ...

随机推荐

  1. Git 在团队中的最佳实践--如何正确使用Git Flow

    我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...

  2. Jquery mobiscroll 移动设备(手机)wap日期时间选择插件以及滑动、滚动插件

    Jquery Mobiscroll是一个用于触摸设备(Android phones, iPhone, iPad, Galaxy Tab)的日期和时间选择器jQuery插件.以及各种滑动插件 可以让用户 ...

  3. InnoDB关键特性学习笔记

    插入缓存 Insert Buffer Insert Buffer是InnoDB存储引擎关键特性中最令人激动与兴奋的一个功能.不过这个名字可能会让人认为插入缓冲是缓冲池中的一个组成部分.其实不然,Inn ...

  4. Jquery(1)

    鼠标点击事件: <input type="button" value="测试" onclick="test()" /> < ...

  5. winform 窗体圆角设计

    网上看到的很多winform窗体圆角设计代码都比较累赘,这里分享一个少量代码就可以实现的圆角.主要运用了System.Drawing.Drawing2D. 效果图 代码如下. private void ...

  6. VC中的MFC到底是什么?

    1. 微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API ...

  7. 安卓自定义组合控件--toolbar

    最近在学习安卓APP的开发,用到了toolbar这个控件, 最开始使用时include layout这种方法,不过感觉封装性不好,就又改成了自定义组合控件的方式. 使用的工具为android stud ...

  8. 在Linux配置Nginx web服务器步骤

    系统环境:centos7 需要软件:nginx-1.3.16.tar.gz   libevent-2.0.21-stable.tar.gz  Pcre 和 pcre-devel nginx下载地址:h ...

  9. C#迪杰斯特拉算法

    C#迪杰斯特拉算法 网上有许多版本的,自己还是写一个理解点 Dijkstra.cs public class Dijkstra { private List<Node> _nodes; p ...

  10. 开源一个WEB版本GEF,基于SVG的网页流程图框架

    8月开始断断续续的制作这个web gef,没有任何依赖,完全原生js开发,目前已经完成了雏形,基本上可以在项目里应用了. 下图展示的是demo1的效果,包括拖拽,生成连线,点击生成\取消墙体,整个de ...