Câu hỏi này đã xuất hiện từ another, có liên quan đến hành vi của console.dir
bằng chuỗi ký tự. Đặc biệt, xem các ý kiến trên my answer.Tại sao các phương thức của String.prototype có sẵn cho các chuỗi ký tự?
Như chúng ta đã biết, String
đối tượng trong JavaScript có một số phương pháp. Các phương thức đó được xác định trên đối tượng String.prototype
. Ví dụ: String.prototype.toUpperCase
. Do đó chúng tôi có thể làm những việc như thế này:
var s = new String("hello"),
s2 = s.toUpperCase(); //toUpperCase is a method on String.prototype
Tuy nhiên, chúng tôi cũng có thể làm điều này:
var s = "hello", //s is a string literal, not an instance of String
s2 = s.toUpperCase();
Rõ ràng, người phiên dịch JavaScript đang làm một số hình thức chuyển đổi/cast khi bạn gọi một phương pháp String.prototype
trên một chuỗi chữ. Tuy nhiên, tôi không thể tìm thấy bất kỳ tham chiếu nào về điều này trong số spec. Nó có ý nghĩa, bởi vì nếu không bạn sẽ phải explicity đúc mỗi chuỗi chữ cho một đối tượng String
trước khi bạn có thể sử dụng bất kỳ phương pháp nào, và điều đó sẽ khá khó chịu.
Vì vậy, câu hỏi của tôi là, chức năng này được mô tả ở đâu và tôi có đúng là giả sử giá trị bằng chữ được tạm thời truyền tới một phiên bản String
không? Tôi có đang suy nghĩ quá mức và thiếu cái gì đó hiển nhiên không?
Btw ký hiệu 'chuỗi mới (giá trị)' là 100% vô dụng ... không sử dụng nó. –
Tôi biết. Câu hỏi đặt ra là tại sao. Điều này được mô tả trong spec ở đâu? –
Chuỗi ký tự là một đối tượng chuỗi: 'typeof" hello "===" string "' trả về true. Điều đó có xảy ra ở vấn đề này không? – bbg