The instanceof operator returns true if the specified object is of the specified object type. instanceof运算符:当指定的对象属于指定的对象类型返回true var str = new String("abc"); alert(str instanceof String);The delete operator deletes a property of an object, or an element at a specified index in an array. delete运算符:删除对象的属性或者指定的索引的数组的元素. trees=new Array("redwood","bay","cedar","oak","maple") delete trees[3] if (3 in trees) { // this does not get executed }
delete这里并不是删除属性,只是移除对象的属性引用 比如: var obj = new Object(); obj.a = new Object(); delete obj.a;//这里只是移除obj.a的属性引用,而obj.a = new Object();这里的对象仍然存在 那就是说内存资源不会被释放了?
The instanceof operator returns true if the specified object is of the specified object type.
instanceof运算符:当指定的对象属于指定的对象类型返回true
var str = new String("abc");
alert(str instanceof String);The delete operator deletes a property of an object, or an element at a specified index in an array.
delete运算符:删除对象的属性或者指定的索引的数组的元素.
trees=new Array("redwood","bay","cedar","oak","maple")
delete trees[3]
if (3 in trees) {
// this does not get executed
}
请看如下代码:var trees=new Array("redwood","bay","cedar","oak","maple");
alert(trees.length);
var a=delete trees[3];
alert(a);
alert(trees[3]);
alert(trees[4]);
alert(trees.length);
请看如下代码:var trees=new Array("redwood","boy","cedar");
alert(trees.length);
var a=delete trees[100];//数组值并不存在,这里为什么返回true ?
alert(a);
alert(trees[0]);
alert(trees[1]);
alert(trees[2]);
alert(trees.length);
在所有其他情况下,返回 true。并不是所有的属性都可以删除的,比如通过prototype定义的属性
String.prototype.trim = function(){return ...;};
delete String.trim;//返回falsedelete这里并不是删除属性,只是移除对象的属性引用
比如:
var obj = new Object();
obj.a = new Object();
delete obj.a;//这里只是移除obj.a的属性引用,而obj.a = new Object();这里的对象仍然存在删除数组也是同样的道理,因此数组的长度不会有变化
var arr = new Array();
arr[100] = "xxx";
delete arr[100];
alert(arr.length);//这里显示101,a[100]和其他的数组元素一样,未定义而已上面几句等价于
var arr = new Array(101);
String.prototype.trim = function(){return "trim";};
var str = new String("xxxx");
delete str.trim;//删除失败,虽然str具有trim这个属性;
//如果要删除,可以delete String.prototype.trim;
alert(str.trim());感觉手册上的解释有点误导人^_^
返回false的情况,我试了好多,如果直接delete一个变量或者对象的话,会返回false,也就是说
delete expression的expression不能作为一个属性的话,但是expression又确实存在,返回false
比如:
arr = [1,2];
alert(delete arr);//true,这里的arr其实是作为window的一个属性被删除了
alert(arr);//报错而
var arr = [1,2];
alert(delete arr);//false,arr是一个局部变量,不能作为属性被删除
alert(arr);//1,2其实delete删除的是引用,返回true/false关键看expression有没有被引用此楼是本人推论,欢迎指正
呵呵 楼上好细心.... 这个可以看下周爱民的书.delete不能删除var 定义的全局变量
比如:
var obj = new Object();
obj.a = new Object();
delete obj.a;//这里只是移除obj.a的属性引用,而obj.a = new Object();这里的对象仍然存在
那就是说内存资源不会被释放了?
跟
obj.xxxxx = undefined;没什么区别.