Joh*_*ick 20
JavaScript变量未输入.
但是,JavaScript值是.相同的变量可以更改(分配一个新值),例如,从未初始化到数字到布尔到字符串(不是你想要这样做!):
var x; // undefined
x = 0; // number
x = true; // boolean
x = "hello"; // string
Run Code Online (Sandbox Code Playgroud)
Javascript是动态类型的,而其他语言,例如C#和Java,是静态类型的.这意味着在Javascript变量中可以重新分配给任何类型的值,因此您不需要显式地表示变量的类型或函数的返回类型.如果您在静态类型语言中看到这样的代码
int x = 5;
x = "hello";
Run Code Online (Sandbox Code Playgroud)
你理所当然地期望编译器开始引起一场大讨厌TypeError.另一方面,Javascript很乐意运行此代码,即使类型已更改.
var x = 5;
x = "hello";
Run Code Online (Sandbox Code Playgroud)
由于变量可以更改类型,因此编译器无法了解有关它们的更多信息.你应该期望Javascript的工具不如Java/C#的工具,只要像代码完成那样有用的细节.在编译时将捕获更少的错误,您将不得不进行比您可能习惯的更多的运行时调试.
也就是说,这也使您可以更自由地使用变量,并且可以随意更改类型,这通常很方便.如果你愿意,你可以编写这样的代码:
var x; //typeof x === "undefined"
x = "Hello, world!"; //typeof x === "string"
x = 42; //typeof x === "number"
x = false; //typeof x === "boolean"
x = {}; //typeof x === "object"
Run Code Online (Sandbox Code Playgroud)