为啥在javascript中删除对象不起作用[重复]

Posted

技术标签:

【中文标题】为啥在javascript中删除对象不起作用[重复]【英文标题】:why delete object in javascript is not working [duplicate]为什么在javascript中删除对象不起作用[重复] 【发布时间】:2012-09-22 04:11:50 【问题描述】:

可能重复:Deleting Objects in javascript

我已经开始使用 delete 属性了。它不工作。不知道是不是浏览器兼容性问题?它是没有被删除的参考吗?

我对指针的概念不是很清楚。请告诉我们出了什么问题?

代码:

    <html>
        <script language="JavaScript">
        MyDate = new Date();
        document.write("MyDate=",MyDate,"<br>");

        delete MyDate;
        document.write("MyDate=",MyDate);   //MyDate=undefined should be output
        </script>
    </html>

输出只是第一个document.write:

MyDate=Mon Oct 01 2012 15:27:56 GMT+0530 (India Standard Time)

【问题讨论】:

参考现有问题***.com/questions/742623/… 【参考方案1】:

它正在工作。由于您正在删除myDate,因此当您尝试在第二个document.write jsfiddle 中访问myDate 时,浏览器会抛出异常。

Uncaught ReferenceError: MyDate is not defined 

【讨论】:

【参考方案2】:

IIRC, delete in javascript 删除属性。

【讨论】:

是的,这是delete 的正确行为。但是在浏览器中,所有的全局变量都是window对象的属性,都是可以删除的。 @AndyE,那应该是delete window.MyDate,我相信。 从技术上讲,是的。但是,某些浏览器可能会将window 视为隐式,而不是在严格模式下运行代码。有关 jsfiddle 示例,请参见 @Shusl 的答案。 再次有趣 ;-)。但是,似乎 OP 有一个反对这种处理的浏览器。见鬼,你确实知道一两件事,你应该脑补成自己的答案。我不是 javascript 的高手,只是回答,因为没有其他答案:) @AndyE:有点错误:用var 声明的全局变量不能从全局对象中删除(至少按照规范:我认为旧的 IE 弄错了)。 kangax 文章有详细信息。【参考方案3】:

首先,这不是 delete 应该被使用的方式。您可以使用它从对象中删除属性,因此在您的情况下,您应该编写 delete window.MyDate

为什么应该是undefined?你删除变量,因此你得到

错误:ReferenceError:MyDate 未定义

【讨论】:

以上是关于为啥在javascript中删除对象不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Javascript代码不起作用?告诉我为啥[重复]

为啥onclick处理程序在javascript中与innerHTML一起使用时不起作用[重复]

为啥我的列表视图上的删除按钮不起作用[重复]

为啥我的停止按钮在这个 javascript 音频播放器上不起作用?

Javascript删除对象属性不起作用

为啥杰克逊多态序列化在列表中不起作用?