var、let、const 都是 JS 声明变量的关键字,核心区别体现在作用域、变量提升、重复声明、赋值限制上。var 是函数作用域,存在变量提升,允许重复声明,未赋值时返回 undefined;let 和 const 是块级作用域({} 内有效),存在暂时性死区,不能重复声明。let 声明的变量可以重新赋值,const 声明的是常量,必须初始化且不能重新赋值(引用类型可修改内部属性)。在现代 JS 开发中,推荐优先使用 const,需要修改变量时用 let,尽量避免使用 var,防止作用域污染和意外的变量覆盖问题。
== 是宽松相等运算符,=== 是严格相等运算符,核心区别是是否进行类型转换。== 会先自动将两边的值转换为相同数据类型,再比较数值是否相等,比如'1' == 1结果为 true,null == undefined也为 true,容易引发隐式转换 bug。=== 不会做任何类型转换,先比较数据类型,再比较数值,类型不同直接返回 false,只有类型和值完全一致才返回 true。日常开发中强烈推荐使用 ===,能避免类型转换带来的逻辑错误,保证代码严谨性。
变量提升是 JS 的解析执行机制,JS 引擎在执行代码前,会先扫描所有声明,将 var 声明的变量、函数声明提升到当前作用域的最顶端。var 变量仅提升声明,赋值操作留在原地,所以声明前访问变量会得到 undefined。let 和 const 也存在变量提升,但会进入暂时性死区,在声明前访问会直接报错,这是为了规避 var 的设计缺陷。函数声明的提升优先级高于变量,会整体提升,声明前调用函数也能正常执行,理解变量提升能避免很多代码逻辑错误。
模板字符串就是模板字面量,是 ES6 新增的字符串定义方式,用反引号 `` 包裹,替代传统的单双引号。它支持直接换行,无需拼接换行符;通过${变量/表达式}实现插值,可直接嵌入变量、计算式、函数调用。相比传统字符串拼接,写法更简洁直观,比如姓名:${name},年龄:${age},不用大量使用 + 号拼接。同时还支持标签模板进阶用法,是现代 JS 开发中处理字符串的首选方式,大幅提升字符串拼接的效率和可读性。
Rest 参数和扩展运算符都用...表示,使用场景完全相反。Rest 参数用于函数形参,接收函数的剩余实参,自动组合成一个数组,解决了 arguments 类数组的不便,比如function fn(a,...b){},b 就是剩余参数组成的数组。扩展运算符用于展开数据,可展开数组、对象、字符串,常用于数组拷贝、数组合并、函数传参、对象合并,比如const arr = [1,2,...[3,4]]。两者语法相同但作用互补,是 ES6 简化代码的核心语法,大幅简化了数据处理的代码。