ทำไม Firebug จึงบอกว่า toFixed () ไม่ใช่ฟังก์ชัน?


94

ฉันใช้ jQuery 1.7.2 และ jQuery UI 1.9.1 ฉันกำลังใช้รหัสด้านล่างภายในแถบเลื่อน (http://jqueryui.com/slider/)

ฉันมีฟังก์ชันที่ควรทดสอบค่าสองค่าและขึ้นอยู่กับความแตกต่างระหว่างค่าสองค่าที่ฟอร์แมตใหม่ (เป็นทศนิยมที่เหมาะสม) ถ้าความแตกต่างมากกว่า 10 ฉันจะแยกวิเคราะห์จำนวนเต็ม หากความแตกต่างมากกว่า 5 ควรคงทศนิยมไว้หนึ่งตำแหน่ง อย่างอื่นฉันจะคงทศนิยมสองตำแหน่งไว้

เมื่อฉันป้อนค่าสองค่าที่มีความแตกต่างกันสิบหรือน้อยกว่าฉันใช้ฟังก์ชัน toFixed () และใน Firebug ฉันเห็นข้อผิดพลาด:

TypeError: Low.toFixed is not a function
Low = Low.toFixed(2);

มีอะไรง่ายๆที่ฉันทำผิด?

นี่คือรหัสของฉัน:

var Low = $SliderValFrom.val(),
High = $SliderValTo.val();

// THE NUMBER IS VALID
if (isNaN(Low) == false && isNaN(High) == false) {
    Diff = High - Low;
if (Diff > 10) {
      Low = parseInt(Low);  
  High = parseInt(High);    
} else if (Diff > 5) {
       Low = Low.toFixed(1);
       High = High.toFixed(1);
} else {
       Low = Low.toFixed(2);
   High = High.toFixed(2);
}
}

ฉันมีปัญหาเดียวกัน แต่ในท้องถิ่นทำงาน เมื่อถ่ายทอดสดจะแสดงข้อผิดพลาด - TypeError: value.sell_price.toFixed ไม่ใช่ฟังก์ชัน
Mizanur Rahman

คำตอบ:


177

toFixedไม่ใช่วิธีการของตัวแปรประเภทที่ไม่ใช่ตัวเลข กล่าวอีกนัยหนึ่งLowและHighไม่สามารถแก้ไขได้เนื่องจากเมื่อคุณได้รับค่าของบางสิ่งใน Javascript จะถูกกำหนดเป็นประเภทสตริงโดยอัตโนมัติ การใช้parseFloat()(หรือparseInt()ด้วยรัศมีถ้าเป็นจำนวนเต็ม) จะช่วยให้คุณสามารถแปลงตัวแปรประเภทต่างๆเป็นตัวเลขซึ่งจะทำให้toFixed()ฟังก์ชันทำงานได้

var Low  = parseFloat($SliderValFrom.val()),
    High = parseFloat($SliderValTo.val());

คุณลืมวงเล็บและเครื่องหมายคำพูดหลังเครื่องหมาย $ ใช่หรือไม่?
Ari Waisberg

1
@AriWais $SliderValFromเป็นชื่อตัวแปรที่ OP ใช้ไม่ใช่ฟังก์ชัน
jeremy

@jeremy คุณพูดถูกฉันไม่ได้ใส่ใจกับโพสต์ต้นฉบับ ... ฉันแค่พูดกับคนที่มองตรงไปที่โซลูชัน parseFloat ($ ('slide') val ())
Ari Waisberg

91

นั่นเป็นเพราะLowเป็นสตริง

.toFixed() ใช้ได้กับตัวเลขเท่านั้น


ลองทำ:

Low = parseFloat(Low).toFixed(..);

แก้ไขข้อผิดพลาดของฉันขอบคุณ ปัญหานี้ประสบในเบราว์เซอร์ firefox
ShivarajRH

26

Low เป็นสตริง

.toFixed() ใช้ได้กับตัวเลขเท่านั้น

วิธีง่ายๆในการเอาชนะปัญหาดังกล่าวคือใช้การบีบบังคับประเภท :

Low = (Low*1).toFixed(..);

การคูณด้วย 1 บังคับให้โค้ดแปลงสตริงเป็นตัวเลขและไม่เปลี่ยนค่า รหัส JSFiddle ที่นี่


1
บันทึกหนึ่งอักขระด้วย (+ Low) .toFixed (.. ): P
Frank


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.