javascript - js delete 问题?
天蓬老师
天蓬老师 2017-04-10 15:16:39
0
6
329
var a = 1;
delete a;

返回false

 a = 1;
 delete a;

返回true

请问为什么呢?var a = 1 和 window.a = 1 有什么区别呢?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

reply all(6)
黄舟

翻了《js权威指南》,原理大概是:
对象的属性有4个特性(attributes),其中一个叫configurable,如果这个属性值为false则一定不能被delete

var x = 1;
Object.getOwnPropertyDescriptor(this,'x');
//结果是Object {value: 1, writable: true, enumerable: true, configurable: false}

configurablefalse,所以不能删除。

但我还不确定configurabletrue是否一定能删除,待补充。


delete扩展资料

Peter_Zhu

那么问题来了,eval 定义的 global var 返回 false 吗?

eval('var a = 1');
delete a;
Peter_Zhu

//全局变量
var a = 1;
delete a;
//隐式全局变量
a = 1;
delete a;

隐式全局变量和明确定义的全局变量间有些小的差异,就是通过delete操作符让变量未定义的能力
通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的
无var创建的隐式全局变量(无视是否在函数中创建)是能被删除的

这表明,在技术上,隐式全局变量并不是真正的全局变量,但它们是全局对象的属性。属性是可以通过delete操作符删除的,而变量是不能的

伊谢尔伦

其实这种问题,你google一下完全可以找到答案,例如这篇就讲的很不错,完全可以解释你的疑惑:
http://blog.charlee.li/javascript-variables-and-delete-operator/

阿神

delete操作符通常用来删除对象的属性,而不是一般的变量或者函数。

Ty80

补充一点在ES5严格模式下,未定义的变量直接赋值将会报错,隐式全局变量将不再存在了

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template