JavaScript จะคืนค่าเป็นจริงเสมอแม้ว่าจะไม่เป็นเช่นนั้นก็ตาม

นี่อาจเป็นปัญหา JavaScript ที่แปลกประหลาดที่สุดเท่าที่เคยมีมา:

$('div.GiftContainer').live('click', function () {
    var self = $(this);
    var price = $(this).attr('data-price');
    if (!self.hasClass('selected')) {
        if (price <= MyCredits) { // always returns true
            alert('OK');
            self.addClass('selected').siblings().removeClass('selected');
        } else {
            alert('MOO!');
        }
    } else {
        self.removeClass('selected');
    }
});

คืนค่าเป็นจริงแม้ว่าฉันจะเพิ่ม console.log(price + ' ' + MyCredits); ก่อนเงื่อนไขและราคาจะน้อยกว่า MyCredits

มันจะเป็นอะไร...


person user1027620    schedule 02.02.2012    source แหล่งที่มา
comment
คุณได้ลองใช้ parseInt หรือหนึ่งในฟังก์ชั่นจากตระกูลนั้นแล้วหรือยัง? บางทีมันอาจจะแยกวิเคราะห์มันเป็นสตริงหรืออะไรทำนองนั้น   -  person Tango Bravo    schedule 02.02.2012
comment
ใช่แล้ว แก้ไขได้แล้ว :) โปรดตอบคำถามของฉันเพื่อที่ฉันจะได้ทำเครื่องหมายว่าเป็นคำตอบที่ยอมรับได้ ขอบคุณ!   -  person user1027620    schedule 02.02.2012
comment
MyCredits เป็นสตริงหรือตัวเลขใช่หรือไม่   -  person Mathias Bynens    schedule 02.02.2012


คำตอบ (3)


ลอง parseInt() นั่นควรแก้ไขเพื่อให้แน่ใจว่า JS ตีความอย่างถูกต้อง

person Tango Bravo    schedule 02.02.2012

มีหลายประเภทใน JavaScript สิ่งนี้อาจทำให้เกิดความสับสนเนื่องจากเป็นภาษาแบบไดนามิก ลองทำสิ่งต่อไปนี้เพื่อให้แน่ใจว่าค่าทั้งสองเป็น numbers:

if (parseInt(price, 10) <= parseInt(MyCredits, 10))

นี่คือข้อมูลเพิ่มเติมบางส่วน: http://en.wikibooks.org/wiki/JavaScript/Variables_and_Types

person Paul    schedule 02.02.2012

ราคาน้อยกว่า MyCredits

ในกรณีนี้ price <= MyCredits เป็นจริง ดังนั้นจึงไม่มีอะไรผิดปกติ

person Niet the Dark Absol    schedule 02.02.2012