delete 1; //return true
delete {}; //return true
将0
和{}
看作一个表达式, 并尝试删除它的求值结果
x = 1;
delete x; //return true
var a = {name: "csdn"};
delete a.name; //return true
delete a.age; //return true
当x
是全局对象global
的属性的时候,delete x
其实只需要返回global.x
这个引用就可以了, 而当它不是全局对象global
的属性时候, 那么就需要从当前环境中找到一个名为x
的引用, 找到这两种不同的引用
的过程, 就称之为resolvebinding
, 而这两种不同的x
, 就称为不同环境下绑定的标识符或名字
delete a.name
不是删除一个值("csdn"
), 而是删除一种引用。
delete 其实只能删除一种引用, 即对象的成员
delete c.x;//refance error
因为c.
这个引用不存在, 所以会报一个refance error
由上面看出obj.x
返回一个关于x
的引用, 然后它可以作为下一个操作符号, 例如函数调用符号的左手端来使用, 于是有了对象方法调用运算
obj.x();