📜  JS++ |变量和数据类型

📅  最后修改于: 2022-05-13 01:54:56.687000             🧑  作者: Mango

JS++ |变量和数据类型

在本教程中,我们将介绍 JS++ 中的变量。让我们从一个例子开始。创建一个新文件夹并将其命名为“变量”。然后创建一个新文件并将其命名为“Variables.jspp”。编写以下代码:

external $;
    
string firstString = "This is a string.";
int firstInt = 1;
double firstDouble = 1.1;
bool firstBool = true;

$("#string_content").text(firstString);
$("#int_content").text(firstInt);
$("#double_content").text(firstDouble);
$("#bool_content").text(firstBool);

将 Variables.jspp 保存到您的 Variables 文件夹。然后创建第二个名为“Variables.html”的文件并写入以下内容:


Variables program


将 Variables.html 保存到您的 Variables 文件夹中。编译 Variables.jspp,然后在浏览器中打开 Variables.html。如果一切正常,您的文档应该会显示 Variables.jspp 中四个变量的值。

  • 变量和类型

    当我们在 Variables.jspp 中声明我们的变量时,我们给了每个变量一个类型: stringintdoublebool 。可以使用这种类型化变量的事实是 JS++ 的一个重要特性,它代表了与 JavaScript 的关键区别。在 JavaScript 中,您使用var关键字声明一个变量,并且这些变量没有类型。例如,同一个变量可能首先包含一个字符串,然后是一个数字,然后是一个布尔值。相比之下,在 JS++ 中,当您将变量声明为属于给定类型时,您会告诉编译器该变量将仅保存该特定类型的数据。例如, string变量保存字符序列, int变量保存整数, double变量保存浮点数, bool变量保存逻辑值(true 和 false),等等。

    如果您的程序不小心将错误类型的值分配给类型化变量会发生什么?这会导致编译失败,而不是运行时错误。例如,再看一行:

    bool firstBool = true;

    假设您将其更改为:

    bool firstBool = "This is a string, not a bool.";
    

    您的程序将不再编译。如果您尝试,编译器会抱怨它无法将string转换为bool

    为什么这类问题导致编译失败而不是运行时错误更好?答案是,它使错误更容易在开发的早期阶段被发现和修复。该错误不太可能隐藏在代码的某些复杂部分中,只会在程序上线后的关键阶段出现。这在大型项目和团队中特别有用。在这方面,JS++ 提供了优于 JavaScript 的优势,因为它不使用类型变量,所以在编译时不会暴露出此类错误。

    注意: JS++ 不会强制你使用类型变量。如果你愿意,你仍然可以使用无类型变量,就像你在 JavaScript 中所做的那样——第 9 章会详细介绍。然而,当你使用类型变量时,如果程序编译,它们的值可以保证是正确的类型。

    我们在 Variables.jspp 中使用的四种类型stringintdoublebool属于 JS++ 的原始数据类型
    您可以在此处找到它们的完整列表:JS++ 原始数据类型

    关于数字原始数据类型,值得注意的是,JS++ 不仅包含int和 double,还包含byteshortunsigned intunsigned short (无符号类型只能包含正数)。这些类型在它们使用的内存量和它们可以容纳的数字范围内都有所不同。

    关于文本数据类型,JS++ 包含char以及string :在您知道变量应该包含单个字符的情况下,将变量声明为 char 是合适的。更一般地说,JS++ 中种类繁多的原始数据类型为您选择最适合您的目的的变量类型提供了很大的灵活性。

    JS++ 数据类型不限于其原语。例如,还有函数类型、数组类型、回调类型和用户自定义类型。我们将在后续教程中检查所有这些。然而,在本教程中,重点仍将放在原始类型上。

  • 声明和初始化变量

    在 Variables.jspp 中,我们在单独的语句中声明了四个变量,但是我们将每个变量初始化为与声明它相同的状态。但是,您不必引入这样的变量。例如,您可以在一个语句中声明一个变量,然后再对其进行初始化:

    bool firstBool;
    // ...
    firstBool = true;
    

    您还可以在单个语句中声明多个相同类型的变量:

    char firstChar, secondChar, thirdChar;

    并且你可以在声明它们时初始化多个相同类型的变量:

    char firstChar = `a`, secondChar = `b`, thirdChar = `c`;

    如果变量在声明之后但在初始化之前被访问,会发生什么?看看,让我们更改Variables.jspp的代码:

    external $;
        
    string firstString;
    int firstInt;
    double firstDouble;
    bool firstBool;
    
    $("#string_content").text(firstString);
    $("#int_content").text(firstInt);
    $("#double_content").text(firstDouble);
    $("#bool_content").text(firstBool);

    如果编译这段代码,然后在浏览器中打开 Variables.html,您会看到每个变量都设置为默认值: firstString设置为“”(空字符串), firstIntfirstDouble设置为 0,而firstBool设置为 false。您可以通过上面的链接查看 JS++ 原始数据类型的默认值的完整列表。

  • 变量和范围

    变量的范围是程序中该变量可见的部分(可通过名称访问)。在 JS++ 中,变量的范围由声明它的代码块(一对花括号内的一段代码)确定:变量在声明后立即从同一块中的任何后续位置可见。例如,考虑:

    {
        string firstString;
        firstString = "Another string.";
    }

    这里没有问题,因为firstString firstString修改的,但在同一块内。相比之下,考虑:

    {
        string firstString;
    }
    
    firstString = "Another string.";

    现在有一个问题:这段代码无法编译,因为firstString在声明它的块之外是不可见的。

    当在每个显式代码块(即由一对花括号定义的每个块)之外声明变量时,作用域如何工作?在这种情况下,变量在声明后可以从文件中的任何位置看到。这也适用于文件不包含任何显式代码块的情况,例如在 Variables.jspp 中。