Object ใน JavaScript, การขยายต่อเติม
Object.assign()
จะ copy enumerable own property ของ object ที่ถัดจาก argument ตัวแรกใส่เข้าไปใน object ที่เป็น argument ตัวแรก ถ้าชื่อ property ซ้ำ ค่าจะถูกเขียนทับ
สร้าง object ที่เป็นค่าผสมระหว่าง default กับค่าใหม่
o = Object.assign({}, defaults, o);
o = {...defaults, ...o};
Serializing Objects
คือการเปลี่ยน object ให้อยู่ในรูป String ที่เป็น JSON (JavaScript Object Notation) หรือกลับกัน
let o = {x: 1, y: {z: [false, null, ""]}}; // Define a test object let s = JSON.stringify(o); // s == '{"x":1,"y":{"z":[false,null,""]}}' let p = JSON.parse(s); // p == {x: 1, y: {z: [false, null, ""]}}
ในการแปลง Object เป็น JSON NaN, Infinity, -Infinity, จะถูกแปลงเป็น null วันเวลาจะแปลงเป็น String ใน ISO format แต่JSON.parse จะไม่แปลมันกลับเป็นวันเวลา วันเวลาจะกลายเป็น String ตอนแปลงกลับแทน
Function, RegExp, Error, undefined จะไม่โดนแปลง
JSON.stringify() จะแปลงเฉพาะ enumberable own property เท่านั้น
Object Methods
Object ส่วนใหญ่จะสืบทอด property และ function มาจาก Object.prototype
toString()
Method นี้จะถูกเรียกใช้โดยอัตโนมัตเมื่อโค้ดรอบข้างต้องการใช้ String เช่นเมื่อมีการใช้เครื่องหมาย + เพื่อต่อ String
Method นี้ที่ติดมากับ Object.prototype จะใช้ทำอะไรได้ไม่มากนัก
let s = { x: 1, y: 1 }.toString(); // s == "[object Object]"
Class เฉพาะอื่นๆจะมี Method นี้เฉพาะต่างๆกันไป เช่น Array จะถูกแปลงเป็น CSV (comma seperated value) Function จะแปลงเป็น source code
สร้าง toString ขึ้นมาเอง
let point = { x: 1, y: 2, toString: function() { return `(${this.x}, ${this.y})`; } }; String(point) // => "(1, 2)": toString() is used for string conversions
toLocaleString()
Method นี้ที่ติดมากับ Object.prototype จะไปเรียก toString ต่อ ส่วน class Date กับ Number จะมี method เฉพาะของมันเอง
Method นี้ใน Array จะเรียกใช้ toLocaleString ของสมาชิกใน Array
สร้าง toLocaleString ขึ้นมาเอง
let point = { x: 1000, y: 2000, toString: function() { return `(${this.x}, ${this.y})`; }, toLocaleString: function() { return `(${this.x.toLocaleString()}, ${this.y.toLocaleString()})`; } }; point.toString() // => "(1000, 2000)" point.toLocaleString() // => "(1,000, 2,000)": note thousands separators
valueOf()
จะคล้ายกับ toString แต่จะแปลงค่าให้เป็นข้อมูลที่ไม่ใช่ String ส่วนมากจะเป็นตัวเลข
method นี้จะถูกเรียกใช้อัตโนมัตเมื่อโค้ดรอบข้างต้องการใช้ Number
Method นี้ใน Date จะคืนค่าเป็นจำนวน milisecond จาก Epoch
let point = { x: 3, y: 4, valueOf: function() { return Math.hypot(this.x, this.y); } }; Number(point) // => 5: valueOf() is used for conversions to numbers point > 4 // => true point > 5 // => false point < 6 // => true
toJSON()
Method นี้ไม่มีอยู่ใน Object.prototype
JSON.stringify() จะมองหา method นี้ใน Object และจะเรียกใช้มันในการแปลงค่าเป็น JSON
let point = { x: 1, y: 2, toString: function() { return `(${this.x}, ${this.y})`; }, toJSON: function() { return this.toString(); } }; JSON.stringify([point]) // => '["(1, 2)"]'
Comments
Post a Comment