一、作用、参数、返回值:

  作用:

   delete 操作符用于删除对象的属性;
   delete object.proerty  // 点操作符方式,常用
   delete object['proerty'] //字符串属性名方式

  参数:

   object : 对象名称,或者返回一个对象的表达式;
   property : 将要删除的属性

  返回值:

   delete 操作符 返回结果为 boolean 类型 (删除成功为 true,删除失败为 false)

  返回情况

  • 当被delete 的对象的属性存在并且拥有Don't Delete(对象属性的一个内部属性,拥有该内部属性表明该属性不能被删除)时,返回 false (在严格模式下抛出异常),否则返回 true;
  • 对象属性不存在时,也返回 true,所以无法根据返回值来判断是否成功删除;

二、delete 删除了什么:

  delete 操作符用于 删除 对象的属性;

  • 这里的属性实际上指的是属性本身,而不是属性指向的对象(对于引用类型来说);
  • 对于引用类型的值,delete 删除了对象属性的本身,但不会删除指向的对象;
  /**
   * testObj : 对象名称
   * preperty : 对象属性 (指 对象名称testObj 中的 a,b,c,d 属性)
   * @type {{a: number, b: string, c: number[], d: {s: number}}}
   */
  let referenceArray = [1,2,3,4];
  let referenceObj = {s : 11};
  let testObj1 = {
    a: 10,  // 引用类型
    b: '字符串',  // 引用类型
    c: referenceArray,  // 非引用类型
    d: referenceObj  // 非引用类型
  }
  console.info(testObj1);  // '{"a":10,"b":"字符串","c":[1,2,3,4],"d":{"s":11}}'

  // 删除 不存在的属性
  console.info(delete testObj1.xxx);  // true

  /**
   * 删除非引用类型
   */
  // 在删除之前,先打印出来
  console.info(testObj1.b);  // 字符串
  // 删除存在的属性(非引用类型)
  console.info(delete testObj1.b);  // true
  // 打印删除后的属性
  console.info(testObj1.b);  // undefined

  /**
   * 删除引用类型
   */
  // 在删除之前,先打印出来
  console.info(testObj1.d);  //  '{"s":11}'
  console.info(referenceObj);  //  '{"s":11}'
  // 删除存在的属性(引用类型)
  console.info(delete testObj1.d);  //  true
  // 打印删除后的 属性
  console.info(testObj1.d);  //  undefined
  // 打印 引用类型
  console.info(referenceObj);  //  '{"s":11}'

  

原理后面在研究

参考博客:https://www.w3cplus.com/javascript/deep-in-delete.html#:~:text=%E5%9C%A8%E5%AE%9E%E9%99%85%E7%9A%84%20JavaScript%E4%B8%AD%EF%BC%8C%20delete%20o.x%20%E4%B9%8B%E5%90%8E%EF%BC%8CObject%20%E5%AF%B9%E8%B1%A1%E4%BC%9A%E7%94%B1%E4%BA%8E%E5%A4%B1%E5%8E%BB%E4%BA%86%E5%BC%95%E7%94%A8%E8%80%8C%E8%A2%AB%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%EF%BC%8C%20%E6%89%80%E4%BB%A5%20delete,o.x%20%E6%89%80%E6%8C%87%E5%90%91%E7%9A%84%E5%AF%B9%E8%B1%A1%EF%BC%8C%E4%BD%86%E8%BF%99%E4%B8%AA%E5%8A%A8%E4%BD%9C%E5%B9%B6%E4%B8%8D%E6%98%AF%20ECMAScript%20%E6%A0%87%E5%87%86%EF%BC%8C%E4%B9%9F%E5%B0%B1%E6%98%AF%E8%AF%B4%EF%BC%8C%E5%8D%B3%E4%BD%BF%E6%9F%90%E4%B8%AA%E5%AE%9E%E7%8E%B0%E5%AE%8C%E5%85%A8%E4%B8%8D%E5%88%A0%E9%99%A4%20Object%20%E5%AF%B9%E8%B1%A1%EF%BC%8C%E4%B9%9F%E4%B8%8D%E7%AE%97%E6%98%AF%E8%BF%9D%E5%8F%8D%20ECMAScript%20%E6%A0%87%E5%87%86%E3%80%82

posted on 2022-06-30 15:14  冷漠「」  阅读(1012)  评论(0)    收藏  举报