JavaScript is required

Cho đoạn code sau, kết quả là:
const a = {
stringField: 'Joe',
nestedField: { field: 'Nested' },
functionField: () => 'aReturn'
};
const b = Object.assign({}, a);
b.stringField = 'Bob';
b.nestedField.field = 'Changed';
b.functionField = () => 'bReturn';
console.log(
a.stringField,
a.nestedField.field,
a.functionField()
);

A.
Joe Nested aReturn
B.
Bob Changed bReturn
C.
Joe Changed aReturn
D.
Bob Nested bReturn
Trả lời:

Đáp án đúng: C


Đoạn code này kiểm tra sự hiểu biết về cách `Object.assign()` hoạt động, đặc biệt là với các đối tượng lồng nhau (nested objects) và các hàm. 1. `const b = Object.assign({}, a);`: Dòng này tạo một bản sao nông (shallow copy) của đối tượng `a` và gán cho `b`. Điều này có nghĩa là các thuộc tính nguyên thủy (primitive) như `stringField` sẽ được sao chép giá trị, nhưng các thuộc tính là đối tượng (như `nestedField`) hoặc hàm (như `functionField`) sẽ được sao chép tham chiếu. 2. `b.stringField = 'Bob';`: Vì `stringField` là một thuộc tính nguyên thủy, việc thay đổi giá trị của nó trong `b` không ảnh hưởng đến `a`. Do đó, `a.stringField` vẫn là `'Joe'`. 3. `b.nestedField.field = 'Changed';`: Vì `nestedField` là một đối tượng, cả `a` và `b` đều tham chiếu đến cùng một đối tượng `nestedField`. Do đó, việc thay đổi `b.nestedField.field` sẽ ảnh hưởng đến `a.nestedField.field`. Kết quả là `a.nestedField.field` sẽ là `'Changed'`. 4. `b.functionField = () => 'bReturn';`: Tương tự như `stringField`, `functionField` cũng được gán lại cho đối tượng `b` bằng một hàm mới. Nó không ảnh hưởng đến hàm `functionField` ban đầu trong đối tượng `a`. Do đó, `a.functionField()` vẫn trả về `'aReturn'`. Vậy kết quả in ra sẽ là: `Joe Changed aReturn`

Tổng hợp 500 câu hỏi trắc nghiệm Javascript có đáp án đầy đủ nhằm giúp các bạn dễ dàng ôn tập lại toàn bộ các kiến thức.


50 câu hỏi 60 phút

Câu hỏi liên quan