JavaScript中var声明name变量typeof结果异常的原因咨询
为什么
name和age变量的类型检测结果不一致? 这问题挺有意思,核心原因和浏览器环境里的全局内置属性有关,咱们一步步拆解:
1. 全局name是个特殊角色
在浏览器的全局作用域中,name其实是window对象的一个内置属性,而且这个属性有个硬性规则:它永远只能是字符串类型。不管你给它赋什么值,JavaScript引擎都会自动把值转换成字符串再存储。
比如你执行var name = 45,本质上是给window.name赋值,数字45会被强制转成字符串"45",所以typeof name自然返回"string"。你可以自己验证:直接在控制台输入window.name,默认是空字符串;赋值数字后再查看,它已经变成了字符串形式的"45"。
2. age是普通全局变量
而age不是浏览器内置的全局属性,用var age = 45声明时,就是创建了一个普通的全局变量,它的类型完全由你赋值的内容决定——45是数字类型,所以typeof age返回"number"。
3. 怎么避开这个特殊行为?
如果想让name作为普通变量使用,只要把它放在局部作用域里就行,比如函数内部:
function test() { var name = 45; console.log(typeof name); // 输出 "number" } test();
因为局部作用域的变量会覆盖全局的window.name,这时它就只是个普通变量了。
这是约定吗?
严格来说这是浏览器环境的规范要求,window.name最初被设计用来在不同窗口/iframe之间传递数据,为了保证跨场景的兼容性,规范明确规定它必须是字符串类型,所以才有了这个自动转换的行为。
内容的提问来源于stack exchange,提问作者rameezmeans
相关产品推荐
相关产品推荐

