变量声明与数据类型
变量是存储数据的容器,JavaScript 中声明变量有多种方式,每种各有特点。
变量声明
var 声明
JavaScript
var name = 'Tom';
var age = 25;
特点:函数作用域,存在变量提升,可重复声明。
JavaScript
console.log(x); // undefined(提升)
var x = 10;
var y = 1;
var y = 2; // 允许重复声明
let 声明
JavaScript
let name = 'Tom';
let age = 25;
特点:块级作用域,不存在提升导致的未定义访问,不可重复声明。
JavaScript
// console.log(x); // ReferenceError
let x = 10;
let y = 1;
// let y = 2; // SyntaxError
const 声明
JavaScript
const PI = 3.14;
const config = { port: 3000 };
特点:声明时必须初始化,不可重新赋值。对象属性仍可修改。
JavaScript
const arr = [1, 2, 3];
arr.push(4); // 允许
// arr = [5, 6]; // TypeError
三种声明对比
| 特性 | var | let | const |
|---|---|---|---|
| 作用域 | 函数 | 块 | 块 |
| 提升 | 是(undefined) | 是(TDZ) | 是(TDZ) |
| 重复声明 | 允许 | 禁止 | 禁止 |
| 重新赋值 | 允许 | 允许 | 禁止 |
TDZ(暂时性死区):变量在声明前不可访问。
数据类型
基本类型
JavaScript
// Number
let age = 25;
let price = 99.9;
let inf = Infinity;
let nan = NaN;
// String
let name = 'Tom';
let msg = "Hello";
let template = `Hi, ${name}`; // 模板字符串
// Boolean
let isActive = true;
let isDone = false;
// Undefined
let x; // undefined
let y = undefined;
// Null
let empty = null;
// Symbol
let id = Symbol('id');
let id2 = Symbol('id');
console.log(id === id2); // false
typeof 运算符
JavaScript
typeof 25; // "number"
typeof 'hello'; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof null; // "object"(历史遗留)
typeof Symbol(); // "symbol"
typeof {}; // "object"
typeof []; // "object"
typeof function(){};// "function"
类型转换
JavaScript
// 转字符串
String(123); // "123"
(123).toString(); // "123"
123 + ''; // "123"
// 转数字
Number('123'); // 123
parseInt('123px'); // 123
+'123'; // 123
// 转布尔
Boolean(1); // true
Boolean(0); // false
Boolean(''); // false
!!'hello'; // true
变量命名规则
基本规则
- 只能包含字母、数字、下划线和 $
- 不能以数字开头
- 区分大小写
- 不能使用保留字
JavaScript
// 合法命名
let userName;
let _private;
let $element;
let firstName2;
// 非法命名
// let 2name;
// let user-name;
// let class;
命名规范
| 规范 | 示例 | 用途 |
|---|---|---|
| 驼峰式 camelCase | userName | 变量、函数 |
| 帕斯卡式 PascalCase | UserInfo | 类、构造函数 |
| 全大写下划线 | MAX_SIZE | 常量 |
| 下划线前缀 | _private | 私有属性约定 |
JavaScript
// 推荐命名
let firstName = 'Tom';
let isLoading = false;
const API_KEY = 'abc123';
// 见名知意
let userAge = 25; // 好
let a = 25; // 差
let itemList = []; // 好
let arr = []; // 差
要点总结
- 优先使用
const,需要重新赋值时用let,避免使用var typeof null返回"object"是历史遗留问题- 模板字符串用反引号,支持插值和多行
- 变量命名遵循驼峰式,常量用全大写下划线
- TDZ 让
let/const在声明前不可访问,避免未定义行为