一緒に書く習慣をつけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して8日目です。クリックしてイベントの詳細をご覧ください。
ES6のリリース(ES2015)は、JavaScriptにオブジェクトプロパティを処理するためのより便利で迅速な方法を提供します。このメカニズムはDestructuring
(破壊割り当てとも呼ばれます)と呼ばれます。しかし、あなたは本当にそれを使いますか?さまざまなシナリオでの破壊的代入の使用法を本当に理解していますか?
破壊を使用してオブジェクトから値を取得する
オブジェクト分解の最も基本的な使用法は、オブジェクトからプロパティキーの値を取得することです。
たとえば、nameとageの2つのプロパティを持つオブジェクトを定義します
const User = {
name: '搞前端的半夏',
age: 18
}
复制代码
従来、ドット(。)表記または添え字([])表記を使用してオブジェクトから値を取得していました。次のコードスニペットは、ドット表記を使用してオブジェクトの値id
を取得し、オブジェクトから値を取得する例を示しています。name
employee
オブジェクトのプロパティの値を取得する前は、.
またはを使用するのが一般的でし[]
た。
const name = User['name'];
const age = User.age;
复制代码
もちろん、この2つの方法は現状では問題ありませんが、Userの属性が多い場合は、コピーと貼り付けを続ける必要があり、コードが繰り返されることになります。
構造体の割り当てにより、値をすばやく取得できます。たとえば、オブジェクトのキー名を使用して変数を作成し、オブジェクトの値を同じキーに割り当てます。このように、プロパティがいくつあっても、プロパティ名を割り当てるだけで、繰り返しの多いコードを減らすことができます。
const { name, age } = User;
复制代码
破棄を使用してネストされたオブジェクトから値を取得する
上記の例では、Userは単純な単一レイヤーオブジェクトであり、日常の開発でもネストされたオブジェクトに遭遇するため、構造の割り当てを使用して、ネストされたオブジェクトの値を取得するにはどうすればよいですか?次に、Userオブジェクトを再定義し、このオブジェクトに連絡先プロパティを追加します。このオブジェクトには、ユーザーの電話が含まれています。。
const User = {
name: '搞前端的半夏',
age: '18',
contact:{
phone:'110',
}
}
复制代码
.
その時の電話の価値を前後に使うと2倍かかります.
const phone = User.contact.phone;
复制代码
破壊的割り当てが使用される場合:次のように記述されます。
const {contact:{phone}}=User
consosle.log(phone) // 输出10.
复制代码
ネストのレベルがいくつあっても、この書き込み方法に従う限り、確実に特定の値が得られます。
オブジェクトの破棄を使用して、デフォルト値で新しい変数を定義します
デフォルト
もちろん、日々の発展の過程で、私たちは多くの極端な状況に遭遇するかもしれません。
例如后端传过来的对象,可能会缺失某些字段
const User = {
name: '搞前端的半夏',
}
复制代码
或者属性没有具体的值:
const User = {
name: '搞前端的半夏',
age: ''
}
复制代码
当我们使用解构赋值的话:无论是否存在age属性的话,都会创建age变量。
const { name, age } = employee;
复制代码
当User.age没有具体值得话,我们则可以使用
const { name, age=18 } = employee;
复制代码
给age一个默认值。
新变量
坚持,稍等。解构部分有更多的魔力展示!如何创建一个全新的变量并分配一个使用对象属性值计算的值?听起来很复杂?这是一个例子,
当我们想输出User属性的组合值的话,应该怎么做呢?
const { name,age,detail = `${name} 今年 ${age} `} = User ;
console.log(detail); // 输出:搞前端的半夏 今年 18
复制代码
使用 JavaScript 对象解构别名
在 JavaScript 对象解构中,您可以为解构变量alias
命名。减少变量名冲突的机会非常方便。
const User = {
name: '搞前端的半夏',
age: ''
}
复制代码
假设我们想用解构赋值获取age属性的值,但是代码中已经又age这个变量了,我们这个时候就需要在结构的时候定义别名。
const { age: userAge } = User;
console.log(userAge); //搞前端的半夏
复制代码
而如果使用age的话,会报错。
console.log(age);
复制代码
。*
使用对象解构处理动态名称属性
我们经常将 API 响应数据作为 JavaScript 对象处理。这些对象可能包含动态数据,因此作为客户端,我们甚至可能事先不知道属性键名称。
const User = {
name: '搞前端的半夏',
age: ''
}
复制代码
当我们将键作为参数传递时,我们可以编写一个返回User对象属性值的函数。这里我们使用了[]
,来接受参数,js会根据这个键对从对象中检索!
function getPropertyValue(key) {
const { [key]: returnValue } = User;
return returnValue;
}
复制代码
const contact = getPropertyValue('contact');
const name = getPropertyValue('name');
console.log(contact, name); // 空 搞前端的半夏
复制代码
在函数参数和返回值中解构对象
解构赋值传参
使用对象解构将属性值作为参数传递给函数。
const User = {
name: '搞前端的半夏',
age: 18
}
复制代码
name
现在让我们创建一个简单的函数,该函数使用和属性值创建一条消息dept
以登录到浏览器控制台。
function consoleLogUser({name, age}) {
console.log(`${name} 今年 ${age}`);
}
复制代码
直接将值作为函数参数传递并在内部使用它们。
consoleLogUser(User); // 搞前端的半夏 今年 18
复制代码
解构函数对象返回值
对象解构函数还有另一种用法。如果函数返回一个对象,您可以将值直接解构为变量。让我们创建一个返回对象的函数。
function getUser() {
return {
'name': '搞前端的半夏',
'age': 18
}
}
复制代码
const { age } = getUser();
console.log(age); // 18
复制代码
在循环中使用对象解构
我们将讨论的最后一个(但并非最不重要的)用法是循环解构。让我们考虑一组员工对象。我们想要遍历数组并想要使用每个员工对象的属性值。
const User= [
{
'name': '爱分享的半夏',
'age': 16
},
{
'name': '搞前端的半夏',
'age': 18
},
{
'name': '敲代码的半夏',
'age': 20
}
];
复制代码
您可以使用for-of
循环遍历User
对象,然后使用对象解构赋值语法来检索详细信息。
for(let {name, age} of employees) {
console.log(`${name} 今年${age}岁!!!`);
}
复制代码