第2课:变量与数据类型——JS的“记忆盒子”

::: block-1 不经历风雨,怎么见彩虹?无人能随随便便成功,努力吧,你一定会成为那个闪闪发光的人! :::

欢迎来到「JavaScript 魔法学院」第 2 课!上节课我们让网页"动"了起来,今天要学习 JS 的 核心能力 ------用"记忆盒子"(变量)存储数据,并掌握数据的"分类标签"(类型)。文末还有实战:密码强度校验器,等你来挑战!

一、变量:JS 的"记忆盒子"

1. 变量的作用

  • 为什么需要变量?

像生活中用便签记录信息,变量用于存储程序中的数据(如用户名、商品价格)。

  • 声明变量的三把钥匙:
js 复制代码
let age = 25;         // 可变的盒子(推荐)
const PI = 3.14;      // 不可变的盒子(常量)
var oldName = "Tom";  // 旧版钥匙(有缺陷,少用)

2. let / const / var 的区别

关键字 重复声明 作用域 可变性
let ❌ 块级作用域 ✅
const ❌ 块级作用域 ❌
var ✅ 函数作用域 ✅

避坑指南:

  • 优先用 const,必要时用 let,避免 var

  • const 声明对象时,属性可修改(盒子不能换,但内容可改)

js 复制代码
const user = { name: "Alice" };
user.name = "Bob";  // 允许!
user = {};          // 报错!

二、数据类型:数据的"分类标签"

1. 基本类型(值类型)

类型 示例 特征
Number 12, NaN 所有数字,包含整数和浮点数
String "Hello", '2024' 文本,用单/双引号包裹
Boolean true, false 只有两个值,表示真/假
Null null 表示"空值"(人为赋值)
Undefined undefined 变量未赋值时的默认值

经典问题:

js 复制代码
console.log(0.1 + 0.2 === 0.3);  // false?为什么?
console.log(0.1 + 0.2); // 0.30000000000000004

答案:二进制浮点数精度丢失,可用 toFixed(2) 四舍五入解决。

2. 引用类型(对象类型)

Object:键值对集合

js 复制代码
const person = {
  name: "Lucy",
  age: 20,
  isStudent: true
};

Array:有序数据列表

js 复制代码
const colors = ["red", "green", "blue"];
console.log(colors[0]);  // "red"

3. 检测数据类型

typeof:识别基本类型

js 复制代码
console.log(typeof 42);         // "number"
console.log(typeof []);         // "object"(局限!)

instanceof:检测引用类型

js 复制代码
console.log([] instanceof Array);  // true

三、实战:密码强度校验器

1. 实现功能

用户输入密码后,实时显示强度:

弱:长度 < 6

中:6 ≤ 长度 ≤ 10

强:长度 > 10 且包含特殊字符(!@#)

2. 完整代码

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>第二课:变量与数据类型</title>
    <style>
        .container {
            display: flex;
            align-items: center;
            justify-content: center;
            height: 100vh;
        }
    </style>
</head>

<body>
    <div class="container">
        <input type="" id="password" placeholder="输入密码">
        <p id="strength"></p>
    </div>
    <script>
        const passwordInput = document.getElementById("password");
        const strengthText = document.getElementById("strength");
        passwordInput.addEventListener("input", function () {
            const password = passwordInput.value;
            let strength = "弱";
            // 判断逻辑
            if (password.length >= 6) {
                strength = "中";
                if (password.length > 10 && /[!@#]/.test(password)) {
                    strength = "强";
                }
            }
            strengthText.innerHTML = `密码强度:<span style="color: red;">${strength}</span>`;
        });
    </script>
</body>

</html>

3. 代码解析

  • 用 const 声明 DOM 元素,避免重复查找

  • addEventListener 监听输入事件

  • 正则表达式 /!@#/ 检测是否包含特殊字符

  • 使用模板字符串拼接带样式的结果

下节预告

第 3 课:运算符与流程控制------JS 的"决策者"

  • if/else 如何做条件判断?

  • for 循环的隐藏技巧

  • 实战:自动生成九九乘法表!

关注公众号,回复【JS】获取本课源码+工具包!

相关推荐
卸任2 小时前
Vibe coding工具使用心得
前端·ai编程
brien93 小时前
为什么模型标称 1M,Google Antigravity 聊到 256K 却突然失忆?我们给它做了个原生行内监控圆环
前端
修炼的dance3 小时前
录屏关键帧间隔多少合适?六档实测,2秒到10秒小了75.6%
前端
Lank_M3 小时前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端
补码缩写3 小时前
用 ffprobe 拆录屏,八成字节在 29 个关键帧上
前端
百思不得小李3 小时前
一个复杂的动态表单是如何实现的
前端·设计模式
陈随易4 小时前
Cmder 停更 17 个月,2.0 支持 Windows Terminal
前端·后端·程序员
清晨Coding4 小时前
删了 Cookie 还能自动登录?Google系网站登录态自动恢复的原理分析
javascript
风骏时光牛马4 小时前
前沿视界
前端
kyriewen4 小时前
我扫了 814 个依赖,97 个还敢要 Node 10
前端·javascript·程序员