JavaScript 变量用于存储以后可以更改的数据。这些变量可以被认为是有名的容器。你可以将数据放入这些容器中,然后仅仅通过命名容器来引用这些数据。
在 JavaScript 程序中使用一个变量之前,你必须声明它。在 JavaScript 中,你可以用四种方式声明变量:
let 和 const 关键字是在 2015 年(ES6)引入到 JavaScript 的。在 ES6 之前,仅使用 var 关键字声明 JavaScript 中的变量。在本节中,我们将讨论 'var' 关键字。我们将在后续章节中覆盖 'let' 和 'const' 关键字。
JavaScript 中的变量声明
你可以按照以下语法来声明变量而不使用任何关键字。
<script>
Money = 10;
Name = "tutorialspoint";
</script>
此外,你可以使用 var 关键字来声明变量,如下面所示。
<script>
var money;
var name;
</script>
你也可以使用同一个 var 关键字声明多个变量,如下所示:
<script>
var money, name;
</script>
使用赋值运算符初始化变量
在变量中存储一个值被称为变量初始化。你可以在创建变量时或在你需要该变量时初始化它。
例如,你可以创建一个名为 money 的变量,并稍后为其分配值 2000.50。对于另一个变量,你可以在初始化时分配一个值,如下所示:
<script>
var name = "Ali";
var money;
money = 2000.50;
</script>
注意 - 仅在声明或初始化变量时使用 var 关键字,并且在一个文档中对任何变量名的一生只使用一次。你不应重新声明同一个变量两次。
JavaScript 是一种非类型化的语言。这意味着 JavaScript 变量可以保存任何类型的数据。与许多其他语言不同,在声明变量时不需要告诉 JavaScript 该变量将保存哪种类型的值。变量的值类型可以在程序执行期间更改,而 JavaScript 会自动处理它。
JavaScript 数据类型
在 JavaScript 中,变量可以持有动态数据类型的值。例如,你可以存储数字、字符串、布尔值、对象等数据类型的值到 JavaScript 变量中。
<script>
var num = 765;
var str = "欢迎";
var bool = false;
</script>
你将在 JavaScript 数据类型章节中详细了解数据类型。
JavaScript 变量名称(标识符)
在 JavaScript 中,使用唯一的字符序列来命名变量称为标识符。
以下是一些 JavaScript 中标识符命名的规则:
-
有效字符 - 在 JavaScript 中,变量名可以包含数字、字母字符以及像下划线 (_) 和美元符号 ($) 这样的特殊字符。JavaScript 变量名不应该以数字 (0-9) 开头。它们必须以字母或下划线字符开头。例如,123test 是一个无效的变量名,但 _123test 是有效的。
-
区分大小写 - 变量名是区分大小写的。这意味着
Name
和 name
是不同的标识符。
-
支持 Unicode - 标识符也可以包含 Unicode。因此,开发者可以用任何语言定义变量。
-
预留关键字 - 你不应该使用任何 JavaScript 预留关键字作为变量名。例如,break 或 boolean 作为变量名是不合法的。
JavaScript 中的美元符号 ($) 和下划线 (_)
你可以使用 $ 和 _ 在 JavaScript 中定义变量,因为 JavaScript 引擎认为这是有效的字符。
示例(演示标识符)
在这个例子中,我们使用 var 关键字定义了变量。第一个变量名以下划线开头,第二个变量名以美元符号开头。程序员可以取消注释第三个变量声明来检查当任何标识符以数字开头时 JavaScript 产生的错误。
<html>
<head>
<title> JavaScript 中的变量 </title>
</head>
<body>
<script>
var _abc = "嗨!";
var $abc = "你好!";
document.write("_abc " + _abc + "<br>");
document.write("$abc = " + $abc + "<br>");
</script>
</body>
</html>
它会产生以下结果:
_abc 嗨!
$abc = 你好!
JavaScript 中未定义的变量值
当你声明变量后没有初始化它时,它包含 undefined 值。然而,你也可以给变量分配 undefined 值。
让我们看下面的例子。
示例
<html>
<body>
<script>
var num;
document.write("num 的值是: " + num + "<br/>");
</script>
</body>
</html>
这会产生以下结果:
num 的值是: undefined
JavaScript 变量的作用域
变量的作用域是指在你的程序中它被定义的区域。JavaScript 变量只有两种作用域。
-
全局变量 - 全局变量具有全局作用域,这意味着它可以在 JavaScript 代码的任何地方定义。
-
局部变量 - 局部变量只能在其定义的函数内部可见。函数参数总是对该函数局部的。
在函数体内部,局部变量优先于同名的全局变量。如果你声明了一个与全局变量同名的局部变量或函数参数,实际上你是隐藏了全局变量。请参阅下面的例子。
示例
在下面的例子中,我们在函数外部定义了一个名为 myVar 的变量,并将其初始化为 '全局' 值。同样地,我们在 checkscope() 函数内定义了一个具有相同标识符的变量,并将其初始化为 '局部' 值。
我们在函数内部打印 myVar 变量的值。因此,局部变量优先于全局变量,并在输出中打印 '局部'。
<html>
<head>
<title> JavaScript 变量作用域示例</title>
</head>
<body onload="checkscope();">
<script>
var myVar = "全局";
function checkscope( ) {
var myVar = "局部";
document.write(myVar);
}
</script>
</body>
</html>
这会产生以下结果:
局部
示例
在下面的例子中,我们没有使用 var 关键字定义变量。name 变量包含字符串类型的值,number 变量包含浮点数据类型的值。
当我们不使用任何关键字定义变量时,JavaScript 认为它们是全局变量,并且可以在代码中的任何地方使用它们。
<html>
<head>
<title> 不带 var 关键字的变量 </title>
</head>
<body>
<script>
name = "tutorialspoint";
number = 10.25;
document.write("name = " + name + ", number = " + number + "<br>");
</script>
</body>
</html>
这会产生以下结果:
name = tutorialspoint, number = 10.25
此外,如果我们在使用 var 关键字声明变量并初始化之后,再次声明相同的标识符但不进行初始化,标识符不会丢失之前的值。让我们通过下面的例子来理解这一点。
示例
在下面的例子中,我们声明了 age 变量并初始化为 10。再次声明 age 变量但没有初始化。尽管如此,它仍然在输出中打印 10,因为它没有丢失前一次初始化的值。但是,如果我们更新 age 变量的值,它可以成功更新。
<html>
<head>
<title> 带 var 关键字的变量 </title>
</head>
<body>
<script>
var age = 10;
var age;
document.write("age = " + age + "<br>");
</script>
</body>
</html>
这会产生以下结果:
age = 10