Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么变量类型总是;“字符串”;如果是';s不是由var、let或const初始化的,或者如果它是';s仍然被分配到数字类型?_Javascript - Fatal编程技术网

Javascript 为什么变量类型总是;“字符串”;如果是';s不是由var、let或const初始化的,或者如果它是';s仍然被分配到数字类型?

Javascript 为什么变量类型总是;“字符串”;如果是';s不是由var、let或const初始化的,或者如果它是';s仍然被分配到数字类型?,javascript,Javascript,我在处理变量和数据类型时发现,我也可以定义变量,而无需使用var、let或const进行初始化。但是,当我定义一个没有var的变量时,让或const始终成为“string”类型。如果我给变量赋值,那么它的类型也会变成字符串。如果我加上两个数字,比如10和20,它得到add,结果是30,但类型仍然显示为字符串。如果有人能解释为什么它总是显示字符串 car=“Mercedes”; 控制台。日志(汽车);//输出梅赛德斯 控制台日志(车辆类型);//输出字符串 car=123; 控制台。日志(汽车)

我在处理变量和数据类型时发现,我也可以定义变量,而无需使用var、let或const进行初始化。但是,当我定义一个没有var的变量时,让或const始终成为“string”类型。如果我给变量赋值,那么它的类型也会变成字符串。如果我加上两个数字,比如10和20,它得到add,结果是30,但类型仍然显示为字符串。如果有人能解释为什么它总是显示字符串

car=“Mercedes”;
控制台。日志(汽车);//输出梅赛德斯
控制台日志(车辆类型);//输出字符串
car=123;
控制台。日志(汽车);//产出123
控制台日志(车辆类型);//输出字符串
car=10+20;
控制台。日志(汽车);//产出30

控制台日志(车辆类型);//输出字符串
,不带
var
let
const
,变量为全局变量,即全局对象上的属性。在浏览器中,它是
窗口
对象。设置
car=123
与设置
window.car=123
相同,并将生成类型为
number
的值

但有些窗口属性是特殊的。例如,设置
name=123
window.name=123
实际上调用了一个setter,并且属性
name
将始终具有type
string

任何财产都可以通过这种方式变得特别。例如,以下定义将使您的示例如您所述起作用:

Object.defineProperty(window, 'car', { 
  set: function(x) { this._car = String(x); },
  get: function() { return this._car; } 
});

这里的工作和预期的一样。我能想到这种奇怪行为可能发生的情况,但它们很奇怪,你能把问题编辑成一个吗?在你的真实代码中,你真的使用变量名
car
,或者可能是
名称
状态
之类的问题?鉴于问题中的确切代码,您描述的问题不会出现。运行代码片段,自己查看。请共享正确的演示。此处的输出与您在此处的注释不同。@JainamParikh在Chrome控制台、Firefox、Nodejs REPL或Stackoverflow的“Run code Snippet”中运行上述代码可提供预期的响应(字符串、数字、数字)。也许这是一个特定于运行时的bug,在这种情况下,请提供复制所需的设置和代码。但是OP说:我从一开始就使用名为car的变量,
car
不是我在看到注释之前键入的那些特殊全局属性之一。但是带有自定义getter/setter的属性仍然是OP所看到的内容的可能解释。更新以澄清问题。@Snow是的,我知道了。我使用
name
作为变量名,它只显示字符串。如果我使用
car
,那么它遵循规则。非常感谢。