Cú pháp literal object mở rộng Javascript (phần 6)

Toán tử spread (tiếp tục)

Nếu object cái được trải ra và object nó đang được trải vào cả hai có một đặc tính cùng tên, thì giá trị của đặc
tính đó sẽ là cái cái đi đến cuối:

let o = { x: 1 };
let p = { x: 0, …o };
p.x // => 1: the value from object o overrides the initial value
let q = { …o, x: 2 };
q.x // => 2: the value 2 overrides the previous value from o.

Cũng chú ý rằng toán tử spread chỉ trải các đặc tính bản thân của một object, không phải bất cứ cái kế thừa nào:

let o = Object.create({x: 1}); // o inherits the property x
let p = { …o };
p.x // => undefined

Cuối cùng, nó là đáng chú ý rằng, mặc dù toán tử spread chỉ là 3 dấu chấm trong code của bạn, nó có thể trình bày
một lượng đáng kể công việc đối với trình dịch Javascript. Nếu một object có n đặc tính, quá trình trải các đặc tính
đó vào object khác có khả năng là O(n) hoạt động. Cái này có nghĩa rằng bạn thấy bản thân bạn đang sử dụng … bên
trong một loop hay hàm recursive như một cách thức để tích lũy dữ liệu vào một object lớn, bạn có thể đang viết một
thuật toán O(n2) không hiệu quả cái sẽ không tăng quy mô tốt khi n lớn hơn.

Chia sẻ