JavaScript delete运算符详解:用法、限制与严格模式差异

作者:小括号

时间:2026-10-23

浏览:476

本文深入解析JavaScript中delete运算符的用法。delete用于删除对象属性或数组元素,但不会改变数组长度。需注意其操作数必须为左值,且无法删除通过var、function声明的变量或内置属性。在ECMAScript 5严格模式下,对非法操作数使用delete会抛出SyntaxError或TypeError,而非返回false。

文章目录

delete运算符的基本定义与作用

delete是一个一元运算符,主要用于删除对象的属性或数组中的元素。与赋值、递增和递减运算符类似,delete具有副作用,其核心作用是执行删除操作,而非返回特定值。例如:


var o = { x: 1, y: 2};     // 定义一个对象
delete o.x;           // 删除一个属性 
"x" in o            // => false:这个属性在对象中不再存在 
var a = [1,2,3];        // 定义一个数组 
delete a[2];          // 删除最后一个数组元素 
2 in a;             // => false:元素2在数组中已经不存在了 
a.length            // => 3:注意,数组长度并没有改变,尽管上一行代码删除

删除属性与undefined的区别

需要明确的是,删除属性或数组元素并不等同于将其值设置为undefined。当属性被删除后,它将从对象中彻底消失。此时读取该属性会返回undefined,但可以通过in运算符(参考4.9.3节)来检测该属性是否仍存在于对象中。

操作数要求与不可删除的对象

delete运算符期望其操作数是一个左值。如果操作数不是左值,delete不会执行任何操作,并直接返回true;否则,它会尝试删除指定的左值。若删除成功,则返回true。然而,并非所有属性都可被删除。部分内置核心属性和客户端属性无法删除,通过var语句声明的变量、通过function语句定义的函数以及函数参数均不可删除。

严格模式下的异常处理机制

在ECMAScript 5的严格模式下,如果delete的操作数是非法的(如变量、函数或函数参数),执行delete将抛出SyntaxError异常。只有当操作数是属性访问表达式(参考4.4节)时,delete才能正常工作。此外,在严格模式下,尝试删除不可配置的属性(参考6.7节)会抛出TypeError异常。而在非严格模式下,这些操作不会报错,仅返回false以表明删除操作无法执行。

delete运算符代码示例

以下是关于delete运算符的一些具体示例:


var o = {x:1, y:2};   //定义一个变量,初始化为对象 
delete o.x;       //删除一个对象属性,返回true 
typeof o.x;       //属性不存在,返回"undefined" 
delete o.x;       //删除不存在的属性,返回true 
delete o;        //不能删除通过var声明的变量,返回false
//在严格模式下,将抛出一个异常 delete 1;        //参数不是一个左值,返回true 
this.x = 1;       //给全局对象定义一个属性,这里没有使用
var delete x;        //试图删除它,在非严格模式下返回true            
//在严格模式下会抛出异常,这时使用"delete this.x"来代替    
x;       //运行时错误,没有定义x

以上介绍了JavaScript中delete运算符的基础知识,感谢阅读与支持。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章