欢迎您访问我爱IT技术网,今天小编为你分享的javascript教程:【Javascript学习笔记 delete运算符】,下面是详细的讲解!
Javascript学习笔记 delete运算符
一、语法
delete后面的表达式必须给出一个属性的引用,比如
var o={a:1};
delete o.a; //此处o.a是对象o的属性a的引用
只有在with语句里才能使用单独的属性名
with(o){
delete a;
}
二、delete的返回值
delete是普通运算符,会返回true或false。规则为:当被delete的对象的属性存在并且不能被删除时 返回false,否则返回true。 这里的一个特点就是,对象属性不存在时也返回true,所以返回值并非完全等同于删除成功与否。
var o={a:1};
delete o.a; //返回true
var b=2;
delete b;//返回false,ECMA规则约定:使用var和function声明的变量不可以被delete
三、哪些情况下不允许delete
上例提到的var和function声明的变量不可以被delete,但隐式声明可以被删除
function c(){return 12;}
delete c;//返回false
d=function(){return 12;}
delete d;//返回true
不能delete从原型链上继承的属性,但可以删除原型链上的属性
function Foo(){}
Foo.prototype.bar=42;
var foo=new Foo();
delete foo.bar; // 返回true,但并没有起作用
alert(foo.bar); // alerts 42, 属性是继承的
delete Foo.prototype.bar; // 在原型上删除属性bar
alert(foo.bar); // alerts "undefined", 属性已经不存在,无法被继承
四、特例
eval执行的代码中如有通过var和function声明的变量,可以被delete
eval("var a=1");
delete a;
alert(a); //报未定义错误
如果声明是在eval执行代码中的闭包内进行的,则变量不能被delete
eval("(function(){var a=1;delete a; return a;})()");//1
五、delete 数组元素
从数组中delete其元素并不会影响数组的长度
var arr=['yuyin','suhuan','baby'];
delete arr[0];
alert(arr.length);//alert 3
被delete的键值已经不属于数组,但却还是可以被访问,其值为undefined。
var arr=['yuyin','suhuan','baby'];
delete arr[0];
0 in arr; // false
alert(arr[0]);//undefined
arr[0]===undefined;//true
对比直接将键值赋值undefined
var arr=['yuyin','suhuan','baby'];
arr[0]=undefined;
0 in arr; // true
alert(arr[0]);//undefined
arr[0]===undefined;//true
可以看出delete 操作只是将键值这个属性从数组中删除了,数组本身也是对象,这个情况好理解的。如果需要保留键值,可以用undefined赋值。
关于Javascript学习笔记 delete运算符的用户互动如下:
相关问题:new和delete运算符 c/c++
答:c++中,new的用法很灵活,这里进行了简单的总结: new() 分配这种类型的一个大小的内存空间,并以括号中的值来初始化这个变量; new[] 分配这种类型的n个大小的内存空间,并用默认构造函数来初始化这些变量; 当使用new运算符定义一个多维数组变量或... >>详细
相关问题:判断:“任何对象都可以使用delete运算符来释放”
答:不是啊 用new实例化出来一个对象的时候,就用delete 来销毁这个对象 delete是要和new成对出来的~他new出来的对象` >>详细
相关问题:用运算符delete删除一个动态对象时,()
答:1.选 C 2。A >>详细
- 【Array】js中更短的 Array 类型转换-类型转换
- 【ExtJs】ExtJs 表单提交登陆实现代码-表单提交-
- 【Ajax】jQuery 学习第六课 实现一个Ajax的TreeVi
- 【extjs】extjs每个组件要设置唯一的ID否则会出错
- 【focus】JavaScript使用focus()设置焦点失败的解
- 【bootstrap3】基于bootstrap3和jquery的分页插件
- 【hover】jQuery控制图片的hover效果(smartRollo
- 【ajax更新数据库】ajax异步刷新实现更新数据库-
- 【div】div浮层 滚动条移动 位置保持不变的4种方
- 【AngularJS】举例讲解AngularJS中的模块-模块
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
