神奇的window.name:不要声明全局变量name

来源:互联网 发布:淘宝禁止出售兴奋剂 编辑:程序博客网 时间:2024/04/29 01:25

在技术研讨中,偶然发现一个非常有意思的变量——window.name,这是一个window默认自带的属性,类型为“string”,不可改变其类型,也就是说,如果对其赋值,值必须为string类型,否则会自动调用值的toString方法,将值转换为string类型。

//  输出true,表明为window的自身属性console.log(window.hasOwnProperty('name'))//  输出为stringtypeof window.name//  更改其类型为numberwindow.name = 100//  依旧输出为stringtypeof window.name

从上面可以看出,实际应用中,如果在window的上下文下,声明了全局变量name,并将其指向其他类型,如Element,那一定会出现很多诸如“undefined”、“Uncaught TypeError:is not a function”的错误,如下:

//  即使是这样,也覆盖不了window.name的默认类型var name = document.body;//  添加DOM内容//  浏览器提示VM1446:1 Uncaught TypeError: name.appendChild is not a functionname.appendChild(document.createTextNode('Hello,World!'))//  输出stringconsole.log(typeof(name))

结论

千万不要在上下文为window的环境中声明全局变量name

0 0
原创粉丝点击