2015-07-11 28 views
13

Có sự khác biệt quan trọng nào (ngữ nghĩa, liên quan đến hiệu suất, v.v.) giữa (1) và (2) không?(obj || {}) vs Đối tượng (obj)

  1. var obj = obj || {};
  2. var obj = Object(obj);

Context. Đầu tiên là cách tôi đã chia sẻ các biến trên các mẫu của Django và các tệp js của tôi. Tôi chỉ đi qua một phần trong Rauschmayer 2014 ("Chức năng cho chuyển đổi Boolean, Number, String, và Object", pg 79.), Nơi ông được mô tả Object(obj) như sau:

  • obj nếu obj là một đối tượng,
  • {} nếu objundefined hoặc null,
  • [bọc nguyên thủy] nếu obj là một giá trị nguyên thủy.

Cho rằng ngữ nghĩa (rất chính thức) (đặc biệt là hai mệnh đề đầu tiên), dường như tôi có thể sử dụng (2) ở bất cứ nơi nào chúng tôi sử dụng (1), nhưng tôi không chắc chắn sẽ có.

Rauschmayer, Axel (2014) Speaking JavaScript (miễn phí để đọc trực tuyến).

+2

'1' là thành ngữ phổ biến,' 2' không phải là. Để làm cho mã của bạn dễ hiểu đối với hầu hết các lập trình viên, hãy gắn bó với cú pháp thông thường. – Barmar

Trả lời

13

Có sự khác biệt, như báo giá bạn đã đề cập. Ký hiệu đầu tiên sẽ trả về nguyên thủy khi obj là nguyên thủy. Cái thứ hai sẽ trả về một số nguyên là được bọc.

Nếu phần còn lại của mã dựa trên obj là đối tượng, ký hiệu thứ hai sẽ phòng thủ hơn.

Nhưng sau đó một lần nữa, ký hiệu đầu tiên là phổ biến hơn, và người ta có thể tự hỏi làm thế nào một giá trị nguyên thủy sẽ được gán cho một biến có tên là obj.

+1

Cảm ơn bạn đã trả lời chu đáo. Rất hữu ích. – Readingtao

Các vấn đề liên quan