10 เรื่องของ ES6 ที่คุณควรรู้ไว้ (ตอนที่ 3 Enhanced Object Literals)
สวัสดีครับท่านผู้สนใจในการเขียนโปรแกรมด้วยภาษา JavaScript
ทุกท่าน บทความนี้เป็นตอนที่ 3 ในซี่รีย์ชุด 10 เรื่องของ ES6 ที่คุณควรรู้ไว้ ครั้งนี้ เรามาลุยกันต่อในเรื่อง Object literals
ในบทความนี้เราจะมาเรียนรู้กันในเรื่อง Enhanced Object Literals ซึ่งเป็นเนื้อหาสำคัญอีกเรื่องหนึ่งใน ES6
ที่คุณควรรู้จักเอาไว้ มาลุยกันเลยครับ
Object ปะทะ JSON
รูปแบบการประกาศ object ใน JavaScript
นั้นมีหน้าตาใก้ลเคียงกับรูปแบบการประกาศ JSON
เอามากๆ ซึ่ง ณ ปัจจุบันคิดว่าคงจะไม่มีเว็บโปรแกรมเมอร์คนไหนไม่รู้จักเจ้า JSON
นี้เป็นแน่
สำหรับท่านใดที่ยังไม่คุ้นเคยกับรูปแบบ JSON
มาดูตัวอย่างกันก่อน
{
"make": "Japan",
"model": "VIOS",
"value": 1500
}
ปัจจุบันกล่าวได้ว่า JSON
เป็นรูปแบบที่นักพัฒนานิยมใช้ในการแลกเปลี่ยนข้อมูลกันไปมาระหว่าง application ฝั่ง frontend และฝั่ง backend เนื่องด้วยก็เพราะเหตุผลอย่างที่เห็นตามตัวอย่าง มันมีรูปแบบที่สั้นกระชับ ทำความเข้าใจง่าย จึงได้รับความนิยมมากนั่นเอง
รูปแบบการประกาศ Property
วิธีการประกาศ object ขึ้นมาใช้งานใน ES6
มีการปรับปรุงการใช้งานให้ง่ายและกระชับมากขึ้นกว่ารูปแบบการประกาศแบบ ES5
เราลองมาเปรียบเทียบกันดูว่าระหว่างทั้ง 2 แบบมีวิธีการใช้งานแตกต่างกันอย่างไร เริ่มกันที่แบบ ES5
ก่อน
// การกำหนคค่าให้กับ property ใน ES5
function makeUser(email, fullname, phone) {
return {
email: email,
fullname: fullname,
phone: phone
};
}
// เรียกใช้งานฟัง์ชั่น
makeUser('test@gmail.com', 'rockman', 'xxx-xxxxxx');
จากตัวอย่าง function ชื่อ markUser จะรับ parameter 3 ตัวคือ email, fullname และ phone และจะให้ผลลัพธ์เป็น object ซึ่งจะมี property ชื่อเดียวกับ parameter ที่รับค่ามา คือ emil, fullname และ phone เช่นกัน
ทีนี้ลองมาดูการใช้งานในแบบ ES6
กัน ว่าถ้าความต้องการแบบเดียวกันการเขียนจะแตกต่างกันอย่างไร
// การกำหนคค่าให้กับ property ใน ES6
function makeUser(email, fullname, phone) {
return {
email,
fullname,
phone
};
}
// เรียกใช้งานฟัง์ชั่น
makeUser('test@gmail.com', 'rockman', 'xxx-xxxxxx');
เป็นยังไงครับ ใน ES6
เราสามารถนำตัวแปรที่ใช้รับค่าที่ส่งให้มาเป็น property ของ object ได้เลยทันที เมื่อเปรียบเทียบกันทั้ง 2 แบบคงเห็นแล้วว่าการกำหนด property ให้กับ object ในแบบ ES6
นั้นทำให้เราเขียน code ได้สั้นลงกว่าแบบ ES5
พอสมควรเลย เพิ่มเวลาพักผ่อนเราขึ้นได้อีกนิส :)
Computed property keys
ก่อนอธิบายส่วนี้ผมขอทบทวนวิธีการเข้าถึง property ของ object กันก่อน อย่างที่คุณพอที่จะรู้กันอยู่แล้วว่า ถ้าต้องการเข้าถึงข้อมูลที่เก็บอยู่ใน property ของ object ใดๆ นั้น สามารถทำได้ 2 วิธีคือ
- ใช้เครื่องหมายจุด
.
(dot notation) เช่น ถ้าเราต้องการเข้าถึงข้อมูลที่เก็บใน property ที่ชื่อว่า name ของ object ที่ชื่อว่า myPet รูปแบบการใช้งานคือ myPet.name - ใช้เครื่องหมายวงเล็บปีกกาสี่เหลี่ยม
[ ]
(square bracket notation) เช่น ถ้าเราต้องการเข้าถึงข้อมูลที่เก็บใน property ที่ชื่อว่า name ของ object ที่ชื่อว่า myPet รูปแบบการใช้งานจะเป็น myPet['name']
มาดูตัวอย่างทั้งหมดในโค้ดตัวอย่าง
// ประกาศ object myPet
let myPet = { name: 'บราวน์', type: 'dog' };
// เข้าถึงข้อมูลโดยการใช้ dot notation
console.log(myPet.name);
// เข้าถึงข้อมูลโดยการใช้ square bracket notation
console.log(myPet['name']);
เราสามารถใช้ string literals และเครื่องหมายวงเล็บปีกกาสี่เหลี่ยม [ ]
เพื่อประกาศ property ได้ โดยระหว่าง ES5
และ ES6
ก็มีความแตกต่างกันอีกเช่นเคย มาเริ่มที่ ES5
กันก่อน
var props = "name";
var obj = {};
obj[props] = "Foo";
console.log(obj.name);
และต่อกันด้วยแบบ ES6
var props = "name";
const obj = {
[props]: "Bar"
}
console.log(obj.name);
จากตัวอย่างทั้ง 2 คงพอจะเห็นกันว่า ใน ES5
เราจะต้องทำการประกาศ obj
object ก่อน จากนั้นจึงค่อยประกาศ property โดยใช้ string literals และกำหนดค่าข้อมูลลงไป
นอกจากนั้นแล้วเรายังสามารถใช้ string literals รวมกับ expression ภายในเครื่องหมายวงเล็บปีกกาสี่เหลี่ยม [ ]
เพื่อประกาศ property ได้เช่นเดียวกัน มาลองดูตัวอย่างกัน
var props = "name";
var i = 0;
const stringWithExpression = {
[props + ++i]: "Foo",
[props + ++i]: "Bar",
[props + ++i]: "Haha"
}
console.log(stringWithExpression.name1); //"Foo"
console.log(stringWithExpression.name2); //"Bar"
console.log(stringWithExpression.name3); //"Haha"
Method definition shorthand
การประกาศ method ของ object ใน ES6
ช่วยให้เราสามารถลดจำนวนการใช้งาน syntax ลง มาดูตัวอย่างจาก ES5
กันก่อน
// การประกาศ method ของ object ใน ES5
function getCar(make, model, value) {
return {
// เราใช้ syntax function และ : ในตอนประกาศ method
depreciate: function() {
this.value -= 1500;
}
};
}
แล้วในแบบ ES6
ละเป็นแบบไหน
// การประกาศ method ของ object ใน ES6
function getCar(make, model, value) {
return {
// เราสามารถละ syntax function และ : ได้ในตอนประกาศ method
depreciate() {
this.value -= 1500;
}
};
}
บทความนี้ขอเสนอเนื้อหาในเรื่อง Object literals ไว้เบาๆ เพียงเท่านี้ก่อน ขอให้ติดตามและสนุกกับการเรียนรู้กันต่อไปนะครับ
Top comments (0)