Bu JavaScript kodunda JSLint koştum ve dedi:
32. satırdaki sorun 30: Eksik radix parametresi.
Söz konusu kod:
imageIndex = parseInt(id.substring(id.length - 1))-1;
Burada yanlış olan ne?
Bu JavaScript kodunda JSLint koştum ve dedi:
32. satırdaki sorun 30: Eksik radix parametresi.
Söz konusu kod:
imageIndex = parseInt(id.substring(id.length - 1))-1;
Burada yanlış olan ne?
Yanıtlar:
ParseInt ile sayı tabanı geçmek her zaman iyi bir uygulamadır -
parseInt(string, radix)
Ondalık için -
parseInt(id.substring(id.length - 1), 10)
Radix parametresi atlanırsa, JavaScript aşağıdakileri kabul eder:
( Referans )
Redundant radix parameter
radix
değişken sayısal bir değerdir, sayısal değerin dize olarak temsil edilmesidir, bu nedenle belirtilecek sayı tabanı yoktur.
Kullanmak yerine bu uyarıyı önlemek için:
parseInt("999", 10);
Şununla değiştirebilirsiniz:
Number("999");
ParseInt ve Number öğelerinin farklı davranışları olduğunu , ancak bazı durumlarda birinin diğerini değiştirebileceğini unutmayın.
parseInt
ve Number
. İşte eski bir performans testi .
Number()
6 kat daha hızlıparseInt()
Soruyu doğru bir şekilde cevaplamıyorum, ancak neden yarıçapı belirtmemiz gerektiğini anlamak mantıklı .
MDN belgelerinde şunları okuyabiliriz:
Sayı tabanı tanımsızsa veya 0 (veya yoksa), JavaScript aşağıdakileri varsayar:
Kaynak: MDN parseInt ()
JS dosyanızın üstüne aşağıdakileri eklemek JSHint'e sayı tabanı uyarısını bastırmasını söyleyecektir:
/*jshint -W065 */
Ayrıca bkz: http://jshint.com/docs/#options
"-W065": true
bir de örneğin, .jshintrc
dosyaya.
Dize dönüştürmek için sadece + foo kullanarak çözdüm.
Okunabilirlik için harika olmadığını unutmayın (kirli düzeltme).
console.log( +'1' )
// 1 (int)
Ayrıca, bu satırı ayrıştırma satırınızın hemen üstüne de ekleyebilirsiniz:
// eslint-disable-next-line
Bu, sonraki satır için eslint kontrolünü devre dışı bırakır. Yalnızca bir veya iki satırı atlamanız gerekiyorsa bunu kullanın.
Sayı tabanı yerine boş bir dize koyun, çünkü parseInt () iki argüman alır:
parseInt (dize, sayı tabanı);
string Ayrıştırılacak değer. Dize bağımsız değişkeni bir dize değilse, bir dizeye dönüştürülür (ToString soyut işlemini kullanarak). Dize bağımsız değişkeninde önde gelen boşluk yoksayılır.
radix Yukarıda belirtilen dizenin yarıçapını (matematiksel sayısal sistemlerde temel) temsil eden 2 ile 36 arasında bir tam sayı. İnsanlar tarafından yaygın olarak kullanılan ondalık sayı sistemi için 10 belirtin. Okuyucu karmaşasını ortadan kaldırmak ve öngörülebilir davranışı garanti etmek için her zaman bu parametreyi belirtin. Bir yarıçap belirtilmediğinde farklı uygulamalar, genellikle değeri 10 olarak varsayılan olarak farklı sonuçlar üretir.
imageIndex = parseInt (id.substring (id.length - 1)) - 1;
imageIndex = parseInt(id.substring(id.length - 1), '')-1;
Özel kuralınızı buna benzeyen
"radix": "off"
.eslintrc dosyasına ekleyin ve bu esnint unnesesery uyarısından muaf olacaksınız. Bu eslint linter için.
ECMAScript 5'ten önce, parseInt () aynı zamanda sekizlik değişmezleri de otomatik olarak algıladı, bu da birçok geliştiricinin önde 0'ın göz ardı edileceğini varsaydığı için sorunlara neden oldu.
Bunun yerine:
var num = parseInt("071"); // 57
Bunu yap:
var num = parseInt("071", 10); // 71
var num = parseInt("071", 8);
var num = parseFloat(someValue);