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

时间:2018-04-11 17:42:01

标签: javascript typeof

这真的撕裂了我的JS概念。这里有什么问题?

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

1 个答案:

答案 0 :(得分:5)

name变量实际上属于window.name,可让您设置窗口的名称。

来自MDN

  

窗口名称主要用于设置目标   超链接和表格。

进一步向下写道:

  

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

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

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

<强>演示

(function() {
  var name = 123;
  console.log(typeof name);
  console.log(name);
})();

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