var a = 1;
delete a;
返回false
a = 1;
delete a;
返回true
请问为什么呢?var a = 1 和 window.a = 1 有什么区别呢?
黄舟2017-04-10 15:18:39
翻了《js权威指南》,原理大概是:
对象的属性有4个特性(attributes),其中一个叫configurable
,如果这个属性值为false
则一定不能被delete
。
var x = 1;
Object.getOwnPropertyDescriptor(this,'x');
//结果是Object {value: 1, writable: true, enumerable: true, configurable: false}
configurable
为false
,所以不能删除。
但我还不确定configurable
为true
是否一定能删除,待补充。
delete扩展资料
天蓬老师2017-04-10 15:18:39
//全局变量
var a = 1;
delete a;
//隐式全局变量
a = 1;
delete a;
隐式全局变量和明确定义的全局变量间有些小的差异,就是通过delete操作符让变量未定义的能力
通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的
无var创建的隐式全局变量(无视是否在函数中创建)是能被删除的
这表明,在技术上,隐式全局变量并不是真正的全局变量,但它们是全局对象的属性。属性是可以通过delete操作符删除的,而变量是不能的
伊谢尔伦2017-04-10 15:18:39
其实这种问题,你google一下完全可以找到答案,例如这篇就讲的很不错,完全可以解释你的疑惑:
http://blog.charlee.li/javascript-variables-and-delete-operator/