2011-12-28 25 views
7

thể trùng lặp:
Difference between the javascript String Type and String Object?sự khác biệt của "String" đối tượng, và chuỗi chữ trong JavaScript

Viết mã đơn giản này trong Firebug:

console.log(new String("string instance")); 
console.log("string instance"); 

Những gì bạn thấy là:

enter image description here

Tại sao hai cuộc gọi console.log() này dẫn đến kết quả khác nhau? Tại sao chuỗi chữ không giống như việc tạo chuỗi thông qua đối tượng String? Đó có phải là một phong cách biểu diễn Firebug? Hay chúng khác nhau về bản chất?

+0

Vui lòng truy cập các bài http://stackoverflow.com/câu hỏi/2051833/khác biệt-giữa-the-javascript-string-type-và-string-đối tượng – Ravia

+0

-1 rõ ràng trùng lặp –

+2

@ TomalakGeret'kal bản sao không bảo đảm downvotes, chỉ cần bỏ phiếu để đóng như bản sao tôi f bạn có đại diện, hoặc chỉ ra nó và người khác sẽ. – Davy8

Trả lời

6

Chúng khác nhau. Một chuỗi ký tự là một giá trị nguyên thủy, trong khi một thể hiện "String" là một đối tượng. Kiểu chuỗi nguyên thủy được quảng bá tự động đến một đối tượng String khi cần thiết.

Tương tự, có các phiên bản nguyên gốc và số "Số" và các phiên bản gốc Boolean và "Boolean".

+1

Đối với những gì nó có giá trị, để có được một chuỗi chữ từ một đối tượng String, bạn có thể gọi hàm 'toString()' trên đối tượng String. Ví dụ, 'new String ("bork") === "bork" 'là false, trong khi' new String ("bork"). Ồ, javascript ... –

+0

Và "quảng cáo" này diễn ra như thế nào? – JohnMerlino

2

new String("...") trả về một chuỗi đối tượng.

"..." trả về một chuỗi nguyên thủy.

Một số khác biệt là:

  • new String("foo") === new String("foo") - false; quy tắc bình đẳng tham chiếu đối tượng
  • "foo" === "foo" - true; bình đẳng chuỗi quy tắc

và:

  • new String("foo") instanceof Object - true; đó là một đối tượng bắt nguồn từ Object
  • "foo" instanceof Object - false; nó không phải là một đối tượng mà là một giá trị nguyên thủy

Hầu hết các lần bạn chỉ muốn một giá trị nguyên thủy vì những "quirks" này. Lưu ý rằng các đối tượng chuỗi được chuyển thành các chuỗi gốc tự động khi thêm chúng, gọi các hàm String.prototype trên chúng, v.v.

Thông tin thêm in the specs.

1

console.log("string instance"); in chuỗi litral nhưng console.log(new String("string instance")); là đối tượng để in tất cả các chi tiết của chuỗi như mỗi chỉ mục và ký tự. Xem ảnh chụp màn hình bên dưới, hiển thị từng ký tự của "string instance".

enter image description here

1

thử console.log((new String("string instance")).toString())

Anyways, đó là vì new String("string instance") là một đối tượng, và console.log không đối tượng tự động stringify

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