【问题标题】:Delete Operator Confusion删除运算符混淆
【发布时间】:2015-02-04 13:22:30
【问题描述】:

所以我发现这种技术是所有浏览器中全局 .remove() 方法的一种解决方法。

a.outerHTML =''; delete a

a = 你的元素。

我的问题.. 这让我很困惑,因为它只有在我使用 outerHTML = ''; 时才有效。但是,删除运算符在这里说https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete 它只是为了从对象中删除属性?所以,(这可能是一个愚蠢的问题),但是在设置 a.outerHTML 时是否会将其转换为可删除对象呢?怎么样?

编辑:我几乎觉得我应该删除这个问题,因为它可能听起来很愚蠢,但我显然迷路了:P

【问题讨论】:

  • 分配 innerHTML 属性完全没有改变:demo

标签: javascript


【解决方案1】:

delete 运算符用于从对象中删除属性。

var obj = {x: true};
console.log(obj)    // {x: true}
delete obj.x;
console.log(obj);   // {}

我强烈推荐这个参考:Understanding delete


在你的例子中:

a.outerHTML =''; 
delete a;

delete 操作符与a.outerHTML = ''; 的效果无关,outerHTML 代码行自行作用是用一些新的 HTML 替换部分 DOM。去掉delete a,第一行代码依然会对你看到的DOM产生影响。


其实在 ES5 严格模式下:

delete a;

会抛出一个语法错误。这就是这种行为的无意识。

【讨论】:

  • 是的,但它适用于元素(如果你使用 outerHTML=''),这让我感到困惑,因为它们在技术上不在一个对象中,对吧?例如,如果我只是删除了一个而不设置outerHTML = '',它就不会删除。这是为什么? outerHTML 对它做了什么让它如此特别?它是否会临时将其转换为属性然后转换为对象(这就是 delete 起作用的原因?)
  • 当您执行a.outerHTML = ""; 时,其效果与delete 运算符完全无关。那就是改变一个 HTML 块,这必然会改变 DOM 中的元素。这类似于x.innerHTML = "<div>foo</div>"; 如何删除x 的当前子代并在其位置创建新的DOM 对象。这些都与delete 运算符无关。
  • @NiCkNewman:所有动作都来自outerHTML getter/setter,而不是delete 关键字。
  • 哇哦。是的,我刚刚删除了 delete a 并且我的脚本正在做同样的事情。大声笑哇。我知道我有一种奇怪的感觉,为什么这个删除运算符甚至在这里。 (我也会检查那个页面@jfriend00)谢谢!
猜你喜欢
  • 2011-03-09
  • 1970-01-01
  • 2018-04-01
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 2014-02-08
相关资源
最近更新 更多