第9课:小白进阶必看!ES6+JavaScript新特性全攻略

越努力,越幸运!

2015 年发布的 ES6 是 JavaScript 历史上最重要的更新,它让 JS 蜕变为“工程化语言”。但很多时候面对 () => {}、…等符号仍会懵圈。本课将用真实项目高频场景 解析必学特性,让你读懂并写出优雅的现代 JS 代码!

一、颠覆旧时代的四大核心特性

1. 块级作用域:let/const 取代 var

旧痛点

for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i));  // 输出3次3!
}

ES6 解法

for (let i = 0; i < 3; i++) {
  setTimeout(() => console.log(i));  // 0,1,2
}

规则:

  • let:可变的块级变量
  • const:不可变的常量(对象属性可改)
  • 禁止变量提升,必须先声明后使用

2. 箭头函数:简化回调地狱

旧写法

const nums = [1, 2, 3];
nums.map(function (n) {
  return n * 2;
});

ES6 写法

nums.map(n => n * 2);  // 简洁!

特性:

  • 自动绑定外层 this(解决 this 指向难题)
  • 单参数可省略括号,单表达式可省略 return

3. 解构赋值:数据拆包神器

数组解构

const [a, , b] = [1, 2, 3];  // a=1, b=3
console.log('--',a, b)

对象解构

const { name, age } = { name: "小明", age: 18 };
console.log('--',name, age)

4. 模板字符串:告别拼接噩梦

旧写法

let name = 'Hardy'
let points = 100
console.log("你好," + name + "!当前积分:" + points);

ES6 写法

let name = 'Hardy'
let points = 100
console.log(`你好,${name}!当前积分:${points}`);

进阶用法:

多行文本(HTML 模板)

const html = `
  <div class="box">
    <h2>${title}</h2>
  </div>
`;

二、提升开发效率的四大实用特性

// 默认参数
function order(name = "匿名用户", food = "咖啡") {
  console.log(`${name}点了 ${food}`);
}
order()
// 剩余参数(替代arguments)
function sum(...numbers) {
  return numbers.reduce((a, b) => a + b);
}
sum(1, 2, 3);  // 6

2. 展开运算符(…)

// 数组合并
const arr1 = [1, 2];
const arr2 = [...arr1, 3];  // [1,2,3]
console.log('arr2',arr2)
// 对象合并
const config = { port: 8080 };
const finalConfig = { ...config, env: "dev" };
console.log('finalConfig',finalConfig)

3. 对象属性简写

// 旧写法
const name = "小明";
const user = { name: name, age: 18 };
console.log('user',user)
// ES6写法
const user = { name, age: 18 };  // 自动同名匹配
console.log('user',user)

4. 可选链与空值合并(ES2020)

// 安全访问嵌套属性
const street = user?.address?.street ?? "未知街道";

// 等效旧代码
let street = "未知街道";
if (user && user.address && user.address.street) {
  street = user.address.street;
}

三、实战:用 ES6+重构抽奖器

1. 旧版代码痛点

  • 回调嵌套可读性差
  • 用 var 声明变量
  • 字符串拼接复杂

2. 重构后代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>第9课:进阶ES6+新特性</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f0f8ff;
            /* 浅蓝色背景 */
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }

        .container {
            text-align: center;
            background-color: #ffffff;
            /* 白色背景 */
            padding: 20px;
            border-radius: 10px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
            /* 阴影效果 */
        }

        button {
            background-color: #4CAF50;
            /* 绿色按钮 */
            color: white;
            padding: 10px 20px;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            font-size: 16px;
            margin-bottom: 20px;
        }

        button:hover {
            background-color: #45a049;
            /* 按钮悬停时颜色加深 */
        }

        #result {
            font-size: 20px;
            color: #333333;
        }

        #result span {
            font-weight: bold;
        }
    </style>
</head>

<body>
    <div class="container">
        <button id="lotteryBtn">点击抽奖</button>
        <p id="result"></p>
    </div>
    <script>
        const staffs = ["张三", "李四", "王五", "赵六"];

        // 箭头函数 + 解构
        const getRandom = arr => {
            const index = Math.floor(Math.random() * arr.length);
            return [...arr].splice(index, 1)[0];  // 避免重复中奖
        };

        // 模板字符串 + 解构
        const showResult = name => {
            const resultEl = document.querySelector("#result");
            resultEl.innerHTML = `🎉 中奖者:<span class="winner">${name}</span>`;
        };

        // 事件监听简化
        document.querySelector("#lotteryBtn").addEventListener("click", () => {
            const winner = getRandom(staffs);
            showResult(winner);
        });
    </script>
</body>

</html>

下节预告

第 10 课:小白进阶必看!JavaScript 从回调地狱到 Async/Await 的异步编程革命

  • Promise 核心原理
  • 如何用 Async 函数优雅处理异步?
  • 实战:并行请求优化加载速度
    回复【JS】获取本课源码+工具包!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值