-

Javascript中的delete操作符详细介绍(图文教程)

一、delete 操作符灵魂六问
1、delete 的返回值是什么?
2、delete 删除不存在的属性返回值是什么?
3、delete 能不能删除原型上的属性?
4、delete 能否删除变量?
5、delete 删除数组某个数据,数组长度会不会变?
6、哪些属性不能被 delete 删除?
二、若不使用 delete ,该如何删除对象的属性?
1、将不需要的属性设置为 undefined

1、delete 的返回值是什么?
delete 返回的是布尔值。
删除一个存在或不存在的属性,只要能删除成功,就会返回 true。
删除失败返回 false。 尝试一下>>
<script>
var a = {
  p1: 1
}
document.write(delete a.p1) // true
document.write("<br>")
document.write(delete a.p2) // true
document.write("<br>")
document.write(delete window) // false
</script>
2、delete 删除不存在的属性返回值是什么?
删除不存在的属性返回值也是 true。
3、delete 能不能删除原型上的属性?
无法删除原型上的属性。 尝试一下>>
<script>
var a = { p1: 10 }
a.__proto__ = { p2: 20 }
document.write(a.p2) // 20
document.write("<br>")
document.write(delete a.p2) // true
document.write("<br>")
document.write(a.p2) // 20


document.write("<br><br><hr><br>")
//第二种方法
function Foo () {
  this.name = "xiyueta"
}
Foo.prototype.age = 20
var foo=new Foo()
document.write( foo.age) // 20
document.write("<br>")
document.write(delete foo.age) // true
document.write("<br>")
document.write( foo.age) // 20
</script>
5、delete 删除数组某个数据,数组长度会不会变?
delete 删除数组的某一项,并不会导致数组长度变短。
对应的数据的值会变成 undefined。 尝试一下>>
<script>
var arr = [1, 2, 3]
document.write(arr.length) // 3
document.write("<br>")
document.write(delete arr[1]) // true
document.write("<br>")
document.write(arr.length) // 3
document.write("<br>")
document.write(arr) // [1, , 3]
document.write("<br>")
document.write(typeof(arr[1])) // undefined
</script>
6、哪些属性不能被 delete 删除?
通过var、const、let声明的变量和通过function声明的函数拥有dontdelete特性,是不能被删除。未通过var声明的全局变量是可以删除的 尝试一下>>
<script> 
var global = {
    a: 123,
    b: {
        c: 1345
    }
};
delete global; //无效
document.write(global)
document.write("<br>")

obj = {
    a: 123
};
document.write(typeof(obj))
document.write("<br>")
delete obj; // 删除obj全局变量,window对象的obj属性
document.write(typeof(obj))
document.write("<br>")
console.log(obj);//obj is not defined
</script>