js中,全局变量与直接添加在window属性的区别
2017-02-07 00:00
351 查看
摘要: var
在js中定义的全局变量是挂在window下的,而window的属性也一样,那么这两者有什么区别呢?
其实这两者还是有小小的区别的,全局变量是不能通过delete操作符删除的,而直接定义在window上的属性是可以删除的。
那么为什么全局变量不能删除呢?
因为全局变量也是个对象,这个对象时通过叫做PropertyDescriptor来定义的。
可以在浏览器中调用Object.getOwnPropertyDescriptor(对象, 属性)来查看
举例:
大家可以看到最后一行有configurable(这个方法用于获取defineProperty方法设置的property 特性)的特性,这个特性决定了该属性是不能被删除的。
在js中定义的全局变量是挂在window下的,而window的属性也一样,那么这两者有什么区别呢?
a = 2; console.log(a); // 2 console.log(window.a); // 2
其实这两者还是有小小的区别的,全局变量是不能通过delete操作符删除的,而直接定义在window上的属性是可以删除的。
那么为什么全局变量不能删除呢?
因为全局变量也是个对象,这个对象时通过叫做PropertyDescriptor来定义的。
可以在浏览器中调用Object.getOwnPropertyDescriptor(对象, 属性)来查看
举例:
var test = 2; window.test; // 2 Object.getOwnPropertyDescriptor(window, "test") //Object {value: 2, writable: true, enumerable: true, configurable: false}
大家可以看到最后一行有configurable(这个方法用于获取defineProperty方法设置的property 特性)的特性,这个特性决定了该属性是不能被删除的。
ECMAScript5 Object的新属性方法:
http://www.cnblogs.com/dolphinX/p/3348467.html相关文章推荐
- js中,全局变量与直接添加在window属性的区别
- js中为什么不能为值类型的变量动态添加属性呢?
- 全局变量是window的属性
- 属性绑定的innerHTML和直接纯js的innnerHTML区别
- js中局域变量与全局变量的区别
- iOS Category中添加属性和成员变量的区别
- JS_object添加变量属性_动态属性
- 20170702-变量说明,静态方法,类方法区别,断点调试,fork,yield协程,进程,动态添加属性等。。
- Bigcommerce: 给模板添加一个自定义的产品属性,使用$GLOBALS全局变量调用
- JS中的变量与函数中的属性的区别
- js 直接添加属性
- frame和iframe的name属性是js的全局变量
- js关于为DOM对象添加自定义属性的方式和区别
- 全局变量都是window对象的属性
- java将属性设置为私有,在给其添加get/set方法和直接把属性设置成public有什么区别
- iOS Category中添加属性和成员变量的区别 评论也值得思考
- DOM 中的 id 属性会往全局变量中添加 id 值的变量
- JS点击任意标签获得该标签属性,以获得ID为例,以及AJAX的异步原理和 $(document).ready()与window.onload加载方法的区别
- js变量在属性里的写法 常用mark 多个DL遍历添加一个父级DIV
- javascript全局变量都是window对象的属性