ฉันรัน JSLint บนโค้ด JavaScript นี้และมันบอกว่า:
ปัญหาที่บรรทัด 32 อักขระ 30: ไม่มีพารามิเตอร์ radix
นี่คือรหัสคำถาม:
imageIndex = parseInt(id.substring(id.length - 1))-1;
เกิดอะไรขึ้นที่นี่?
ฉันรัน JSLint บนโค้ด JavaScript นี้และมันบอกว่า:
ปัญหาที่บรรทัด 32 อักขระ 30: ไม่มีพารามิเตอร์ radix
นี่คือรหัสคำถาม:
imageIndex = parseInt(id.substring(id.length - 1))-1;
เกิดอะไรขึ้นที่นี่?
คำตอบ:
มันเป็นแนวปฏิบัติที่ดีในการส่งผ่าน radix ด้วย parseInt -
parseInt(string, radix)
สำหรับทศนิยม -
parseInt(id.substring(id.length - 1), 10)
หากละเว้นพารามิเตอร์ radix JavaScript จะถือว่าสิ่งต่อไปนี้:
( อ้างอิง )
Redundant radix parameter
radix
อาร์กิวเมนต์เป็นค่าตัวเลขไม่ใช่การแสดงสตริงของค่าตัวเลขดังนั้นจึงไม่มีเลขฐานที่ระบุ
เพื่อหลีกเลี่ยงคำเตือนนี้แทนที่จะใช้:
parseInt("999", 10);
คุณสามารถแทนที่โดย:
Number("999");
โปรดทราบว่าการแยกวิเคราะห์และหมายเลขมีพฤติกรรมที่แตกต่างกันแต่ในบางกรณีหนึ่งสามารถแทนที่อื่น ๆ
parseInt
Number
นี่คือการทดสอบประสิทธิภาพเก่า
Number()
เร็วกว่า 6x 6 เท่าparseInt()
ฉันตอบคำถามไม่ถูกต้อง แต่ฉันคิดว่ามันสมเหตุสมผลที่จะอธิบายว่าทำไมเราควรระบุเลขฐานสิบ
ในเอกสาร MDN เราสามารถอ่านได้ว่า:
หาก radix ไม่ได้ถูกกำหนดหรือ 0 (หรือขาด) JavaScript จะถือว่าสิ่งต่อไปนี้:
ที่มา: MDN parseInt ()
คุณสามารถปิดกฎนี้หากคุณต้องการข้ามการทดสอบ
แทรก:
radix: false
ภายใต้rules
คุณสมบัติ "" ในtslint.json
ไฟล์
ไม่แนะนำให้ทำเช่นนั้นหากคุณไม่เข้าใจข้อยกเว้นนี้
การเพิ่มสิ่งต่อไปนี้ที่ด้านบนของไฟล์ JS ของคุณจะบอกให้ JSHint ระงับคำเตือน radix:
/*jshint -W065 */
ดูเพิ่มเติมที่: http://jshint.com/docs/#options
"-W065": true
เช่นใน.jshintrc
ไฟล์
ฉันแก้ไขมันด้วยการใช้ + foo เพื่อแปลงสตริง
โปรดทราบว่ามันไม่ดีสำหรับการอ่าน (การแก้ไขสกปรก)
console.log( +'1' )
// 1 (int)
นอกจากนี้คุณยังสามารถเพิ่มบรรทัดนี้เหนือบรรทัด parseInt ของคุณ:
// eslint-disable-next-line
นี่จะปิดการตรวจสอบ eslint สำหรับบรรทัดถัดไป ใช้สิ่งนี้หากคุณต้องการข้ามเพียงหนึ่งหรือสองบรรทัด
เพียงแค่ใส่สตริงว่างในสถานที่ radix เพราะ parseInt () ใช้เวลาสองข้อโต้แย้ง:
parseInt (สตริง radix);
string ค่าที่จะวิเคราะห์ หากอาร์กิวเมนต์สตริงไม่ใช่สตริงดังนั้นจะถูกแปลงเป็นสตริง (ใช้การดำเนินการนามธรรม ToString) ช่องว่างนำหน้าในอาร์กิวเมนต์สตริงจะถูกละเว้น
radix จำนวนเต็มระหว่าง 2 ถึง 36 ที่แสดงถึงฐาน (ฐานในระบบตัวเลขทางคณิตศาสตร์) ของสตริงที่กล่าวถึงข้างต้น ระบุ 10 สำหรับระบบเลขฐานสิบที่มนุษย์ใช้กันทั่วไป ระบุพารามิเตอร์นี้เสมอเพื่อกำจัดความสับสนของผู้อ่านและเพื่อรับประกันพฤติกรรมที่คาดการณ์ได้ การนำไปใช้งานที่ต่างกันจะให้ผลลัพธ์ที่แตกต่างกันเมื่อไม่ได้ระบุ radix โดยปกติแล้วจะทำการกำหนดค่าเป็น 10
imageIndex = parseInt (id.substring (id.length - 1)) - 1;
imageIndex = parseInt(id.substring(id.length - 1), '')-1;
เพียงเพิ่มกฎที่กำหนดเองของคุณใน. eslintrc ซึ่งมีลักษณะเช่นนั้น
"radix": "off"
และคุณจะไม่มีคำเตือนเกี่ยวกับอุปกรณ์เสริมความจำ eslint นี้ นี่คือส่วนที่เหลือของ Eslint
ก่อนหน้า ECMAScript 5 parseInt () จะตรวจสอบตัวอักษรฐานแปดอัตโนมัติซึ่งทำให้เกิดปัญหาเนื่องจากนักพัฒนาหลายคนคิดว่า 0 ที่นำหน้าจะถูกละเว้น
ดังนั้นแทนที่จะ:
var num = parseInt("071"); // 57
ทำเช่นนี้:
var num = parseInt("071", 10); // 71
var num = parseInt("071", 8);
var num = parseFloat(someValue);
แทนที่จะเรียกใช้substring
ฟังก์ชันที่คุณสามารถใช้ได้.slice()
imageIndex = parseInt(id.slice(-1)) - 1;
ที่นี่ -1 ในชิ้นระบุว่าจะเริ่มชิ้นจากดัชนีล่าสุด
ขอบคุณ