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

如何在javascript中使用类型化变量?,javascript,Javascript,有没有办法在javascript中使用类型化变量?像integer、string、float…Javascript是一种松散类型的语言,因此不存在其他一些语言中使用的类型。Javascript是动态类型的,而其他语言,例如C#和Java,是静态类型的。这意味着在Javascript中,变量可以被重新分配给任何类型的值,因此您永远不需要显式地表示变量的类型或函数的返回类型。如果您在静态类型语言中看到这样的代码 int x = 5; x = "hello"; 您完全有理由期望编译器开始抛出一个严重

有没有办法在javascript中使用类型化变量?像integer、string、float…

Javascript是一种松散类型的语言,因此不存在其他一些语言中使用的类型。

Javascript是动态类型的,而其他语言,例如C#和Java,是静态类型的。这意味着在Javascript中,变量可以被重新分配给任何类型的值,因此您永远不需要显式地表示变量的类型或函数的返回类型。如果您在静态类型语言中看到这样的代码

int x = 5;
x = "hello";
您完全有理由期望编译器开始抛出一个严重的
TypeError
。另一方面,Javascript将很高兴地运行此代码,即使类型已更改

var x = 5;
x = "hello";
因为变量可以改变类型,编译器不能知道关于它们的太多信息。就代码完成等有用细节而言,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"

JavaScript变量不是类型化的

不过,JavaScript值是。同一变量可以更改(分配一个新值),例如,从未初始化到数字,从布尔值到字符串(这不是您想要的!)


Javascript的主要特征之一是它是弱类型语言。为什么您需要强类型?

我建议您阅读以下内容:

javascript是一种弱的动态类型。它是动态的,因为变量类型是在运行时确定的,并且是松散类型,因为您可以执行此操作

var letter = "2";
var number = 2;
console.log(letter+number);
这在java、c#或任何其他静态和严格类型语言中都会出现错误,但在javascript中,结果是“22”(这是因为javascript是弱类型或松散类型)

现在..除了保持使用类型化值之外,还有其他语言,比如clojure或dart,出于性能原因,可以使用带有类型化参数的函数或方法,javascript不允许这样做,只接受动态值,比如ruby


我希望这有助于你理解我的蹩脚英语:D在Javascript中不可能,但如果你真的需要它,你应该检查TypeScript。它是添加可选静态类型的Javascript超集。它还有基于类的编程。

写“为什么不应该使用它/你不应该使用它”的人是错误的。在下一个JavaScript2.x规范中,有一个添加强类型变量的计划

同时,您可以使用非常简单的解决方案来模拟强类型:

var = Object.create( String );
之后,在许多IDE(包括IntelliJ IDEA)中进行自动完成将非常有效,并且您已经声明并初始化了指定类型的对象


阅读更多信息。

有一种简单的方法可以使用类型化数组在Javascript中模拟类型化变量

var a = new Int8Array(1);
a[0]=5;
a[0]=~a[0]; // -6
var b = new Uint8Array(1);
b[0]=5;
b[0]=~b[0]; // 250
我知道这样做的唯一有用的原因是,在从类型化语言翻译代码时,需要对无符号整数使用逐位运算,而在Javascript中也必须这样做。默认情况下,Javascript整数是有符号的,按位操作可能会弄乱符号

仅为单个变量创建类型化数组通常不利于性能

经常

var b=5;
b=(~b)&0xff; // 250
这样做很好,只需在Javascript中键入32位无符号整数即可避免按位操作的问题


JS_字节
类字节
{
构造函数(值)
{
此.Number=新的UINT8阵列(1);
此.Number[0]=值;
}
得到
{
返回此.编号[0];
}
集合(新值)
{
此.Number[0]=新值;
}
};
//装载
函数加载_页()
{
让Byte_Num=新字节(12);
document.write(Byte_Num.Get.toString()+“
”;//->12 字节_Num.Set=14; document.write(Byte_Num.Get.toString()+“
”;//->14 字节_Num.Set=256; document.write(Byte_Num.Get.toString()+“
”;//->0 }
您可以用于值的定义类型

虽然JavaScript不是显式的类型化语言,但它就像是一种无类型的填充语言三明治,上面(在IDE中)和下面(在编译器中)有更强的类型化表示,以支持IDE友好和优化器友好的代码,有许多技巧可用于获取显式类型

JavaScript实现包括实时编译器(JIT),用于将JavaScript转换为快速机器语言。他们使用的技巧之一是将其转换为中间的强类型形式。如果您的目标是性能,那么您可以通过支持
const
变量并将类型强制为更显式的类型来简化工作

例如,JavaScript支持类型化数组之外的两种数字类型:64位浮点(又称双精度)和32位整数。虽然默认值为double,但可以使用
|0
将数字强制为整数,如下所示:

const myInt = 3.0 | 0;
您在高性能代码中经常看到这种模式,特别是在类型化数组之前编写的代码

var a = new Int8Array(1);
a[0]=5;
a[0]=~a[0]; // -6
var b = new Uint8Array(1);
b[0]=5;
b[0]=~b[0]; // 250
使用显式类型的另一个原因是使开发人员的工作更轻松。微软发明了TypeScript,这样IDE(特别是他们的Visual Studio)就可以提供代码完成、重构(特别是重命名)和错误检测。它通过成为强类型语言来实现这一点。TypeScript的语言目标之一是为Java提供未来的方向