这真的撕裂了我的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)
该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对象的属性,因此未在全局范围中定义.