目录

一、变量声明:如何存储数据?

1.1 var:函数作用域的“老派”声明(不推荐)

核心特性:

示例代码:

1.2 let:块级作用域的“现代”声明(推荐)

核心特性:

示例代码:

1.3 const:不可修改的常量声明(推荐)

核心特性:

示例代码:

变量声明最佳实践:

二、数据类型:JS 中的“数据分类”

2.1 基本数据类型(7种)

示例代码:

2.2 引用数据类型(主要是 Object)

示例代码:

2.3 基本类型 vs 引用类型:核心区别

三、运算符:JS 中的“数据操作工具”

3.1 算术运算符(7种)

示例代码:

3.2 赋值运算符(= 及扩展)

示例代码:

3.3 比较运算符(返回布尔值)

示例代码:

3.4 逻辑运算符(与/或/非)

示例代码:

3.5 三元运算符(条件简化)

示例代码:

四、总结与实践建议


JavaScript(简称 JS)是 web 开发的基石之一,无论是网页交互、后端开发(Node.js)还是移动应用,都离不开它的身影。本文将从变量声明数据类型运算符三个核心知识点入手,通过通俗易懂的语言和实例代码,帮助初学者快速入门 JS。

一、变量声明:如何存储数据?

变量是存储数据的容器,就像现实中的“盒子”,可以存放数字、文本等信息。JS 中声明变量有三种方式:varletconst,它们的特性和使用场景各不相同。

1.1 var:函数作用域的“老派”声明(不推荐)

var 是 ES5 及之前的变量声明方式,存在函数作用域变量提升特性,容易导致意外问题,目前已不推荐优先使用。

核心特性:
  • 函数作用域:变量仅在函数内可访问,若在函数外声明则为全局变量。
  • 变量提升:声明会被提升到作用域顶部,但赋值不会。
  • 允许重复声明:同一作用域内可重复声明同一变量,覆盖之前的值。
示例代码:
// 变量提升:声明被提升到顶部,赋值留在原地
console.log(a); // 输出:undefined(未赋值)
var a = 10;


// 函数作用域
function test() {
var b = 20;
console.log(b); // 输出:20(函数内可访问)
}
test();
console.log(b); // 报错:b is not defined(函数外不可访问)


// 重复声明
var c = 30;
var c = 40; // 不报错,覆盖为 40
console.log(c); // 输出:40

1.2 let:块级作用域的“现代”声明(推荐)

let 是 ES6 新增的声明方式,解决了 var 的作用域问题,推荐用于需要重新赋值的变量

核心特性:
  • 块级作用域:变量仅在 {}(如 iffor、函数)内可访问。
  • 无变量提升:必须先声明后使用,否则报错。
  • 禁止重复声明:同一作用域内重复声明会报错。
示例代码:
// 块级作用域(if 语句块)
if (true) {
let d = 50;
console.log(d); // 输出:50(块内可访问)
}
console.log(d); // 报错:d is not defined(块外不可访问)


// 无变量提升
console.log(e); // 报错:Cannot access 'e' before initialization
let e = 60;


// 禁止重复声明
let f = 70;
let f = 80; // 报错:Identifier 'f' has already been declared

1.3 const:不可修改的常量声明(推荐)

const 也是 ES6 新增,用于声明不可重新赋值的变量(常量),通常用于存储固定值(如配置、数学常量)。

核心特性:
  • 块级作用域:与 let 相同,仅在块内可访问。
  • 必须初始化:声明时必须赋值,否则报错。
  • 不可重新赋值:但对象/数组的属性/元素可修改(仅限制引用地址)。
示例代码:
// 基本类型常量(不可修改)
const PI = 3.1415;
PI = 3.14; // 报错:Assignment to constant variable


// 引用类型常量(可修改属性/元素)
const user = { name: "Alice" };
user.age = 20; // 允许修改属性
console.log(user); // 输出:{ name: "Alice", age: 20 }


const arr = [1, 2, 3];
arr.push(4); // 允许修改元素
console.log(arr); // 输出:[1, 2, 3, 4]

变量声明最佳实践:

  • 优先使用 const,避免意外修改。
  • 若需重新赋值,使用 let
  • 彻底放弃 var,避免作用域和提升问题。

二、数据类型:JS 中的“数据分类”

JS 是动态类型语言(变量类型可随时变化),数据类型分为两大类:基本数据类型引用数据类型

2.1 基本数据类型(7种)

基本类型直接存储值,占用空间小,存于栈内存。

类型描述示例
String字符串(文本)"Hello"'JS'
Number数字(整数/浮点数)423.14
Boolean布尔值(真/假)truefalse
Null空值(主动表示“无”)let a = null
Undefined未定义(变量声明未赋值)let b;(此时 bundefined
Symbol唯一值(ES6 新增,用于对象属性)const id = Symbol('id')
BigInt大整数(解决 Number 精度问题)9007199254740993n(末尾加 n
示例代码:
// String
const str = "Hello JS";
console.log(typeof str); // 输出:string


// Number(注意:Number 有精度限制,超过 2^53-1 会失真)
const num = 123;
const float = 45.67;
console.log(typeof num); // 输出:number


// Boolean
const isTrue = true;
console.log(typeof isTrue); // 输出:boolean


// Null(特殊:typeof 会返回 'object',需单独判断)
const empty = null;
console.log(typeof empty); // 输出:object(历史遗留问题)
console.log(empty === null); // 输出:true(正确判断方式)


// Undefined
let undef;
console.log(undef); // 输出:undefined
console.log(typeof undef); // 输出:undefined


// Symbol(唯一且不可变)
const s1 = Symbol("key");
const s2 = Symbol("key");
console.log(s1 === s2); // 输出:false(即使描述相同,值也不同)


// BigInt(处理大整数)
const big = 9007199254740993n;
console.log(big + 1n); // 输出:9007199254740994n

2.2 引用数据类型(主要是 Object

引用类型存储引用地址(指向堆内存中的值),占用空间大,可动态添加属性。常见引用类型:

  • Object:普通对象(键值对集合)。
  • Array:数组(有序数据集合)。
  • Function:函数(可执行代码块)。
  • DateRegExp 等内置对象。
示例代码:
// Object(对象)
const person = { name: "Bob", age: 20 };
person.gender = "male"; // 动态添加属性
console.log(person); // 输出:{ name: 'Bob', age: 20, gender: 'male' }


// Array(数组)
const fruits = ["apple", "banana"];
fruits.push("orange"); // 添加元素
console.log(fruits); // 输出:['apple', 'banana', 'orange']


// Function(函数)
function greet() {
return "Hello";
}
console.log(greet()); // 输出:Hello

2.3 基本类型 vs 引用类型:核心区别

  • 赋值行为:基本类型赋值时复制值,引用类型赋值时复制引用地址(修改新变量会影响原变量)。
    // 基本类型赋值(复制值)
    let a = 10;
    let b = a;
    b = 20;
    console.log(a); // 输出:10(a 不受影响)
    
    
    // 引用类型赋值(复制地址)
    const obj1 = { x: 1 };
    const obj2 = obj1;
    obj2.x = 2;
    console.log(obj1.x); // 输出:2(原对象被修改)

三、运算符:JS 中的“数据操作工具”

运算符用于对数据进行计算或比较,常见分类如下:

3.1 算术运算符(7种)

用于数学计算,返回数值结果。

运算符描述示例结果
+加法5 + 38
-减法10 - 46
*乘法3 * 618
/除法12 / 43
%取余(模)10 % 31
++自增let a=5; a++5(先返回后+1,最终 a=6
--自减let b=5; --b4(先-1后返回,最终 b=4
示例代码:
const a = 10;
const b = 3;


console.log(a + b); // 13
console.log(a % b); // 1(10 除以 3 余 1)


let c = 5;
console.log(c++); // 5(先输出后自增,c 变为 6)
console.log(++c); // 7(先自增后输出,c 变为 7)

3.2 赋值运算符(= 及扩展)

将右侧值赋给左侧变量,扩展运算符可简化赋值+运算。

运算符示例等价于
=a = 5a = 5
+=a += 3a = a + 3
-=a -= 2a = a - 2
*=a *= 4a = a * 4
/=a /= 2a = a / 2
示例代码:
let x = 10;
x += 5; // 等价于 x = x + 5
console.log(x); // 15


x *= 2; // x = x * 2
console.log(x); // 30

3.3 比较运算符(返回布尔值)

用于比较两个值,返回 truefalse重点区分 =====

运算符描述示例(结果)
==相等(自动类型转换)'5' == 5true(字符串转数字)
===严格相等(不转类型)'5' === 5false(类型不同)
!=不相等(自动类型转换)'5' != 5false
!==严格不相等(不转类型)'5' !== 5true
>大于10 > 5true
<小于3 < 8true
示例代码:
// == 会自动转换类型(不推荐,易出错)
console.log(5 == "5"); // true(字符串转数字)
console.log(true == 1); // true(布尔转数字:true→1)


// === 严格比较(推荐,避免类型转换问题)
console.log(5 === "5"); // false(类型不同)
console.log(null === undefined); // false(类型不同)

3.4 逻辑运算符(与/或/非)

用于组合条件判断,返回原始值(不一定是布尔值)。

运算符描述特性(短路逻辑)
&&逻辑与左侧为假则返回左侧值,否则返回右侧值
``
!逻辑非取反(返回布尔值)
示例代码:
// && 短路:左侧为假直接返回
console.log(false && "右侧"); // false(左侧为假)
console.log("左侧" && "右侧"); // 右侧(左侧为真)


// || 短路:左侧为真直接返回(常用于设置默认值)
console.log("已有值" || "默认值"); // 已有值(左侧为真)
console.log(undefined || "默认值"); // 默认值(左侧为假)


// ! 取反(两次 !! 可将值转为布尔值)
console.log(!true); // false
console.log(!!0); // false(0 转为布尔值是 false)
console.log(!!"hello"); // true(非空字符串转为 true)

3.5 三元运算符(条件简化)

语法:条件 ? 表达式1 : 表达式2(条件为真执行表达式1,否则执行表达式2)。

示例代码:
const age = 18;
const status = age >= 18 ? "成年" : "未成年";
console.log(status); // 输出:成年(条件为真)


// 等价于 if-else:
if (age >= 18) {
status = "成年";
} else {
status = "未成年";
}

四、总结与实践建议

本文介绍了 JS 入门的三大核心知识点:

  • 变量声明:优先用 constlet,避免 var
  • 数据类型:区分基本类型(值存储)和引用类型(地址存储);
  • 运算符:重点掌握 ===、逻辑短路、三元运算符等高频用法。

实践建议

  1. 用浏览器控制台(F12 → Console)实时测试代码;
  2. 尝试用变量、数据类型和运算符组合实现简单逻辑(如计算两数之和、判断奇偶数);
  3. 后续学习方向:流程控制(if/for)、函数、对象等。

JS 入门不难,但细节较多,多写多练才能真正掌握。加油,未来的前端工程师! 🚀

更多推荐