Vanilla JS:
Câu trả lời của @ evan có vẻ tốt nhất ở đây. Chỉ cần (ab) sử dụng JSON.parse / stringify để tạo một bản sao của đối tượng một cách hiệu quả.
console.log(JSON.parse(JSON.stringify(test)));
Giải pháp cụ thể của JQuery:
Bạn có thể tạo ảnh chụp nhanh của một đối tượng tại một thời điểm nhất định với jQuery.extend
console.log($.extend({}, test));
Điều thực sự xảy ra ở đây là jQuery đang tạo một đối tượng mới với test
nội dung của đối tượng và ghi nhật ký đó (vì vậy nó sẽ không thay đổi).
Giải pháp cụ thể của AngularJS (1):
Angular cung cấp một copy
chức năng có thể được sử dụng cho cùng một hiệu ứng:angular.copy
console.log(angular.copy(test));
Hàm bao bọc Vanilla JS:
Đây là một chức năng bao bọc console.log
nhưng sẽ tạo một bản sao của bất kỳ đối tượng nào trước khi đăng xuất chúng.
Tôi đã viết điều này để đáp lại một vài chức năng tương tự nhưng kém mạnh mẽ hơn trong các câu trả lời. Nó hỗ trợ nhiều đối số và sẽ không cố sao chép mọi thứ nếu chúng không phải là đối tượng thông thường .
function consoleLogWithObjectCopy () {
var args = [].slice.call(arguments);
var argsWithObjectCopies = args.map(copyIfRegularObject)
return console.log.apply(console, argsWithObjectCopies)
}
function copyIfRegularObject (o) {
const isRegularObject = typeof o === 'object' && !(o instanceof RegExp)
return isRegularObject ? copyObject(o) : o
}
function copyObject (o) {
return JSON.parse(JSON.stringify(o))
}
sử dụng ví dụ :consoleLogWithObjectCopy('obj', {foo: 'bar'}, 1, /abc/, {a: 1})