Skip to content

JavaScript 变量和数据类型

在 JavaScript 中,变量用于存储数据值。了解变量和数据类型是学习 JavaScript 的基础。

变量声明

JavaScript 提供了三种方式来声明变量:

var

这是传统的变量声明方式,具有函数作用域:

javascript
var name = "张三";
var age = 25;

let

ES6 引入的块级作用域变量声明:

javascript
let name = "张三";
let age = 25;

const

ES6 引入的常量声明,值不能被重新赋值:

javascript
const PI = 3.14159;
const name = "张三";

变量命名规则

  1. 变量名必须以字母、下划线(_)或美元符号($)开头
  2. 变量名可以包含字母、数字、下划线和美元符号
  3. 变量名区分大小写
  4. 不能使用保留字作为变量名
javascript
// 合法的变量名
let myVariable;
let my_variable;
let $element;
let _private;
let myVariable2;

// 非法的变量名
let 2myVariable;  // 不能以数字开头
let my-variable;  // 连字符不被允许
let let;          // 不能使用保留字

数据类型

JavaScript 有以下数据类型:

基本数据类型(原始类型)

Number(数字)

javascript
let integer = 42;
let float = 3.14;
let negative = -10;
let scientific = 1.23e5;  // 123000

// 特殊的数字值
let infinity = Infinity;
let notANumber = NaN;

String(字符串)

javascript
let singleQuote = '单引号字符串';
let doubleQuote = "双引号字符串";
let templateLiteral = `模板字符串`;

// 字符串拼接
let firstName = "张";
let lastName = "三";
let fullName = firstName + lastName;  // "张三"

// 模板字符串
let greeting = `你好,${fullName}!`;

Boolean(布尔值)

javascript
let isTrue = true;
let isFalse = false;

// 布尔值常用于条件判断
let age = 18;
let isAdult = age >= 18;  // true

Undefined(未定义)

javascript
let emptyVariable;
console.log(emptyVariable);  // undefined

let explicitUndefined = undefined;

Null(空值)

javascript
let emptyValue = null;

Symbol(符号)

ES6 引入的新类型,表示唯一的值:

javascript
let sym1 = Symbol('foo');
let sym2 = Symbol('foo');
console.log(sym1 === sym2);  // false

BigInt(大整数)

ES2020 引入,用于表示任意大的整数:

javascript
let bigNumber = 123456789012345678901234567890n;

复合数据类型(对象类型)

Object(对象)

javascript
let person = {
    name: "张三",
    age: 25,
    isStudent: false
};

// 访问对象属性
console.log(person.name);      // "张三"
console.log(person["age"]);    // 25

Array(数组)

javascript
let fruits = ["苹果", "香蕉", "橙子"];
let numbers = [1, 2, 3, 4, 5];
let mixed = [1, "字符串", true, null];

// 访问数组元素
console.log(fruits[0]);  // "苹果"

// 数组长度
console.log(fruits.length);  // 3

Function(函数)

javascript
// 函数声明
function greet(name) {
    return `你好,${name}!`;
}

// 函数表达式
let add = function(a, b) {
    return a + b;
};

// 箭头函数
let multiply = (a, b) => a * b;

类型检测

可以使用 typeof 操作符来检测变量的数据类型:

javascript
console.log(typeof 42);           // "number"
console.log(typeof 'hello');      // "string"
console.log(typeof true);         // "boolean"
console.log(typeof undefined);    // "undefined"
console.log(typeof null);         // "object" (这是 JavaScript 的一个历史遗留问题)
console.log(typeof {});           // "object"
console.log(typeof []);           // "object"
console.log(typeof function(){}); // "function"

类型转换

JavaScript 会在某些情况下自动进行类型转换:

javascript
// 隐式转换
let result = "5" + 3;      // "53" (字符串拼接)
let result2 = "5" - 3;     // 2 (数值运算)

// 显式转换
let str = "123";
let num = Number(str);     // 123
let bool = Boolean(str);   // true
let str2 = String(num);    // "123"

变量作用域

全局作用域

在函数外部声明的变量具有全局作用域:

javascript
var globalVar = "我是全局变量";
let globalLet = "我也是全局变量";

函数作用域

使用 var 声明的变量具有函数作用域:

javascript
function myFunction() {
    var functionVar = "我是函数作用域变量";
    console.log(functionVar);  // 可以访问
}
// console.log(functionVar);  // 错误:无法访问

块级作用域

使用 let 和 const 声明的变量具有块级作用域:

javascript
if (true) {
    let blockVar = "我是块级作用域变量";
    const blockConst = "我也是块级作用域变量";
    console.log(blockVar);     // 可以访问
}
// console.log(blockVar);     // 错误:无法访问

理解变量和数据类型是掌握 JavaScript 的基础,它们决定了如何存储和操作数据。