ES6 变量的解构赋值,中级web开发工程师

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: ES6 变量的解构赋值,中级web开发工程师
// c = “aaa”
// a = error: a is not defined

就是把’aaa’的值赋值给c,a只是一个匹配模式,c才是真正的变量,这是针对这一种对象的解构赋值

  • 如果要将一个已经声明的变量用于解构赋值
// 错误的写法
let x;
{x} = {x: 1};
// SyntaxError: syntax error
// 正确的写法
let x;
({x} = {x: 1});

由于let x;该语句以及结束,js解释器就会把{x}解析成代码块

默认值

var {x = 3} = {};
// x = 3
var {x = 3} = {x: undefined};
// x = 3
var {x = 3} = {x: null};
// x = null

属性的简写

  • ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法
// 1.属性简写
function fn(x, y){
return{
x: x,
y: y
}
}
// ==>
function fn(x,y){
return {x,y};
}
// 2.方法简写
const obj1 = {
fn : function(){
return 0;
}
}
// ==>
const obj2 = {
fn(){
return 0;
}
}
// 3.常用实例
let ms = {};
function getItem (key) {
return key in ms ? ms[key] : null;
}
function setItem (key, value) {
ms[key] = value;
}
function clear () {
ms = {};
}
const exports1 = {
getItem: getItem,
setItem: setItem,
clear: clear
};
// ==>
const exports2 = { getItem, setItem, clear };
// 4.简写的对象方法不能用作构造函数,会报错
const obj3 = {
f() {
this.foo = ‘bar’;
}
};
new obj3.f() // 报错

属性表达式

JavaScript定义属性的方式,在ES6之前只有一种方法

  • 直接用标识符作为属性名称(ES6以前)
// 1. 用于属性
let a = ‘he’;
const obj1 = {
[a] : true,
}
console.log(obj1[a]) // true
console.log(obj1.ab) // 2
console.log(obj1[‘ab’]) // 2
// 2. 用于方法名称
const obj2 = {
‘h’+‘e’{
return ‘2’;
}
}
obj2.he() //“2”
// 3. 注意属性名不能为对象
const keyA = {a: 1};
const keyB = {b: 2};
const myObject = {
};
myObject // Object {[object Object]: “valueB”}
// keyA和keyB得到的都是[object Object],所以keyB会把keyA覆盖掉,而myObject最后只有一个[object Object]属性,这就是","的操作
  • 属性名表达式与简洁表示法,不能同时使用,会报错const baz = { [foo] };
  • 属性名表达式如果是一个对象,默认情况下会自动将对象转为字符串[object Object]

回到顶部 目录

函数参数的解构赋值


语法:[[1, 2], [3, 4]].map(([a, b]) => a + b); \\ [3, 7]

function fn({
a,
b,
c = 10,
d = 20,
} = {}){
return a+b+c+d;
}
fn({a:1,b:2})
// 33

语法都是上面数组和对象的解构赋值

圆括号问题


尽量不要写带有()的语句出来

解构赋值虽然很方便,但是解析起来并不容易。对于编译器来说,一个式子到底是模式,还是表达式,没有办法从一开始就知道,必须解析到(或解析不到)等号才能知道,乱加圆括号也是导致编译报错

不能使用圆括号的情况:

  1. 变量声明语句 let [(a)] = [1]
  2. 函数参数 function fn([(z)]){}


相关文章
|
5月前
|
安全
网易web安全工程师进阶版课程
《Web安全工程师(进阶)》是由“ i春秋学院联合网易安全部”出品,资深讲师团队通过精炼的教学内容、丰富的实际场景及综合项目实战,帮助学员纵向提升技能,横向拓宽视野,牢靠掌握Web安全工程师核心知识,成为安全领域高精尖人才。 ## 学习地址
40 6
网易web安全工程师进阶版课程
|
5月前
|
JSON JavaScript Go
Go 语言学习指南:变量、循环、函数、数据类型、Web 框架等全面解析
掌握 Go 语言的常见概念,如变量、循环、条件语句、函数、数据类型等等。深入了解 Go 基础知识的好起点是查阅 Go 官方文档
930 2
|
1月前
|
SQL 前端开发 JavaScript
Web前端开发工程师岗位要求
Web前端开发工程师岗位要求
|
5月前
|
前端开发 JavaScript
【Web 前端】ES6新增的内容有哪些?
【5月更文挑战第1天】【Web 前端】ES6新增的内容有哪些?
【Web 前端】ES6新增的内容有哪些?
|
5月前
|
JavaScript 前端开发
web前端JS高阶面试题(1),高级开发工程师面试
web前端JS高阶面试题(1),高级开发工程师面试
|
5月前
|
自然语言处理 前端开发
【Web 前端】es6 中的箭头函数?
【5月更文挑战第1天】【Web 前端】es6 中的箭头函数?
|
5月前
|
存储 前端开发 索引
【Web 前端】ES6中,Set和Map的区别 ?
【5月更文挑战第1天】【Web 前端】ES6中,Set和Map的区别 ?
|
5月前
|
前端开发 算法
【css炫酷动画】让面试官眼前一亮的故障风格文字动画,3年Web前端开发工程师面试经验分享
【css炫酷动画】让面试官眼前一亮的故障风格文字动画,3年Web前端开发工程师面试经验分享
|
5月前
|
移动开发 前端开发 JavaScript
web前端之ES6的实用深度解构赋值方法、复杂的解构赋值
web前端之ES6的实用深度解构赋值方法、复杂的解构赋值
61 1
|
1天前
|
设计模式 测试技术 持续交付
开发复杂Web应用程序
【10月更文挑战第3天】开发复杂Web应用程序
8 2