【ES6】语法变化

简介: 【ES6】语法变化

数字化管理平台

Vue3+Vite+VueRouter+Pinia+Axios+ElementPlus

权限系统-商城

个人博客地址

一、 let 与 const

1.1 关键字 var 的问题

  • 可以重复声明
var a = 10;
var a = 20;
console.log("a:",a);

无法限制修改

var b = 10;
b = 20;
console.log("b:",b);

没有块级作用域(存在变量提升)

{
  var a = 10;
}
if(true){
  var b = 10;
}
console.log("a:",a,"b:",b)
for(var i = 0; i < 10; i++){
  console.log("i:",i);
}
console.log("i:",i);

1.2 关键字 let 和 const 可以解决上述问题,两者异同点如下:

let 和 const 定义的变量不能被重复声明(避免全局变量污染)

const 用来定义常量,定义后不能被修改;let用来定义变量,执行执行过程中可以被改变

大括号中使用 let 和 const 会形成自己独立的块级作用域

块级作用域中不存在变量的提升,会出现暂时性死区的现象,所以当进入当前作用域,在变量声明之前访问变量,是无法访问到的)

var value = 1;
if (true) {
    console.log(value);//ReferenceError: Cannot access 'value' before initialization
    let value = 10;
}

1.3 案例:块级作用域解决循环中无法正确获取索引问题:

布局代码:

<button>按钮一</button>
<button>按钮二</button>
<button>按钮三</button>

JS代码:

let btns = document.getElementsByTagName('button');
//ES6之前的处理方案:
//方案一:给每一个元素自定义属性index对应循环索引
for(var i = 0; i < btns.length; i++){
    btns[i].index = i;
    btns[i].onclick = function(){
        console.log(this.index);
    }
}
//方案二:闭包
for(var i = 0; i < btns.length; i++){
    (function(j){
        btns[j].onclick = function(){
            console.log(j)
        }
    })(i)
}
// ES6中的方案:利用块级作用域和let关键字
for(let i = 0; i < btns.length; i++){
    btns[i].onclick = function(){
        console.log(i)
    }
}

二 解构赋值

2.1 注意点:

  • 左右两边结构必须一样
// 错误示例
let [a, b] = {a:1, b:2};
// 类型错误 TypeError: {(intermediate value)(intermediate value)} is not iterable

右边必须是一个合法值

// 错误示例
let {a, b} = {12, 5}; //{12, 5} 啥也不是
// 语法错误 SyntaxError: Unexpected token ','

声明和赋值不能分开(必须在一句话中完成)

// 错误示例
let [a,b];
[a, b] = [1, 2];
// SyntaxError: Missing initializer in destructuring declaration
// 语法错误 在解构声明中缺少初始化式

2.2 代码示例:

// 数组
let [a, b, c] = [1, 2, 3];
console.log(a, b, c); // => 1 2 3
// 对象
let {d, e, f} = {d:4, e:5, f:6};
console.log(d, e, f);//=> 4 5 6
// 数组 + 对象 + 其它数据
let [{a, b}, [a1, a2, a3], n, s] = [{a:10, b: 20}, ['apple', 'banana', 'orange'], 3.14, 'hello 解构赋值']
console.log(a, b, a1, a2, a3, n, s); 
// => 1 2 "apple" "banana" "orange" 3.14 "hello 解构赋值"
// 粒度:同一维度下,数据统计的粗细程度
let [obj, arr, n, s] = [{a:10, b: 20}, ['apple', 'banana', 'orange'], 3.14, 'hello 解构赋值']
console.log(obj, arr, n, s); 
// => {a: 10, b: 20} (3) ["apple", "banana", "orange"] 3.14 "hello 解构赋值"


相关文章
|
3月前
ES6新增语法 对象解构
ECMAScript6引入的对象解构语法允许在一行代码中完成多个赋值操作。例如,从一个包含姓名和年龄的对象中提取属性,传统方法需分别获取,而使用解构赋值可简洁实现相同功能。此外,它支持为未定义的属性设置默认值、对已声明变量的解构赋值(需加括号)、嵌套解构以及在函数参数中直接解构等特性,极大提升了代码的可读性和编写效率。
32 1
ES6新增语法 对象解构
|
28天前
|
自然语言处理 JavaScript
转换 ES6 代码时,需要注意哪些代码结构上的调整
在转换ES6代码时,需关注语法结构调整,如将let、const替换为var,箭头函数改写为传统函数表达式,解构赋值转为常规赋值,模板字符串改为字符串拼接,import/export模块化语句调整为CommonJS的require/module.exports形式。
|
1月前
|
前端开发 网络架构
ES6对函数做了哪些扩展?
本文首发于微信公众号“前端徐徐”,介绍了 ES6 中函数参数的默认值、rest 参数、严格模式、name 属性、箭头函数、尾调用优化等新特性,并详细解释了各个特性的使用方法和注意事项。同时,还介绍了 ES2017 和 ES2019 中关于函数的一些改进,如函数参数尾逗号、`Function.prototype.toString()` 方法的修改以及 `catch` 语句参数的省略。
11 1
|
3月前
|
存储 API
ES6新增语法 扩展运算符
ES6新增语法 扩展运算符
26 0
|
6月前
|
JSON 前端开发 JavaScript
ES6(2015)-ES13(2022)新增特性大总结
ES6(2015)-ES13(2022)新增特性大总结
96 0
|
6月前
|
网络架构
ES6函数新增了哪些扩展?
ES6函数新增了哪些扩展?
59 0
|
11月前
|
网络架构
ES6学习(六)—函数的扩展
ES6学习(六)—函数的扩展
|
JavaScript
ES6的基础用法
对js es6的用法进行简单介绍
|
JavaScript 前端开发
ES6新增特性学习
ES6新增特性学习
|
网络架构
ES6中函数新增了哪些扩展?
ES6允许为函数的参数设置默认值