JavaScript基础课程十二、ES6+ 核心语法(二)—— 解构与字符串

本课重点学习 ES6+ 两大高频语法:解构赋值与字符串扩展。解构赋值可快速从数组、对象中提取数据,让代码大幅精简、易读;模板字符串彻底告别繁琐的 + 拼接,支持变量、换行、表达式,是页面渲染的必备工具。字符串新增方法让文本处理更简单高效。本课知识在 Vue/React 开发、小程序、全栈项目中无处不在,是现代 JavaScript 最实用的语法之一。结合前序 DOM、函数、数组课程,可完成真正规范、简洁、可维护的实战项目,为后续框架学习与企业开发打下坚实基础。

一、课程学习目的

  1. 掌握 ES6+ 对象解构、数组解构语法,快速提取数据,简化取值代码。

  2. 熟练使用解构默认值、嵌套解构,应对复杂数据结构。

  3. 学会 ES6+ 字符串扩展方法,包括模板字符串、判断、截取、去空格等。

  4. 能够使用模板字符串拼接内容、渲染页面,替代传统字符串拼接。

  5. 结合前序 DOM、数组、函数知识,写出更简洁、易读、现代化的代码。


二、核心知识点讲解

1. 解构赋值

解构赋值是快速从数组 / 对象中提取数据并赋值给变量的语法,代码更简洁。

(1)数组解构

顺序提取数组元素,一一对应赋值。

(2)对象解构

属性名提取对象值,与顺序无关,非常常用。

(3)嵌套解构

适用于多层数组/对象结构,可深度提取数据。

2. ES6+ 字符串扩展

(1)模板字符串 ``(反引号)

支持换行、变量直接插入、表达式运算 ,替代繁琐的+ 拼接。

(2)字符串新增方法
  • includes(str):判断是否包含指定字符串,返回布尔值

  • startsWith(str):判断是否以指定字符串开头

  • endsWith(str):判断是否以指定字符串结尾

  • repeat(n):重复字符串 n 次

  • trim():去除字符串两端空格


三、示例程序

示例1:数组解构(按顺序取值)

javascript 复制代码
// 普通英语单词数组
let words = ["apple", "banana", "orange"];

// 传统取值(麻烦)
let w1 = words[0];
let w2 = words[1];
let w3 = words[2];

// ES6 数组解构(简洁)
let [word1, word2, word3] = words;

console.log(word1); // apple
console.log(word2); // banana
console.log(word3); // orange

示例说明:数组解构按索引顺序取值,一行代码完成多个变量赋值,大幅简化数组取值代码,适合批量提取单词、成绩、列表数据。

示例2:对象解构(按属性名取值)

javascript 复制代码
// 单词对象
let wordObj = {
  en: "dog",
  cn: "小狗",
  level: 1
};

// 传统取值
let en = wordObj.en;
let cn = wordObj.cn;

// ES6 对象解构(属性名必须一致)
let { en, cn, level } = wordObj;

console.log(en); // dog
console.log(cn); // 小狗
console.log(level); // 1

示例说明 :对象解构根据属性名匹配取值,与顺序无关,是开发中最常用的取值方式,特别适合接口数据、配置对象快速提取。

示例3:解构 + 默认值(防止 undefined)

javascript 复制代码
let user = {
  name: "小明",
  age: 10
};

// 给不存在的属性设置默认值
let { name, age, gender = "男" } = user;

console.log(name);    // 小明
console.log(age);     // 10
console.log(gender);  // 男(使用默认值)

示例说明:解构时可设置默认值,避免数据缺失导致报错,提升代码健壮性。

示例4:模板字符串(变量 + 换行)

javascript 复制代码
let en = "cat";
let cn = "小猫";

// 传统拼接(易出错、不支持换行)
let str = "单词:" + en + ",意思:" + cn;

// ES6 模板字符串(反引号 ``)
let res = `
当前学习单词:
英文:${en}
中文:${cn}
`;

console.log(res);

示例说明 :模板字符串支持直接插入变量 ${变量},支持换行,非常适合 DOM 页面渲染、日志输出、单词展示。

示例5:字符串扩展方法

javascript 复制代码
let word = "apple";

console.log(word.includes("app"));    // true 包含
console.log(word.startsWith("a"));    // true 开头
console.log(word.endsWith("e"));      // true 结尾
console.log(word.repeat(3));          // appleappleapple
console.log("  hello  ".trim());      // hello 去空格

示例说明:ES6 字符串新方法让判断、截取、处理文本更简单,无需写复杂逻辑,适合单词校验、输入框处理。

示例6:解构 + 模板字符串 + DOM 综合(衔接前期课程)

javascript 复制代码
// 单词对象
let wordData = {
  en: "pear",
  cn: "梨",
  pic: "pear.jpg"
};

// 对象解构
let { en, cn } = wordData;

// 获取页面元素
let box = document.getElementById("box");

// 模板字符串渲染DOM
box.innerHTML = `
  <h3>英文:${en}</h3>
  <p>中文:${cn}</p>
`;

示例说明:本课综合实战,解构提取单词数据 + 模板字符串渲染页面,完全贴合儿童英语学习场景,是企业真实开发常用写法。


四、掌握技巧与方法

  1. 数组解构按顺序 ,对象解构按属性名

  2. 取值不确定时,给解构加默认值,避免 undefined。

  3. 字符串拼接一律使用模板字符串 `` ,不再用 +

  4. 判断包含、开头、结尾优先用 includes/startsWith/endsWith

  5. 解构与函数参数、对象、数组结合使用,代码最简洁。

  6. 模板字符串可直接渲染 DOM 内容,支持换行与样式。


五、课后作业

基础作业

  1. 定义数组 ["red", "green", "blue"],使用数组解构提取三个颜色。

  2. 定义对象 {title:"英语课", time:40},使用对象解构取值。

  3. 使用模板字符串输出:我正在学习 ES6 课程十二

进阶作业

  1. 给解构设置默认值,解构一个不存在的属性并测试。

  2. 使用 includes 判断单词"banana" 是否包含 "nan"

  3. 使用嵌套解构,提取多层对象中的单词数据。

实战作业

  1. 儿童英语单词展示器
  • 建立单词对象(英文、中文、等级)。

  • 使用对象解构取值。

  • 使用模板字符串渲染到页面 DOM。

  • 使用 includes 判断单词是否包含指定字母。


上一课实战作业代码


##ES6+语法新特性 代码功能说明

本代码是适配ES6+语法的英语单词学习助手,采用HTML+JS合一编写,可直接在浏览器运行。通过const声明固定单词库、let声明可变文本,实现块级作用域管控与常量保护;利用箭头函数搭配默认参数快速打印单词信息,剩余参数实现多单词总字符数统计;点击测试按钮触发交互,将单词详情、字符统计、单词列表批量渲染至页面,同时验证const数组可修改内部元素、不可更改地址的特性。全程覆盖let/const、箭头函数、默认/剩余参数核心考点,贴合零基础实操,代码简洁规范、注释清晰,可直观检验ES6+语法掌握程度。


完整实战代码

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>第9课 ES6+语法实战 - 英语单词工具</title>
    <style>
        .box {
            width: 600px;
            margin: 50px auto;
            padding: 20px;
            border: 1px solid #eee;
            border-radius: 8px;
            font-family: "Microsoft YaHei";
        }
        .btn {
            padding: 6px 12px;
            margin: 10px 5px;
            cursor: pointer;
            border: none;
            border-radius: 4px;
            background: #42b983;
            color: #fff;
        }
        .result {
            margin-top: 20px;
            line-height: 1.8;
        }
    </style>
</head>
<body>
    <div class="box">
        <h3>英语单词学习助手(ES6+版)</h3>
        <button class="btn" id="testBtn">执行ES6+测试</button>
        <div class="result" id="result"></div>
    </div>

    <script>
        // ===================== 考点1:const声明常量(不可修改)、let声明变量 =====================
        // 常量:固定单词库,不可修改
        const WORD_LIST = ['apple', 'banana', 'cat', 'dog', 'orange'];
        // 变量:可修改的结果文本
        let resultText = '';

        // ===================== 考点2:箭头函数 + 函数默认参数 =====================
        /**
         * 打印单词信息函数
         * @param {string} en 英文单词
         * @param {string} cn 中文释义,默认值'待学习'
         */
        const printWord = (en, cn = '待学习') => {
            return `英文:${en} | 中文:${cn}`;
        };

        // ===================== 考点3:剩余参数... 接收多个实参 =====================
        /**
         * 统计多个单词的总长度
         * @param  {...any} words 多个单词参数
         * @returns 总长度
         */
        const countTotalLength = (...words) => {
            let total = 0;
            words.forEach(item => {
                total += item.length;
            });
            return total;
        };

        // ===================== 考点4:箭头函数绑定点击事件 =====================
        document.getElementById('testBtn').onclick = () => {
            // 1. 测试默认参数
            resultText += '<p>' + printWord('apple', '苹果') + '</p>';
            // 不传中文,使用默认值
            resultText += '<p>' + printWord('pear') + '</p>';

            // 2. 测试剩余参数
            const totalLen = countTotalLength(...WORD_LIST);
            resultText += `<p>单词库总字符数:${totalLen}</p>`;

            // 3. 测试let块级作用域
            for(let i = 0; i < WORD_LIST.length; i++) {
                // let仅在当前循环块有效
                resultText += `<p>单词${i+1}:${WORD_LIST[i]}</p>`;
            }

            // 渲染结果到页面
            document.getElementById('result').innerHTML = resultText;
        };

        // 测试const数组特性:内部元素可操作,地址不可改
        WORD_LIST.push('grape');
        // WORD_LIST = ['test']; // 取消此行会报错,const常量地址不可修改
    </script>

注意事项

  • 全程禁止使用var关键字,严格区分let(可变变量)与const(常量)的使用场景,避免变量污染

  • 箭头函数无自身this指向,仅适用于普通回调、工具函数,不可作为构造函数使用

  • 剩余参数必须放在形参末尾,const声明的数组/对象不可直接重新赋值,仅可修改内部成员

  • 运行后打开浏览器控制台排查报错,确保页面渲染正常、语法规范、逻辑无漏洞

作业验收标准

  1. 点击按钮,正常展示单词信息、默认参数、剩余参数统计结果

  2. 代码中无var关键字,全程使用let/const

  3. 箭头函数、默认参数、剩余参数语法使用正确

  4. 理解const常量特性:基本类型不可改,数组/对象内部可操作

  5. 控制台无报错,代码注释清晰

作业拓展要求

修改代码,新增一个箭头函数,接收剩余参数实现查找最长单词功能,并将结果渲染到页面,强化ES6+语法实操能力。