length
là một tài sản, không phải là một phương pháp. Bạn không thể gọi nó, do đó bạn không cần dấu ngoặc đơn ()
:
function getlength(number) {
return number.toString().length;
}
CẬP NHẬT: Như đã thảo luận trong các ý kiến, ví dụ trên sẽ không hoạt động đối với số float. Để làm cho nó hoạt động, chúng ta có thể loại bỏ một khoảng thời gian với String(number).replace('.', '').length
hoặc đếm các chữ số có biểu thức chính quy : String(number).match(/\d/g).length
.
Về mặt tốc độ có khả năng cách nhanh nhất để có được số chữ số trong số đã cho là thực hiện theo cách toán học. Đối với các số nguyên dương, có một thuật toán tuyệt vời với log10
:
var length = Math.log(number) * Math.LOG10E + 1 | 0; // for positive integers
Đối với tất cả các loại số nguyên (bao gồm cả phủ định), có một giải pháp tối ưu hóa tuyệt vời từ @ Mwr247 , nhưng hãy cẩn thận khi sử dụng Math.log10
, vì nó không được hỗ trợ bởi nhiều trình duyệt cũ. Vì vậy, thay thế Math.log10(x)
bằng Math.log(x) * Math.LOG10E
sẽ giải quyết vấn đề tương thích.
Tạo các giải pháp toán học nhanh cho các số thập phân sẽ không dễ dàng do hành vi nổi tiếng của toán học dấu phẩy động , do đó, cách tiếp cận theo chuỗi sẽ dễ dàng hơn và chứng minh đánh lừa. Như đã đề cập bởi @streetlogics, việc truyền nhanh có thể được thực hiện với số đơn giản để nối chuỗi, dẫn đến giải pháp thay thế được chuyển thành:
var length = (number + '').replace('.', '').length; // for floats