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

时间:2012-03-11 22:58:42

标签: javascript

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

11 个答案:

答案 0 :(得分:20)

未输入JavaScript变量。

但是,

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

var x;       // undefined
x = 0;       // number
x = true;    // boolean
x = "hello"; // string

答案 1 :(得分:6)

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"

答案 2 :(得分:2)

在Javascript中不可能,但如果你真的需要它,你应该检查TypeScript。它是Javascript的超集,增加了可选的静态类型。它也有基于类的编程。

答案 3 :(得分:1)

Javascript的一个主要特征是它是弱类型语言。为什么你还需要强大的类型呢?

答案 4 :(得分:1)

我建议你读这个:

http://en.wikipedia.org/wiki/Strong_typing

javascript是一个弱且动态的类型..它是动态的,因为变量类型是在运行时确定的,并且是松散类型的,因为你可以执行此操作,例如

var letter = "2";
var number = 2;
console.log(letter+number);

这在java,c#或任何其他静态和严格类型的语言中都会出错,但在javascript中你会得到一个" 22"结果(这是因为javascript是弱类型或松散类型)

现在..你使用其他语言而不是使用类型值,比如clojure或dart,出于性能原因,你可以使用带有类型参数的函数或方法,javascript不允许这样做,只接受动态价值观,如红宝石......

我希望这有帮助,你可以理解我可怜的英语:D

答案 5 :(得分:0)

Javascript是一种松散类型的语言,所以不,没有其他语言习惯的类型。

答案 6 :(得分:0)

人们写作"为什么不能使用它/你不应该使用它"错了。在下一个Java Script 2.x规范中,计划添加强类型变量。

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

var = Object.create( String );

之后,在很多IDE(包括IntelliJ IDEA)中自动完成功能将很有效,并且您已声明并初始化了指定类型的对象。

详细了解my blog

答案 7 :(得分:0)

使用类型化数组在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位无符号整数,以避免按位操作出现问题。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays#Typed_array_views

答案 8 :(得分:0)

<html>
<head>
    <meta charset="utf-8">
    <title>JS_Byte</title>
    <script>
    class Byte 
    {
        constructor(Value) 
        {
            this.Number = new Uint8Array(1);
            this.Number[0] = Value;
        }
        get Get() 
        {
            return this.Number[0];
        }
        set Set(newValue) 
        {
            this.Number[0] = newValue;
        }
    };
    //On load
    function Load_Page()
    {
        let Byte_Num = new Byte(12);
        document.write(Byte_Num.Get.toString() + "<br>");// -> 12
        Byte_Num.Set = 14;
        document.write(Byte_Num.Get.toString() + "<br>");// -> 14
        Byte_Num.Set = 256;
        document.write(Byte_Num.Get.toString() + "<br>");// -> 0
    }
    </script>
</head>
<body onload="Load_Page()"> 
</body>

答案 9 :(得分:0)

您可以使用TypeScript来定义值的类型

答案 10 :(得分:0)

虽然JavaScript不是明确的类型化语言,但就像无类型填充语言三明治一样,上面(在IDE中)和下面(在编译器中)具有更强类型的表示形式。为了支持IDE友好和优化程序友好的代码,您可以使用许多技巧来获取显式类型。

JavaScript实现包括即时编译器(JIT),可将JavaScript转换为快速的机器语言。他们使用的技巧之一是将其转换为中间的强类型形式。如果您的目标是性能,则可以通过偏爱const变量并将类型强制为更明确的类型来使生活更轻松。

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

const myInt = 3.0 | 0;

您会在高性能代码中看到很多这种模式,尤其是在键入数组之前编写的内容。

拥有显式类型的另一个原因是使开发人员的生活更轻松。 Microsoft发明了TypeScript,以便IDE(尤其是Visual Studio)可以提供代码完成,重构(尤其是重命名)和错误检测的功能。它是通过强类型语言来实现的。 TypeScript的语言目标之一是为JavaScript提供未来的方向。由于这个目标,TypeScript是JavaScript的超集,因此不会向TypeScript添加任何在将来的JavaScript版本中无法提供的功能。同样,如果将来的JavaScript版本破坏了TypeScript,则会更改TypeScript以匹配JavaScript。

TypeScript不是JavaScript,那么为什么要启动它呢?因为即使您没有使用它,您的编辑器也可能会使用。由于TypeScript是JavaScript的超集,因此TypeScript编译器可以解析JavaScript,并为所有函数和变量生成类型信息。因此,如果您使用Visual Studio,WebStorm或带有TypeScript插件的编辑器,即使使用纯JavaScript,也可以获得类型信息! (如果您在JavaScript中使用TypeScript功能,聪明的人会警告您。)

事实上,我最近听到的反对使用TypeScript的争论之一是JavaScript编辑器已经变得如此出色(由于嵌入的TypeScript编译器),以至于优势不再超过拥有另一种语言的负担。

但是,具有强类型(从IDE的角度来看),有助于使编译器轻松猜测源文件如何连接在一起,支持const,并避免编写返回多个函数的函数。类型。