即使已分配号码,typeof name也会返回字符串

ait*_*han 2 javascript typeof

这真的撕裂了我的JS概念.这有什么不对的?

const NAME = 'chusss';
var name = 123;
console.log(typeof name); // string, wasnt it supposed to print number?
console.log(name); // 123
Run Code Online (Sandbox Code Playgroud)

Kri*_*itk 5

该name变量实际上属于window.name允许您设置窗口名称的变量.

来自MDN

窗口名称主要用于设置超链接和表单的目标.

进一步下来写道:

不要将值设置为unstring,因为它的get方法将调用toString方法.

因此,您总是会返回一个字符串.


如果您仍想使用该name变量但不希望与之发生冲突window.name,则将代码包装在即时调用的函数表达式(IIFE)中,并从功能范围中受益.

演示

(function() {
  var name = 123;
  console.log(typeof name);
  console.log(name);
})();
Run Code Online (Sandbox Code Playgroud)


如果在node.js中运行此代码,则不会观察到该行为,因为name它不是global对象的属性,因此未在全局范围中定义.