全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-07-03 8 分钟 ✍️ juanwangdev

变量声明与数据类型

变量是存储数据的容器,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

三种声明对比

特性varletconst
作用域函数
提升是(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;

命名规范

规范示例用途
驼峰式 camelCaseuserName变量、函数
帕斯卡式 PascalCaseUserInfo类、构造函数
全大写下划线MAX_SIZE常量
下划线前缀_private私有属性约定
JavaScript
// 推荐命名
let firstName = 'Tom';
let isLoading = false;
const API_KEY = 'abc123';

// 见名知意
let userAge = 25;        // 好
let a = 25;              // 差
let itemList = [];       // 好
let arr = [];            // 差

要点总结

  1. 优先使用 const,需要重新赋值时用 let,避免使用 var
  2. typeof null 返回 "object" 是历史遗留问题
  3. 模板字符串用反引号,支持插值和多行
  4. 变量命名遵循驼峰式,常量用全大写下划线
  5. TDZ 让 let/const 在声明前不可访问,避免未定义行为
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 闭包
下一篇 → 常量与作用域
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码