JavaScript delete 属性的使用

  delete 是删除对象的一个属性,例如对于一个对象,

  var obj = {key:5};

  delete obj.key就是删除该对象的key属性,这个没什么问题,但当对象的原型prototype对象也存在该属性时,就值得注意了。

  

复制代码 代码如下:

  var A = function(){};

  A.prototype.testMe = true;

  var a = new A();

  //覆盖原型属性

  a.testMe = true;

  if(a.testMe){

  // 一些关键代码...

  // ....

  //删除这属性

  delete a.testMe;

  }

  //第二段 ---------------------------

  // 在其它模块中

  if(a.testMe){

  // 一些关键代码...

  // ....

  }

  第二段是值得注意的,不要以为a中testMe已尼删除了就不存在了,所以a.testMe就为undefined,即为假,其实它通过原型访问还是存在的,还是true!

  这里不留神就中招了。

  //附:

  检测对象是否存在某属性, 包括原型链的:

  if ('attrName' in obj)…

  检测对象是否存在某属性,是对象本身的,而非原型链的:

  obj.hasOwnProperty('attrName')