window.name的那些事

919 阅读1分钟

题目:

var name;

console.log(name);

console.log(typeof name);

按照正常思路来说,只是声明了name变量并未赋值,所以按常理来说应该输出:

undefined

"undefined"

但是运行结果为

究其原因,是因为window存在一个叫name的属性

此属性为空,实际上,开发者定义的所有变量,都会成为window的属性,如果变量没有被赋值,则该变量不会覆盖window上的同名属性。

那么如果把题目改成这样呢?

var name = undefined;
console.log(name);
console.log(typeof name);

直接上结果:

是不是又大吃一惊。。。

打开window对象看一下:

字符串类型的undefined,也就是说,不论给name赋啥值(null和object也不例外,分别被转换为 name:"null" 和name: "[object Object]"),都会被转换为字符串类型,所以,在开发中最好避开对name的直接使用