- 浏览: 554764 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (233)
- CSS (12)
- J2SE学习 (16)
- J2EE (6)
- JavaScript (38)
- Struts 1.x (2)
- SQL (9)
- Hibernate (5)
- TYPO3 (1)
- Mysql (10)
- Drupal (14)
- 生活 (10)
- PHP (40)
- Linux (15)
- 口语 (2)
- Magento (8)
- Dotnet (2)
- 正则 (2)
- Android ADB shell (1)
- Android (7)
- HTTP (4)
- Android API (2)
- eclipse (1)
- JAVA (4)
- 数据结构 (3)
- 集合 (1)
- IoC(反向控制) (2)
- 设计模式 (3)
- WebView (2)
- 算法 (6)
- smsniff (1)
- VIM (7)
- iOS (4)
- gcc (2)
- xcode (1)
- Mac (5)
- opencv (3)
- cmake (2)
- git (1)
- html5 (1)
- audio (1)
- apache (3)
- shell (1)
- 工作感悟 (1)
最新评论
-
jiyilee:
的确,不少命令都不能用,不方便啊。。
Apple:如何在iphone、ipad上安装一些常用命令行命令 -
idong杨:
[url][url][url][url][url][/url] ...
php中将SimpleXMLElement Object数组转化为普通数组 -
idong杨:
...
php中将SimpleXMLElement Object数组转化为普通数组 -
wcily123:
递归删除指定目录下的.git文件find . -name .g ...
Linux上批量删除.svn目录 -
yilinsitian:
受教了,好像Socket通信超时机制 还没有说吧
Android·HTTP超时机制
刚刚看到一篇好文(原文链接), 对Javascript中的delete操作符分析得很透彻。在这里简单地介绍一下内容。
虽然是一个小小的delete操作符,其行为却异常复杂。
Javascript的变量
实际上Javascript中,变量 = 对象属性,这是因为 Javascript 在执行脚本之前 会创建一个Global对象,所有的全局变量都是这个Global对象的属性, 执行函数时也会创建一个Activation对象,所有的局部变量都是这个Activation对象的属性。 如下例:
delete操作符删除的对象
C++中也有delete操作符,它删除的是指针所指向的对象。例如:
但Javascript的delete与C++不同,它不会删除o.x指向的对象,而是删除o.x属性本身。
在实际的Javascript中,delete o.x之后,Object对象会由于失去了引用而被垃圾回收, 所以delete o.x也就“相当于”删除了o.x所指向的对象,但这个动作并不是ECMAScript标准, 也就是说,即使某个实现完全不删除Object对象,也不算是违反ECMAScript标准。
“删除属性而不是删除对象”这一点,可以通过以下的代码来确认。
另外,delete o.x 也可以写作 delete o["x"],两者效果相同。
对变量执行delete的情况
由于变量也是 Global 或者是 Activation 对象的属性,所以对变量的delete操作也是同样的结果。
能删除的属性和不能删除的属性
并不是所有的属性都能被delete。例如,prototype中声明的属性就无法被delete:
对象的预定义属性也无法删除。 可以认为这类属性带有DontDelete的特性。
能删除的变量和不能删除的变量
通过var声明的变量和通过function声明的函数拥有DontDelete特性,无法被删除。
但是有一点例外,就是通过 eval 执行的代码中,通过var声明的变量虽然与正常的var声明变量 同属于Global对象,但它们不具有DontDelete特性,能被删除。
但是这也有一点例外,eval的代码中的函数内通过var定义的变量具有DontDelete,不能被删除。
delete的返回值
delete是普通运算符,会返回true或false。规则为:当被delete的对象的属性存在并且拥有DontDelete时 返回false,否则返回true。 这里的一个特点就是,对象属性不存在时也返回true,所以返回值并非完全等同于删除成功与否。
原文:http://tech.idv2.com/2008/01/09/javascript-variables-and-delete-operator/
虽然是一个小小的delete操作符,其行为却异常复杂。
Javascript的变量
实际上Javascript中,变量 = 对象属性,这是因为 Javascript 在执行脚本之前 会创建一个Global对象,所有的全局变量都是这个Global对象的属性, 执行函数时也会创建一个Activation对象,所有的局部变量都是这个Activation对象的属性。 如下例:
var global = 42; this.global; // 42, 可以通过this来访问Global对象 this.global2 = 12; global2; // 12 function foo() { var local = 36; // 不过无法直接访问Activation, // 因此无法通过 foo.local 的方式来访问local变量 }
delete操作符删除的对象
C++中也有delete操作符,它删除的是指针所指向的对象。例如:
// C++ class Object { public: Object *x; } Object o; o.x = new Object(); delete o.x; // 上一行new的Object对象将被释放
但Javascript的delete与C++不同,它不会删除o.x指向的对象,而是删除o.x属性本身。
// Javascript var o = {}; o.x = new Object(); delete o.x; // 上一行new的Object对象依然存在 o.x; // undefined,o的名为x的属性被删除了
在实际的Javascript中,delete o.x之后,Object对象会由于失去了引用而被垃圾回收, 所以delete o.x也就“相当于”删除了o.x所指向的对象,但这个动作并不是ECMAScript标准, 也就是说,即使某个实现完全不删除Object对象,也不算是违反ECMAScript标准。
“删除属性而不是删除对象”这一点,可以通过以下的代码来确认。
var o = {}; var a = { x: 10 }; o.a = a; delete o.a; // o.a属性被删除 o.a; // undefined a.x; // 10, 因为{ x: 10 } 对象依然被 a 引用,所以不会被回收
另外,delete o.x 也可以写作 delete o["x"],两者效果相同。
对变量执行delete的情况
由于变量也是 Global 或者是 Activation 对象的属性,所以对变量的delete操作也是同样的结果。
var global = 42; delete global; // 删除Global.global function foo() { var local = 36; delete local; // 删除Activation.local }
能删除的属性和不能删除的属性
并不是所有的属性都能被delete。例如,prototype中声明的属性就无法被delete:
function C() { this.x = 42; } C.prototype.x = 12; var o = new C(); o.x; // 42, 构造函数中定义的o.x delete o.x; o.x; // 12, prototype中定义的o.x,即使再次执行delete o.x也不会被删除
对象的预定义属性也无法删除。 可以认为这类属性带有DontDelete的特性。
var re = /abc/i; delete re.ignoreCase; re.ignoreCase; // true, ignoreCase无法删除
能删除的变量和不能删除的变量
通过var声明的变量和通过function声明的函数拥有DontDelete特性,无法被删除。
var x = 36; delete x; x; // 36, x没有被删除 y = 12; delete y; y; // undefined function foo() { return 42; } delete foo; foo(); // 42
但是有一点例外,就是通过 eval 执行的代码中,通过var声明的变量虽然与正常的var声明变量 同属于Global对象,但它们不具有DontDelete特性,能被删除。
eval("var x = 36;"); x; // 42 delete x; x; // undefined
但是这也有一点例外,eval的代码中的函数内通过var定义的变量具有DontDelete,不能被删除。
eval("(function() { var x = 42; delete x; return x; })();"); // 返回 42
delete的返回值
delete是普通运算符,会返回true或false。规则为:当被delete的对象的属性存在并且拥有DontDelete时 返回false,否则返回true。 这里的一个特点就是,对象属性不存在时也返回true,所以返回值并非完全等同于删除成功与否。
function C() { this.x = 42; } C.prototype.y = 12; var o = new C(); delete o.x; // true o.x; // undefined "x" in o; // false // o.x存在并且没有DontDelete,返回true delete o.y; // true o.y; // 12 // o自身没有o.y属性,所以返回true // 从这里也可以看到prototype链的存在,对象自身属性和prototype属性是不同的 delete o; // false // Global.o拥有DontDelete特性所以返回false delete undefinedProperty; // true // Global没有名为undefinedProperty的属性因此返回true delete 42; // true // 42不是属性所以返回true。有的实现会抛出异常(违反ECMAScript标准) var x = 24; delete x++; // true x; // 25 // 被删除的是x++的返回值(24),不是属性,所以返回true
原文:http://tech.idv2.com/2008/01/09/javascript-variables-and-delete-operator/
发表评论
-
iframe获取父级url
2013-08-14 11:09 3465iframe获取父级url 通过js获取父级iframe u ... -
Document.querySelectorAll
2012-02-20 16:27 1443Document.querySelectorAll Summ ... -
window.location.hash 属性怎么使用???
2012-02-19 15:03 5043看sencha-touch-1.1.1源码的时候发现,他们对浏 ... -
[转]data类型的Url格式:把小数据直接嵌入到Url中
2012-02-06 16:13 1445所谓"data"类型的 ... -
jQ.Mobi源代码
2012-02-02 15:38 4011/* jshint newcap:false */ ... -
WebView再探
2012-02-02 11:04 1506从 WebView初探 了解到WebView的强大,。听说We ... -
Android的webview研究
2012-02-01 20:50 18140最近做的项目大量用到了 webview ,用网页来布局。 An ... -
javascript var与变量作用域
2011-07-11 14:32 928var a=10; //正确 a=10; //正 ... -
Getting Div Height using JavaScript
2011-01-20 12:05 850.clientHeight is the browser vi ... -
ie 怪异模式下 position fixed javascript 实现
2010-12-23 00:13 1510<!DOCTYPE HTML PUBLIC " ... -
收集关于scrollTop信息
2010-12-23 00:09 1017要获取当前页面的滚动条纵坐标位置,用: document.do ... -
jquery radio checkbox select 操作
2010-09-10 15:22 1206jquery radio取值,checkbox取值,selec ... -
Javascript 事件冒泡
2010-04-16 14:40 1074W3C工作草案中描述的那样。 1.所有的元素都能够产生事 ... -
jQuery 动态解析html
2010-03-11 15:21 5260<html> <head> &l ... -
Javascript 字符串中的换行
2010-03-09 13:14 2630例如: var Showdiv2="<div ... -
匈牙利类型标记法
2010-02-24 20:54 1145匈牙利类型标记法——在以Pascal标记法命名的变量前附加一个 ... -
if(!document.all) 的含义
2010-02-23 11:21 5399一种一般用作识别IE浏览器的方法. 可以判断兼容性 IE下 ... -
Javascript 作用域问题
2010-02-22 18:23 880函数里就是局部的,外面设置就是全局的,如果同名的话,局部的会覆 ... -
JavaScript中的事件传播 捕捉、发生、起泡
2010-02-22 15:43 1179首先你要明白一点,当 ... -
Javascript 动态给控件添加事件
2010-02-22 15:30 2531<html> <head> ...
相关推荐
说到javascript中的delete操作符,还是首先要搞清楚javascript中的变量和属性之间的关系。 javascript中,变量和对象属性关系非常微妙,甚至可以很多时候会被等同起来,因为 javascript 在执行脚本之前会创建一个...
主要介绍了JavaScript中诡异的delete操作符,本文讲解了删除对象的属性、对数组的操作、对于变量的操作等内容,需要的朋友可以参考下
1、实现上delete操作符会调用引擎内部的[[Delete]]方法 2、[[Delete]]在8.6.2里定义 3、删除的属性有个DontDelete的特性,如果有,delete时直接返回false 搜索“DontDelete”,会发现有很多,如下都不能delete 1, ...
两者的区别在于是否能通过 delete 操作符删除 先看一段代码 var a = 'a'; // 显式声明的全局变量 b = 'b'; // 隐式声明的全局变量 console.log(a); // a console.log(b); // b console.log(window.a); // a console...
(4) JavaScript变量 5 变量命名规则 5 申明或创建变量 5 重新申明变量 5 3. JavaScript运算符 5 (1) 基本运算符 5 (2) 位运算符(~(非运算)、&(与运算)、|(或运算)、^(异或运算)) 5 (3) Boolean运算(!(求反...
并且 var 声明的变量, 不能使用 delete 操作符删除; 重复声明为产生覆盖, 不会造成错误; 遗漏声明, 则会把变量隐式声明此变量, 并做为全局变量; (下节介绍) */ /* 3, 变量作用域: 以函数划分: 函数内部声明的变量...
别名和存在操作符 16 类 17 实例属性 18 静态变量 19 继承与Super 20 Mixins 21 扩展类 22 CoffeeScript惯用法 24 Each 24 Map 25 筛选 26 包含 27 属性迭代 28 Min/Max 28 多个参数 29 And/or 29 解构赋值 30 其他...
翻到了这篇解释Javascript quiz的文章...typeof操作符只会返回string类型的结果。参照如下列表可知对应不同数据,typeof返回的值都是什么: 由此我们推断出,typeof arguments是object 问题二 var f = function
12.JS中的比较操作符有:==等于,!=不等于,>,>=, 13.JS中声明变量使用:var来进行声明 14.JS中的判断语句结构:if(condition){}else{} 15.JS中的循环结构:for([initial expression];[condition];[upadte expression]) {...
3.4.7 字符串连接操作符 38 3.4.8 逻辑操作符 38 3.4.9 赋值操作符 40 3.5 总结 41 第4章 程序控制 43 4.1 表达式 43 4.1.1 简单表达式 43 4.1.2 有副作用的简单表达式 43 4.1.3 复杂表达式 44 4.2 语句 44 4.3 函数...
无符号右移赋值操作 (>>>=); void 运算符; JScript 属性; $1...$9 属性; arguments 属性; caller 属性; constructor 属性; description 属性; E 属性; global 属性; hasOwnProperty 方法; ignoreCase ...
• sample01.htm 将JavaScript代码插入在标签与标签之间 • sample02.htm 将JavaScript代码放在了标签与标签之间 • sample03.htm JavaScript与HTML混合执行 • sample04.htm 在同...
实例038 动态输出JavaScript代码 69 实例039 当数字遇到了字符串 70 实例040 PHP程序员的基础——变量的应用 72 实例041 打印系统环境变量信息print_r($_ENV) 73 实例042 使用可变变量输出“I Like PHP!” 73 实例...
实例038 动态输出JavaScript代码 69 实例039 当数字遇到了字符串 70 实例040 PHP程序员的基础——变量的应用 72 实例041 打印系统环境变量信息print_r($_ENV) 73 实例042 使用可变变量输出“I Like PHP!” 73 实例...
{12.5}操作符与实例}{154}{section.12.5} {12.5.1}where}{154}{subsection.12.5.1} {12.6}函数}{156}{section.12.6} {12.7}组函数}{158}{section.12.7} {12.7.1}group by}{159}{subsection.12.7.1} {12.7.2}...
A.insert、update、delete等操作的Sql语句主要用ExecuteNonQuery()方法来执行; B.ExecuteNonQuery()方法返回执行Sql语句所影响的行数。 C.Select操作的Sql语句只能由ExecuteReader()方法来执行; D....
仅与 /delete 同时使用。以下是驱动器名称的范例: D: partition_name 以分区名称表示的待删除分区。可代替 drive_name 使用。仅与 /delete 同时使用。以下是分区名称的范例: DeviceHardDisk0Partition...