length
เป็นคุณสมบัติไม่ใช่วิธีการ คุณไม่สามารถเรียกมันได้ดังนั้นคุณไม่จำเป็นต้องมีวงเล็บ()
:
function getlength(number) {
return number.toString().length;
}
อัปเดต:ตามที่กล่าวไว้ในความคิดเห็นตัวอย่างข้างต้นใช้ไม่ได้กับตัวเลขลอย เพื่อให้เราทำงานอย่างใดอย่างหนึ่งสามารถได้รับการกำจัดของระยะเวลาการมีหรือนับตัวเลขที่มีการแสดงออกปกติ:String(number).replace('.', '').length
String(number).match(/\d/g).length
ในแง่ของความเร็วอาจเป็นวิธีที่เร็วที่สุดในการรับจำนวนหลักในจำนวนที่กำหนดคือการคำนวณทางคณิตศาสตร์ สำหรับจำนวนเต็มบวกมีอัลกอริทึมที่ยอดเยี่ยมซึ่งประกอบด้วยlog10
:
var length = Math.log(number) * Math.LOG10E + 1 | 0; // for positive integers
สำหรับจำนวนเต็มทุกประเภท (รวมทั้งเชิงลบ) มีโซลูชันที่ได้รับการปรับให้เหมาะสมอย่างยอดเยี่ยมจาก@ Mwr247แต่โปรดใช้ความระมัดระวังMath.log10
เนื่องจากเบราว์เซอร์เดิมจำนวนมากไม่รองรับ ดังนั้นแทนที่Math.log10(x)
ด้วยMath.log(x) * Math.LOG10E
จะช่วยแก้ปัญหาความเข้ากันได้
การสร้างคำตอบทางคณิตศาสตร์ที่รวดเร็วสำหรับเลขฐานสิบไม่ใช่เรื่องง่ายเนื่องจากพฤติกรรมที่เป็นที่รู้จักกันดีของเลขทศนิยมดังนั้นวิธีการร่ายต่อสตริงจะง่ายกว่าและพิสูจน์ไม่ได้ ดังที่ได้กล่าวไว้โดย@streetlogics การแคสต์อย่างรวดเร็วสามารถทำได้โดยใช้ตัวเลขอย่างง่ายต่อการต่อสตริงซึ่งจะทำให้โซลูชันการแทนที่เปลี่ยนเป็น:
var length = (number + '').replace('.', '').length; // for floats