如何在javascript中使用类型变量?

err*_*god 9 javascript

有没有办法在javascript中使用类型变量?像integer,string,float ...

Joh*_*ick 20

JavaScript变量未输入.

但是,JavaScript值是.相同的变量可以更改(分配一个新值),例如,从未初始化到数字到布尔到字符串(不是你想要这样做!):

var x;       // undefined
x = 0;       // number
x = true;    // boolean
x = "hello"; // string
Run Code Online (Sandbox Code Playgroud)

  • `0`不是`int`而是`number`,但是JS没有面向用户的整数类型(虽然它有整数运算并指定内部转换为整数)... (2认同)
  • @克里斯托夫谢谢。我学到了一些东西......并更新了答案。 (2认同)

Pet*_*son 6

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)

  • 不,他们不是.变量不是*值,而不是*一等公民.当在表达式中使用变量标识符时,**将*评估为它"命名"的值(或"最后分配").这是JavaScript中非常重要的区别.是的,我反对"变量的类型",因为*变量没有类型*.此外,术语"变量的寿命"是不正确的.变量具有*范围*,而*对象*(值)具有*生存期*. (3认同)
  • 在日常工作中,如果一位同事使用了"变量_x_的类型"这样的短语,那么反对是迂腐的 - 这可能是显而易见的.但是在这样一个关于JS语言是如何工作的问题的背景下,坚持使用正确的术语并不是迂腐.(所以我同意@pst对此.) (2认同)