什么情况下使用delete和instanceof操作符???

解决方案 »

  1.   


    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
    }
      

  2.   

    貌似delete操作符不会改变数组的长度值啊!!!
    请看如下代码: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);
      

  3.   

    怪事:delete操作符不会检测值的存在与否吗?
    请看如下代码: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);
      

  4.   

    delete删除的数组项后,该项undefined所以长度没变
      

  5.   

    delete expression 如果 expression 的结果是一个对象,且在 expression 中指定的属性存在,而该对象又不允许它被删除,则返回 false。 
    在所有其他情况下,返回 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);
      

  6.   

    上面有点错误:并不是所有的属性都可以删除的,比如通过prototype定义的属性,这里只是删除无效而已,仍然返回true
    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有没有被引用此楼是本人推论,欢迎指正
      

  7.   


    呵呵 楼上好细心.... 这个可以看下周爱民的书.delete不能删除var 定义的全局变量
      

  8.   

    delete这里并不是删除属性,只是移除对象的属性引用 
    比如: 
    var obj = new Object(); 
    obj.a = new Object(); 
    delete obj.a;//这里只是移除obj.a的属性引用,而obj.a = new Object();这里的对象仍然存在 
    那就是说内存资源不会被释放了?
      

  9.   

    个人感觉delete obj.xxxxx;

    obj.xxxxx = undefined;没什么区别.
      

  10.   

    delete 可以删除系统属性的,你可以自定义一个对象属性来覆盖系统对象的属性,覆盖后该系统属性就不能被使用了。