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 = "张三";变量命名规则
- 变量名必须以字母、下划线(_)或美元符号($)开头
- 变量名可以包含字母、数字、下划线和美元符号
- 变量名区分大小写
- 不能使用保留字作为变量名
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; // trueUndefined(未定义)
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); // falseBigInt(大整数)
ES2020 引入,用于表示任意大的整数:
javascript
let bigNumber = 123456789012345678901234567890n;复合数据类型(对象类型)
Object(对象)
javascript
let person = {
name: "张三",
age: 25,
isStudent: false
};
// 访问对象属性
console.log(person.name); // "张三"
console.log(person["age"]); // 25Array(数组)
javascript
let fruits = ["苹果", "香蕉", "橙子"];
let numbers = [1, 2, 3, 4, 5];
let mixed = [1, "字符串", true, null];
// 访问数组元素
console.log(fruits[0]); // "苹果"
// 数组长度
console.log(fruits.length); // 3Function(函数)
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 的基础,它们决定了如何存储和操作数据。