ইএসলিন্ট অপ্রত্যাশিতভাবে ইসনএন ব্যবহার


154

আমি isNaNনোড.জেএস মডিউলে একটি তীর ফাংশনের অভ্যন্তরে গ্লোবাল ফাংশনটি ব্যবহার করার চেষ্টা করছি তবে আমি এই ত্রুটিটি পাচ্ছি:

[eslint] Unexpected use of 'isNaN'. (no-restricted-globals)

এটি আমার কোড:

const isNumber = value => !isNaN(parseFloat(value));

module.exports = {
  isNumber,
};

আমি কী ভুল করছি তার কোন ধারণা?

PS: আমি এয়ারবিএনবি স্টাইল গাইড ব্যবহার করছি।

উত্তর:


282

ডকুমেন্টেশন হিসাবে প্রস্তাবিত , ব্যবহার Number.isNaN

const isNumber = value => !Number.isNaN(Number(value));

এয়ারবিএনবির ডকুমেন্টেশন উদ্ধৃত:

কেন? বিশ্বব্যাপী isNaN নন-সংখ্যাগুলিকে coerces, NaN তে জোর করে এমন কোনও কিছুর জন্য সত্য করে। যদি এই আচরণটি পছন্দসই হয় তবে তা সুস্পষ্ট করুন।

// bad
isNaN('1.2'); // false
isNaN('1.2.3'); // true

// good
Number.isNaN('1.2.3'); // false
Number.isNaN(Number('1.2.3')); // true

28
কিন্তু isNaNএবং Number.isNaNএকই ফাংশন হয় না। উদাহরণস্বরূপ isNaN('1a') true Number.isNaN('1a') false
রোজেনক্রিউজ

3
পছন্দ করুন এজন্য Number('1.2.3')উপরের উদাহরণে রয়েছে।
প্যাট্রিক পোর্টাল

2
কি নির্বোধ নিয়ম, পুরো পয়েন্ট হ'ল একটি সংখ্যাতে বাধ্য করা বা আপনি পাশাপাশি কেবল একটি typeofচেক করতে পারেন।
ডমিনিক

আমি ব্যবহার করি Number.isNaN(+'1.2.3')যা +আপনি যদি ব্যবহার করেন তবে অতিরিক্ত মাত্রNumber.isNaN
ইব্রাহিম


3

অ্যান্ডি গ্যাসকেল isNumber('1.2.3')ফিরে আসবে true, আপনি নিজের উত্তরটি সম্পাদনা করতে পারেন Number()এবং তার জায়গায় ব্যবহার করতে পারেনparseFloat()

    const isEmpty = value => typeof value === 'undefined' || value === null || value === false;
    const isNumeric = value => !isEmpty(value) && !Number.isNaN(Number(value));
  console.log(isNumeric('5')); // true
  console.log(isNumeric('-5')); // true
  console.log(isNumeric('5.5')); // true
  console.log(isNumeric('5.5.5')); // false
  console.log(isNumeric(null)); // false
  console.log(isNumeric(undefined)); // false

আমি এখন এই উত্তরটি লক্ষ্য করেছি। আমার উত্তর আপডেট করা হয়েছে, আপনাকে ধন্যবাদ!
অ্যান্ডি গ্যাসকেল

1

আমার ক্ষেত্রে, আমি 5 (পূর্ণসংখ্যা), 5.4 (দশমিক), '5', '5.4' সংখ্যার হিসাবে বিবেচনা করতে চেয়েছিলাম, উদাহরণস্বরূপ অন্য কিছু নয়।

আপনার যদি অনুরূপ প্রয়োজনীয়তা থাকে তবে নীচে আরও ভাল কাজ করতে পারে:

const isNum = num => /^\d+$/.test(num) || /^\d+\.\d+$/.test(num);

//Check your variable if it is a number.
let myNum = 5;
console.log(isNum(myNum))

নেতিবাচক সংখ্যা অন্তর্ভুক্ত করতে:

const isNum = num => /^-?\d+$/.test(num) || /^-?\d+\.\d+$/.test(num);

এটি আপনার আইএনএএনএন এর বিশ্বব্যাপী ব্যবহারের সমস্যাটিও সরিয়ে ফেলবে। যদি আপনি isNum ফাংশনটিকে একটি সাধারণ ES5 ফাংশনে রূপান্তর করেন তবে এটি IE ব্রাউজারেও কাজ করবে।


0

আমার জন্য এটি ভাল কাজ করেছে এবং ইসলিন্টে কোনও সমস্যা হয়নি

window.isNaN()


এয়ারবিএনবি স্ট্যান্ডার্ড ব্যবহার করে আপনার পাওয়া উচিত: ESLint: 'window.isNaN' ব্যবহার করা থেকে বিরত। পরিবর্তে Number.isNaN ব্যবহার করুন (কোন-সীমাবদ্ধ-বৈশিষ্ট্য)
Bartek Maciejewski

@ বারটেকম্যাসিয়েজেউউস্কি নাম্বার.আইএসএনএএন-তে সমস্যা হ'ল এগুলি একই ফাংশন নয়। উদাহরণ স্বরূপ. Number.isNaN('abc')হয় false। এবং isNaN('abc')হ'লtrue
Yoannes Geissler

হ্যাঁ, আমি সম্পূর্ণভাবে আপনার সাথে একমত - শুধু উল্লেখ করতে চেয়েছিলেন যে ব্যবহার window.isNan()অন্যান্য Airbnb এর কনফিগ বিরুদ্ধ (নিয়ম eslint.org/docs/rules/no-restricted-properties )
Bartek Maciejewski

@ বার্তেকম্যাসিয়েজেউউস্কি এটি একটি ব্যথা, দুর্ভাগ্যক্রমে no-restricted-propertiesএই ইস্যুটির কারণে আমাকে নিষ্ক্রিয় করতে হয়েছিল
ইয়োনেস গিসলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.