delete 操作符 删除对像属性及相关知识
来源:互联网 发布:java技术的web服务器 编辑:程序博客网 时间:2024/05/21 23:34
首先:
delete操作符通常用来删除对象的属性,而不是一般的变量和函数。
例子:
//对象var o = { x: 1 }; delete o.x; // true o.x; // undefined
//变量var x = 1; delete x; // false x; // 1
//函数function x(){} delete x; // false typeof x; // "function"
变量属性的标记
我 们已经知道声明变量时发生了什么(他们都变成了当前上下文对象的属性),接下来我们就要看一下属性究竟是怎么样一回事。每一个变量属性都可以有以下任意多 个属性: ReadOnly, DontEnum, DontDelete, Internal。你可以把这些当做标记,标明了变量属性可以持有的某种特性。这里我们最感兴趣的就是DontDelete标记。
在 声明变量或者函数时,他们都变成了当前上下文对象的属性–对于函数代码来说是活动对象,对于全局代码来说则是变量对象,而值得注意的是这些属性在创建时 都带有DontDelete标记,但是显式或者隐式的赋值语句所产生的属性并不会带有这个标记!这就是为什么有一些属性我们可以删除,但另一些却不可以:
内建对象与DontDelete
DontDelete就是一个特殊的标记,用来表明某一个属性能否被删除。需要注意的是一些内建的对象是自动持有这个标记的,从而不能被删除,比如函数内的arguments,以及函数的length属性。
但是注意:
在eval中声明的变量创建时都不会带有DontDelete标记!
eval('var foo = 1;'); foo; // 1 delete foo; // true typeof foo; // "undefined"
在函数内部也是一样的:
(function(){ eval('var foo = 1;'); foo; // 1 delete foo; // true typeof foo; // "undefined" })();
Firebug的困扰
在Firebug中能被删除(但是google流浪器中不能):
>> var sum = function(a, b) {return a + b;} >>> var add = sum; >>> delete sum true >>> typeof sum; "undefined"
在Firebug控制台中的代码最终将通过eval执行,而不是作为全局代码或函数代码。显然地,这样声明出来的变量都不会带DontDelete标记,所以才能被删除!(译者:也不能太信任Firebug啊。)
0 0
- delete 操作符 删除对像属性及相关知识
- delete运算符(删除对以前定义的对象的属性和方法的引用)
- js delete 用法(删除对象属性及变量)
- js delete 用法(删除对象属性及变量)
- js delete 用法(删除对象属性及变量)
- js delete 用法(删除对象属性及变量)
- thinkphp删除delete操作
- JS 删除操作 delete
- delete操作相关
- js delete删除对象属性
- 对账相关知识
- Microsoft.XMLHTTP对像属性
- Microsoft.XMLHTTP对像属性
- 监听域对像中的属性的增加和删除的事件监听器
- 完成对节点属性的添加、删除的操作
- unix下C标准文件操作及进程相关知识
- js中json的相关知识及操作
- 关于eternal blue virus的预防操作及相关知识
- 项目优化-BaseActivity和BaseFragment
- Hexo的Next主题配置
- 2016/11/17学习工作日志
- 通过socket连接获取本机IP地址
- 一个Android工程依赖了一个有 AndroidManifest.xml出现的错误
- delete 操作符 删除对像属性及相关知识
- 解决mysql导入脚本过大及超时的办法
- Openstack组件部署 — 将一个自定义 Service 添加到 Keystone
- blender模型导入unity项目报错
- HDU 1166 树状数组
- 字符指针 和 字符数组的区别
- 零基础入门 Docker
- STM32的TIM1_CH1N反向引脚输出PWM波.txt
- java继承