JavaScript 的 delete
运算符用于从对象中删除/移除一个属性。它不仅移除属性,同时也移除该属性的值。它仅适用于对象而不适用于变量或函数。
在 JavaScript 中,数组是一种对象,因此你可以使用 delete
运算符来删除某个特定索引处的元素。然而,还有像 pop()
、slice()
或 shift()
这样的方法可用于从数组中删除元素。
语法
以下是如何使用 delete
运算符删除对象属性的语法:
delete obj.property;
或者
delete obj["property"];
返回值 − delete
运算符如果成功删除了操作数(指定属性),则返回 true
,否则如果属性未被删除则返回 false
。
如果你尝试删除不存在的属性,它将返回 true
但不会影响对象。
以下是如何使用 delete
运算符删除数组元素的语法:
delete arr[index];
删除对象属性
JavaScript 的 delete
运算符可以用来删除对象的一个属性。要删除属性,我们需要写出 delete
运算符后跟对象的属性。
delete obj.propertyName;
或者
delete obj["propertyNmae"];
在上述语法中,名为 propertyName
的对象属性从称为 obj
的对象中被删除。
示例:删除对象属性
下面示例中的 obj
对象包含 product
、price
和 color
属性。我们使用 delete
运算符从对象中删除 price
属性。
<html>
<body>
<div id="output"></div>
<script>
const obj = {
product: "Mobile",
price: 20000,
color: "Blue",
}
delete obj.price;
document.getElementById("output").innerHTML =
"The Mobile price is " + obj.price + " and color is " + obj.color;
</script>
</body>
</html>
这将产生以下结果:
The Mobile price is undefined and color is Blue
注意,当我们访问已删除的属性时,它返回 undefined
。
示例:删除不存在的对象属性
尝试删除不存在的属性。它将返回 true
但不会影响原始对象。
<html>
<body>
<div id="output"></div>
<script>
const obj = {
product: "Mobile",
price: 20000
}
document.getElementById("output").innerHTML = delete obj.color;
</script>
</body>
</html>
上述程序将产生以下结果:
true
删除数组元素
我们可以使用 delete
运算符来移除或删除数组中的元素。要删除一个元素,我们使用 delete
关键字后跟数组元素。我们可以使用方括号([]
)来访问数组中的元素。
示例
下面的代码包含了一个数字数组。我们使用 delete
运算符来删除数组第 1 个索引处的元素。在输出中,你可以观察到数组中的元素被删除了,但是其他元素的位置保持不变。数组长度也保持不变。
<html>
<body>
<div id="output"></div>
<script>
const arr = [10, 20, 30, 40, 50, 60];
delete arr[1];
document.getElementById("output").innerHTML =
arr + "<br>" +
arr[1];
</script>
</body>
</html>
这将产生以下结果:
10,,30,40,50,60
undefined
删除预定义对象
JavaScript 的 delete
运算符可以删除预定义对象,比如 Math
、Date
等。不建议删除预定义对象。一旦删除,你就不能访问这些对象的属性。
示例:删除内置 Math
对象
在下面的例子中,我们尝试删除 Math
对象所以我们得到上面的错误。
<html>
<body>
<div id="output"></div>
<script>
var x = 10
var fun = function(){return 20;};
document.getElementById("output").innerHTML =
"delete Math.PI :" + delete Math.PI + "<br>" +
"delete Math :" + delete Math + "<br>";
try{
document.getElementById("output").innerHTML += Math.PI;
}
catch(e){
document.getElementById("output").innerHTML += e;
}
</script>
</body>
</html>
这将产生以下输出:
delete Math.PI :false
delete Math :true
ReferenceError: Math is not defined
不能删除变量和函数
delete
运算符不能删除变量或函数。
<html>
<body>
<div id="output1"></div>
<div id="output2"></div>
<script>
var x = 10
var fun = function(){return 20;};
document.getElementById("output1").innerHTML = delete x;
document.getElementById("output2").innerHTML = delete fun;
</script>
</body>
</html>
这将产生以下结果:
false
false
未使用 var
、let
或 const
定义的变量可以被删除。这样的变量被视为 window
对象的属性。
<html>
<body>
<div id="output1"></div>
<div id="output2"></div>
<script>
try{
x = 10
document.getElementById("output1").innerHTML = delete x;
document.getElementById("output2").innerHTML = x;
}catch(e){
document.getElementById("output2").innerHTML = e;
}
</script>
</body>
</html>
这将产生以下结果:
true
ReferenceError: x is not defined