Vue3前置必备JavaScript知识之从基础到实战进阶
作者:phltxy
前言
在前端开发领域,Vue3已成为主流框架之一,而扎实的JavaScript基础是掌握Vue3的关键前提。本文将围绕Vue3开发中高频使用的JS核心知识点展开,结合实际代码案例,帮助开发者快速夯实基础,为Vue3学习之路扫清障碍。
一、变量与常量:let与const的正确使用
在JavaScript中,变量和常量的声明方式直接影响代码的可读性和稳定性,也是Vue3开发中最基础的语法之一。
1. 变量声明:let
let用于声明可修改的变量,支持重复赋值,是日常开发中最常用的声明方式:
let name = 'Jack'; name = 'Bit'; // 合法,变量值可修改 let age = 18; age = 20; // 合法,数值类型可更新
2. 常量声明:const
const用于声明不可修改的常量,但需注意引用类型的特殊行为:
const PI = 3.14;
// PI = 3.1415; // 非法,基本类型常量不可修改
// 引用类型(数组、对象)的特殊情况
const arr = [1, 2, 3];
arr.push(4); // 合法,数组元素可增删
arr.shift(); // 合法,删除数组第一个元素
const user = { name: 'vue3', age: 9 };
user.birth = 2015; // 合法,可添加属性
user.age = 10; // 合法,可修改属性值
核心原理:const限制的是变量的内存地址不可变,而数组、对象的元素/属性修改不会改变其内存地址,因此允许操作。
二、模版字符串:简化字符串操作
传统字符串拼接繁琐且易出错,模版字符串(反引号 声明)完美解决了这一问题,是Vue3模板语法的重要基础。
1. 核心优势
- 支持任意换行:无需拼接换行符,直接保留代码格式,特别适合构建HTML模板:
// 传统字符串(繁琐) const htmlStr = '<div class="hot-goods-box"><h1>热门商品</h1><p>卖爆了卖爆了卖爆了</p></div>'; // 模版字符串(简洁) const htmlStr = `<div class="hot-goods-box"> <h1>热门商品</h1> <p>卖爆了卖爆了卖爆了</p> </div>`;
- 嵌入表达式:通过
${表达式}语法直接嵌入变量、运算或三元表达式,替代繁琐的+拼接:
let name = 'Bit';
let age = 9;
// 模版字符串嵌入表达式
const str = `My name is ${name}, I am ${age} years old, ${age >= 18 ? '已成年' : '未成年'}`;
console.log(str); // 输出:My name is Bit, I am 9 years old, 未成年
三、对象操作:取值与简写技巧
对象是JavaScript的核心数据结构,Vue3组件的props、data等核心概念均基于对象,掌握高效的对象操作技巧能大幅提升开发效率。
1. 取值方式
- 点语法取值:简单直接,适用于已知属性名的场景:
const obj = { name: 'vue3', age: 9 };
console.log(obj.name); // 输出:vue3
console.log(obj.age); // 输出:9
- 中括号取值:支持动态属性名(属性名为变量),是Vue3中处理动态数据的常用方式:
const obj = { name: 'vue3', age: 9 };
let key = 'name';
console.log(obj[key]); // 输出:vue3(动态获取属性值)
// 注意:obj.key 等价于 obj['key'],而非动态变量key
2. 对象简写
当属性名与变量名一致,或定义对象方法时,可使用简写语法简化代码:
// 属性简写(属性名=变量名)
let min = 1;
let max = 99;
const obj = { min, max }; // 等价于 { min: min, max: max }
// 方法简写(省略:function)
const obj = {
fn() { // 等价于 fn: function() {}
console.log('对象方法简写');
}
};
四、解构赋值:高效提取数据
解构赋值是ES6的核心特性之一,Vue3中获取props、路由参数等场景高频使用,能快速从数组或对象中提取目标数据。
1. 数组解构
适用于有序数据的提取,支持跳过元素、剩余元素收集:
const arr = [11, 22, 33]; // 提取全部元素 let [a, b, c] = arr; // a=11, b=22, c=33 // 跳过第一个元素,提取后两个 let [, b, c] = arr; // b=22, c=33 // 提取第一个元素,剩余元素收集到rest let [a, ...rest] = arr; // a=11, rest=[22, 33]
2. 对象解构
适用于无序数据的提取,支持指定别名、剩余属性收集:
const obj = {
name: '比特教育科技',
age: 9,
address: '陕西省西安市高新区沣惠南路34号'
};
// 提取指定属性
const { age, address } = obj; // age=9, address=对应值
// 给属性起别名(避免变量冲突)
const { name: uname } = obj; // uname='比特教育科技'
// 提取部分属性,剩余属性收集到rest
const { name, ...rest } = obj; // rest={age:9, address:...}
五、箭头函数:简洁的函数写法
箭头函数是Vue3回调函数(如数组方法、Promise回调)的常用写法,具有简洁语法和绑定外层this的特性。
1. 基本语法
// 无参数函数
const fn = () => { console.log('无参数箭头函数'); };
// 单个参数(可省略括号)
const log = arg => { console.log(arg); };
// 多个参数
const add = (x, y) => { return x + y; };
// 函数体只有一行(可省略大括号和return)
const add = (x, y) => x + y;
// 返回对象(需用小括号包裹,避免歧义)
const state = () => ({ token: 'xxxx', userInfo: { name: 'admin' } });
2. 核心应用场景
Vue3中常用于数组方法回调、定时器回调等场景:
// 数组遍历回调
const arr = [1, 2, 3];
arr.forEach(item => console.log(item));
// 定时器回调
setTimeout(() => {
console.log('2秒后执行');
}, 2000);
六、数组高频方法:数据处理利器
数组是Vue3中存储列表数据的主要载体,掌握以下高频方法能高效处理数据渲染、筛选、转换等需求。
| 方法 | 功能描述 | 核心用法 |
|---|---|---|
| push() | 尾部添加元素 | arr.push(44) |
| unshift() | 头部添加元素 | arr.unshift(0) |
| pop() | 尾部删除元素 | arr.pop() |
| shift() | 头部删除元素 | arr.shift() |
| splice() | 任意位置增删 | arr.splice(1, 1, 55)(索引1删除1个,添加55) |
| includes() | 判断是否包含元素 | arr.includes(33)(返回布尔值) |
| forEach() | 遍历数组 | arr.forEach((item, index) => {}) |
| filter() | 筛选元素(返回新数组) | arr.filter(item => item % 2 === 0)(筛选偶数) |
| map() | 映射转换(返回新数组) | arr.map(item => item * 2)(元素翻倍) |
| every() | 检测所有元素是否满足条件 | arr.every(item => item > 10)(是否都大于10) |
| reduce() | 汇总计算(求和、统计等) | arr.reduce((prev, item) => prev + item, 0)(求和) |
实战示例:reduce统计商品总数
const goodsList = [
{ id: 1, name: '篮球', num: 1 },
{ id: 2, name: '玩具', num: 3 },
{ id: 3, name: '书籍', num: 2 }
];
// 统计商品总数量
const totalNum = goodsList.reduce((prev, item) => prev + item.num, 0);
console.log(totalNum); // 输出:6
七、Promise+Async/Await:异步编程终极方案
Vue3中发送网络请求、处理异步逻辑时,Promise+Async/Await是核心方案,能彻底解决回调地狱问题。
1. 为什么需要Promise?
传统回调嵌套(回调地狱)可读性差、维护困难:
// 回调地狱示例
setTimeout(() => {
console.log(1);
setTimeout(() => {
console.log(2);
setTimeout(() => {
console.log(3);
}, 1000);
}, 1000);
}, 2000);
2. Promise基本使用
Promise通过链式调用消除回调嵌套:
// 封装延迟函数
function delay(duration, n) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(n);
}, duration);
});
}
// 链式调用
delay(2000, 1)
.then(n1 => {
console.log(n1);
return delay(1000, 2);
})
.then(n2 => {
console.log(n2);
return delay(1000, 3);
})
.then(n3 => {
console.log(n3);
});
3. Async/Await:简化Promise调用
Async/Await是Promise的语法糖,以同步代码的形式编写异步逻辑,是Vue3中的首选方案:
async function log() {
const n1 = await delay(2000, 1);
console.log(n1); // 2秒后输出1
const n2 = await delay(1000, 2);
console.log(n2); // 再1秒输出2
const n3 = await delay(1000, 3);
console.log(n3); // 再1秒输出3
}
log();
八、模块化:代码组织最佳实践
模块化是大型Vue3项目的必备技能,通过ES Module规范可实现代码的拆分、复用和管理。
1. 模块化配置
在项目的package.json中添加配置,启用ES Module:
{
"type": "module"
}
2. 两种导出与导入方式
- 默认导出(export default):一个模块只能有一个默认导出,导入时可自定义名称:
// utils/min.js
export default function min(m, n) {
return m > n ? n : m;
}
// index.js 导入
import min from './utils/min.js';
console.log(min(12, 45)); // 输出:12
- 按需导出(export):一个模块可多个按需导出,导入时需指定对应名称:
// utils/math.js
export function add(x, y) { return x + y; }
export function sub(x, y) { return x - y; }
// index.js 导入
import { add, sub } from './utils/math.js';
console.log(add(33, 18)); // 输出:51
console.log(sub(33, 18)); // 输出:15
总结
以上这些JavaScript知识点是Vue3开发的基石,涵盖了数据声明、字符串操作、数据结构处理、异步编程和模块化等核心场景。掌握这些知识后,无论是理解Vue3的响应式原理、组件通信,还是开发实战项目,都能事半功倍。
建议结合实际案例多做练习,将这些语法融入日常开发,为后续深入学习Vue3的Composition API、Vuex、Vue Router等高级特性打下坚实基础。如果需要完整的代码示例或项目实战,可以参考代码仓库进一步学习。
到此这篇关于Vue3前置必备JavaScript知识之从基础到实战进阶的文章就介绍到这了,更多相关Vue3前置必备JS知识内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
