You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中为何typeof name返回string?明明已赋值为number

为啥你的name变量类型会“翻车”?

哈哈,这个坑我刚学JS的时候也踩过!核心原因是你不小心碰了浏览器全局对象(window)的一个特殊内置属性——window.name。

先拆解你的代码:

const NAME = 'chusss'; 
var name = 123; 
console.log(typeof name); // 预期number,实际string
console.log(name); // 你看到的"123"其实是字符串类型,只是控制台显示容易让你误以为是数字

关键知识点:

  • 在浏览器全局作用域里,用var声明的变量会自动挂载到window对象上。所以你写的var name = 123,本质就是给window.name赋值。
  • window.name是个天生有“强迫症”的属性:它的取值永远只能是字符串类型。不管你给它赋数字、布尔值还是对象,JS都会自动把值转换成字符串。比如你赋123,会被转成"123";赋true会变成"true";甚至赋对象会变成"[object Object]"。
  • 至于const NAME = 'chusss',因为const(还有let)声明的全局变量不会挂载到window上,所以它和window.name完全没关系,不会影响到后面的name变量。

怎么验证?

你可以在控制台多敲两行代码确认:

console.log(name === "123"); // 返回true,说明它确实是字符串
console.log(window.name === name); // 返回true,证明你操作的就是window的内置name属性

怎么避免这种坑?

  • 尽量别在全局作用域用var声明变量,改用let或const,它们不会挂载到window上,也就不会和内置属性冲突。
  • 如果一定要用全局变量,起个独特点的名字,比如加前缀(myName、appUserName),别用name这种容易撞车的通用命名。

内容的提问来源于stack exchange,提问作者aitchkhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:46:04