Lấy từ MDN
Các chuỗi ký tự (được biểu thị bằng dấu ngoặc kép hoặc đơn) và các chuỗi được trả về từ các lệnh gọi Chuỗi trong ngữ cảnh không phải là hàm tạo (tức là không sử dụng từ khóa mới) là các chuỗi nguyên thủy. JavaScript tự động chuyển đổi các nguyên mẫu thành các đối tượng Chuỗi, để có thể sử dụng các phương thức đối tượng Chuỗi cho các chuỗi nguyên thủy. Trong các ngữ cảnh mà một phương thức sẽ được gọi trên một chuỗi nguyên thủy hoặc xảy ra tra cứu thuộc tính, JavaScript sẽ tự động bọc chuỗi nguyên thủy và gọi phương thức hoặc thực hiện tra cứu thuộc tính.
Vì vậy, tôi nghĩ (về mặt logic) các hoạt động (gọi phương thức) trên chuỗi nguyên thủy sẽ chậm hơn các hoạt động trên Đối tượng chuỗi vì bất kỳ nguyên thủy chuỗi nào cũng được chuyển đổi thành Đối tượng chuỗi (công việc bổ sung) trước khi method
được áp dụng trên chuỗi.
Nhưng trong trường hợp thử nghiệm này , kết quả là ngược lại. Khối mã-1 chạy nhanh hơn khối mã-2 , cả hai khối mã được đưa ra bên dưới:
mã khối-1:
var s = '0123456789';
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
mã khối-2:
var s = new String('0123456789');
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
Kết quả khác nhau trên các trình duyệt nhưng khối mã 1 luôn nhanh hơn. Bất cứ ai có thể vui lòng giải thích điều này, tại sao mã khối-1 nhanh hơn mã khối-2 .
'0123456789'.charAt(i)
sao?
code block-1
nhanh hơn?
new String
giới thiệu một lớp trong suốt khác của gói Object .typeof new String(); //"object"