44

如果我有一个变量,JavaScript 会发生什么,比如:

var exampleObject = {one:'foo',two:'bar'};

然后我删除了一个不存在的属性,a la:

delete exampleObject.seven;

是否有一个随处发生的标准行动方案(什么都没有、错误消息、脚本崩溃等),或者这取决于某种实现(浏览器引擎等)?

4

2 回答 2

41

什么都没发生。

假设 ,x = {}不是Type(x.y)引用规范类型(不能有对不存在的属性的“引用”)。根据11.4.1 The delete Operator,这满足规则:

  1. 令 ref 为计算 UnaryExpression 的结果。
  2. 如果 Type(ref) 不是 Reference,则返回 true。
  3. ...

这种行为(“不采取行动”)已经存在很长时间了——任何表现不同的环境都是不合规的。来自第3 版 ECMAScript 规范

当使用属性名称 P 调用 O 的 [[Delete]] 方法时,将执行以下步骤:

  1. 如果 O 没有名称为 P 的属性,则返回 true。
  2. ..
于 2013-05-06T20:41:28.683 回答
14

如果 exampleObject 是一个对象,则 delete 的返回值为true,即使该属性不存在。

于 2013-05-06T20:36:35.067 回答