如果我有一个变量,JavaScript 会发生什么,比如:
var exampleObject = {one:'foo',two:'bar'};
然后我删除了一个不存在的属性,a la:
delete exampleObject.seven;
是否有一个随处发生的标准行动方案(什么都没有、错误消息、脚本崩溃等),或者这取决于某种实现(浏览器引擎等)?
如果我有一个变量,JavaScript 会发生什么,比如:
var exampleObject = {one:'foo',two:'bar'};
然后我删除了一个不存在的属性,a la:
delete exampleObject.seven;
是否有一个随处发生的标准行动方案(什么都没有、错误消息、脚本崩溃等),或者这取决于某种实现(浏览器引擎等)?
什么都没发生。
假设 ,x = {}
不是Type(x.y)
引用规范类型(不能有对不存在的属性的“引用”)。根据11.4.1 The delete Operator,这满足规则:
- 令 ref 为计算 UnaryExpression 的结果。
- 如果 Type(ref) 不是 Reference,则返回 true。
- ...
这种行为(“不采取行动”)已经存在很长时间了——任何表现不同的环境都是不合规的。来自第3 版 ECMAScript 规范:
当使用属性名称 P 调用 O 的 [[Delete]] 方法时,将执行以下步骤:
- 如果 O 没有名称为 P 的属性,则返回 true。
- ..
如果 exampleObject 是一个对象,则 delete 的返回值为true,即使该属性不存在。