2.1 JavaScript 中的变量
JavaScript 是一种灵活且动态的编程语言,支持多种方式来声明变量和处理数据类型。在这堂课里,我们会讨论三种主要的变量声明方式(var
、let
、const
)和 JavaScript 中的基本数据类型。
JavaScript 中的变量
JavaScript 是动态类型语言。变量没有固定的类型。你可以在任何时候给变量赋任何值(不过有一些细节要注意)。
要创建一个变量,你需要写出这样的结构:
var name;
你可以马上给变量赋个值:
var name = value;
其实 JavaScript 有整整三种方式来创建变量。我们现在来详细讨论一下它们。
var 操作符
使用 var
声明的变量具有函数或全局作用域。它们会被“提升”(hoisting),这意味着在代码执行时,它们的声明会被提到作用域的顶部。
例子:
console.log(x); // undefined
var x = 10;
console.log(x); // 10
在这个例子中,变量 x
被提升到它作用域的顶部,因此第一个 console.log
输出 undefined
。
换句话说,“提升”把我们的代码变成了这样:
var x;
console.log(x); // undefined
x = 10;
console.log(x); // 10
let 操作符
开发者们很想改变 var
操作符的行为,但他们害怕破坏已经编写的几百万行代码。所以,他们只是想出了另一个操作符,虽然也是创建变量,但行为稍有不同。
用 let
声明的变量具有块级作用域,这意味着它们只在它们被声明的代码块(通常是大括号 {})中可用。let
不像 var
那样会被提升。
例子:
变量 y
只在 if
代码块内存在。
if (true) {
let y = 20;
console.log(y); // 20
}
console.log(y); // ReferenceError: y is not defined
const 操作符
用 const
声明的变量也具有块级作用域,且在初始化后不能被重新赋值。不过,这并不意味着通过 const
声明的对象不可变——它们的属性可以修改。
也就是说,变量不能变,但它引用的对象可以变。想做得更好,但结果总是一如既往的糟糕。
例子:
在这个例子中,常量 x
不能被重新赋值,但对象 obj
可以被修改。
const x = 30;
console.log(x); // 30
x = 40; // TypeError: Assignment to constant variable.
const obj = { name: 'Alice' };
obj.name = 'Bob'; // 这是允许的
console.log(obj.name); // Bob
2.2 基本数据类型
JavaScript 支持几种基本数据类型,它们是简单的值,不是复杂的对象。
Number 类型
代表任何数值,包括整数和浮点数。
例子:
let num = 42;
let pi = 3.14;
String 类型
代表文本数据:字符串、字符、表情符号。所有看起来像字符串的东西全算在这儿。
例子:
let greeting = "Hello, world!";
let facepalm = "🤦";
let char = 'x';
Boolean 类型
代表逻辑值 true
或 false
。
let isTrue = true;
let isFalse = false;
Null 类型
代表有意的空值。
let empty = null;
如果一个类型含有一个表示空的值,那它到底是一个独特的值还是一个独特的类型呢?
Undefined 类型
代表一个已声明但尚未初始化的变量的值。
let notAssigned;
console.log(notAssigned); // undefined
2.3 比较 var, let 和 const
让我们再来比较一下这三种创建变量的方法:
特性 | var | let | const |
---|---|---|---|
作用域 | 函数或全局 | 块级 | 块级 |
提升 (Hoisting) | 是的,但初始化不提升 | 否 | 否 |
重新赋值 | 可以 | 可以 | 不可以 |
初始化 | 非必要 | 非必要 | 必须 |
JavaScript 提供了几种声明变量的方法,每种都有其特性和适用性,具体取决于上下文。由于 var
的提升和全局作用域特性,它使用得较少。
let
和 const
在现代 JavaScript 中因其块级作用域和对重新赋值的控制而更受青睐。
基本数据类型允许处理基本的数据结构,提供了创建复杂应用程序所需的基本功能。这是全世界最流行的语言哦:)
GO TO FULL VERSION