30/09/2018, 21:46
Cách copy object trong javascript (Passing object by value)
Có phải chỉ cần dùng lệnh gán (newObj = oldObj) là xong?
Câu trả lời không đơn giản như vậy, newObj và oldObj vẫn liên kết với nhau, muốn thay đổi giá trị trong newObj mà không ảnh hưởng đến oldObj cách đơn giản nhất là dùng Object.assign() - một hàm trong ECMAScript 2015 (ES6):
var newObj = Object.assign({}, oldObj);
Ví dụ làm rõ vấn đề:
var oldObj = {a: 123}
var newObj = oldObj;
newObj.a = 456;
console.log("oldObj.a is changed to: "+oldObj.a); //oldObj.a is changed to: 456
newObj = Object.assign({},oldObj);
newObj.a = 789;
console.log("oldObj.a is still: "+oldObj.a); //oldObj.a is still : 456
Bài liên quan
Nếu trình duyệt chưa hỗ trợ ES6, như Internet Explorer chẳng hạn. Vẫn có cách giải quyết vấn đề mà chứ nhỉ?
Đương nhiên là có. Lúc đó ta sẽ tự dựng hàm để clone Object.
Ở đây có 4 phương pháp: http://heyjavascript.com/4-creative-ways-to-clone-objects/
Cách dùng thư viện JSON rất ngắn nhưng có lẽ hao điện lắm đây.
Mình thì khoái dung spread operator. Nó chưa thành ES chính thức (lần cuối check nó đang ở Stage 3) nên cần phải dùng babel
Oh. Mình vừa thử Spread Operator như bạn nói, giờ nó đã là Standard trong ES6 nhưng đa phần hỗ trợ Firefox, Các browser khác không hỗ trợ đầy đủ. Mình dùng chrome 51 trên Fedora chỉ áp dụng được Spread Operator cho array thôi, object thì chưa bao giờ thành công.
Spread operator hỗ trợ object vẫn đang ở Stage 2
tc39/proposal-object-rest-spread
proposal-object-rest-spread - Rest/Spread Properties for ECMAScript