在本教程中,我们将介绍JS++中的变量。让我们从一个例子开始。创建一个新文件夹并将其命名为“Variables”。然后创建一个新文件,并将其命名为“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);
保存变量。jspp到你的Variables文件夹。然后创建第二个名为“Variables.html”的文件,并写入以下内容:
<!DOCTYPE html> <title>Variables program</title> <body> <p id="string_content"></p> <p id="int_content"></p> <p id="double_content"></p> <p id="bool_content"></p> <script src="http://code.jquery.com/jquery-1.12.4.min.js"></script> <script src="Variables.jspp.js"></script> </body> </html>
保存变量。html到你的变量文件夹。编译变量。然后打开变量。浏览器中的html。如果一切正常,文档应该在变量中显示四个变量的值。jspp。
-
变量和类型
当我们在变量中声明变量时。jspp,我们给他们每人一个类型:
string
,int
,double
和bool
.可以使用这种类型化变量是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
.为什么对一个孩子来说更好 这类问题会导致编译失败,而不是运行时错误 ? 答案是,在开发的早期阶段,它使bug更容易发现和修复。在你的程序上线后的一个关键阶段,这个bug不太可能一直隐藏在你代码的某个复杂部分中。这在大型项目和团队中尤其有用。在这方面,JS++比JavaScript有优势,JavaScript在编译时不会暴露这类错误,因为它不使用类型化变量。
注: JS++没有 武力 你需要使用类型化变量。如果愿意,您仍然可以使用非类型化变量,就像在JavaScript中一样——第9章将对此进行详细介绍。但是,当您使用类型化变量时,如果程序编译,它们的值将保证为正确的类型。
我们在变量中使用的四种类型。jspp-
string
,int
,double
和bool
–属于 基本数据类型 JS++。 你可以在这里找到它们的完整列表: JS++基本数据类型关于数字基元数据类型,值得注意的是,JS++不仅包含
int
双倍,但也byte
,short
,unsigned int
和unsigned short
(无符号类型只能包含正数)。它们在这两种类型的内存中使用的数字和数量都会有所不同。关于文本数据类型,JS++包含
char
以及string
:如果您知道一个变量应该包含一个单独的字符,那么将您的变量声明为字符是合适的。更一般地说,JS++中的各种基本数据类型为您选择最合适的变量类型提供了很大的灵活性。JS++数据类型不限于其原语。例如,还有函数类型、数组类型、回调类型和用户定义类型。我们将在后续教程中研究所有这些。然而,在本教程中,重点仍然是基本类型。
-
声明和初始化变量
在变量中。在jspp中,我们在单独的语句中声明了这四个变量,但我们在声明的相同状态下初始化了每个变量。然而,你不必引入这样的变量。例如,您可以在一条语句中声明一个变量,然后稍后对其进行初始化:
bool firstBool; // ... firstBool = true;
您还可以在一条语句中声明多个相同类型的变量:
char firstChar, secondChar, thirdChar;
声明时,可以初始化同一类型的多个变量:
char firstChar = `a`, secondChar = `b`, thirdChar = `c`;
如果一个变量在声明之后但在初始化之前被访问,会发生什么?看看,让我们更改变量的代码。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);
如果你编译这段代码,然后打开变量。在浏览器中,您会看到每个变量都设置为默认值:
firstString
设置为“”(空字符串),firstInt
和firstDouble
设置为0,而firstBool
设置为false。通过上面的链接,您可以看到JS++基本数据类型默认值的完整列表。 -
变量和范围
变量的作用域是程序中该变量可见(可通过名称访问)的部分。在JS++中,变量的作用域由声明它的代码块(一对大括号内的一段代码)决定:在同一块的任何后续位置声明后,变量立即可见。例如,考虑:
{ string firstString; firstString = "Another string."; }
这里没有问题,因为
firstString
修改后firstString
已声明,但在同一块中。相比之下,请考虑:{ string firstString; } firstString = "Another string.";
现在有一个问题: 此代码无法编译,因为
firstString
在声明它的块外不可见。当在每个显式代码块之外声明变量时,作用域是如何工作的 (即,由一对花括号定义的每个块)?在本例中,声明变量后,该变量在文件中的任何位置都可见。这也适用于文件不包含任何显式代码块的情况,如在变量中。jspp。