আপনি কীভাবে পরীক্ষা করতে পারেন যে জাভাস্ক্রিপ্টে একটি নম্বর NaN আছে?


414

আমি এটি কেবল ফায়ারফক্সের জাভাস্ক্রিপ্ট কনসোলে চেষ্টা করে দেখছি, তবে নিম্নলিখিত বিবৃতিগুলির কোনওটিই সত্য হয় না:

parseFloat('geoff') == NaN;

parseFloat('geoff') == Number.NaN;

5
আপনার আসল লক্ষ্য যদি নম্বরগুলি পরীক্ষা করা হয় তবে তা মূল্যবান: স্ট্যাকওভারফ্লো.com
পল


1
@ গথডো: অবশ্যই, তবে আমি কোনও মানকে বিপরীতে কোনও নম্বর এনএন কিনা তা কীভাবে পরীক্ষা করব তা জিজ্ঞাসা করেছি ।
পল ডি ওয়েট

2
@ পলডি.ওয়েট হ্যাঁ, তবে গুগলিংয়ের মতো "যখন জাভাস্ক্রিপ্টে কোনও ভেরিয়েবল ন্যান কিনা তা কীভাবে পরীক্ষা করতে হবে" এর মতো কিছু গুগল করার সময় এখানে প্রচুর লোক আসে।
মিশা পেরেকোভস্কি 12

পলডি.ওয়েট আমি আপনার সাথে একমত, তবে @ গথডোর মতো আমারও একই উদ্বেগ। "জেএস-এর কোনও মান এনএন হয় কিনা তা কীভাবে চেক করতে হবে" এই উদ্দেশ্য নিয়ে এই প্রশ্নে অনেক লোক অবতীর্ণ হয়। আপনি একই উত্তরের উপর mjohnsonengr এর মন্তব্য পরীক্ষা করতে পারেন । বিটিডাব্লু, আমিও এই প্রশ্নটি মধ্যপন্থীদের দৃষ্টি আকর্ষণ করার জন্য চিহ্নিত করেছি ।
dopeddude

উত্তর:


581

এই কোড ব্যবহার করে দেখুন:

isNaN(parseFloat("geoff"))

যে কোনও মান কেবলমাত্র সংখ্যার পরিবর্তে নাএন, কিনা তা যাচাই করার জন্য এখানে দেখুন: জাভাস্ক্রিপ্টে আপনি এনএএন-এর পরীক্ষা কিভাবে করবেন?


8
প্যাসফ্লোটের দরকার আছে কি?
রাহুল

23
আপনি যদি একটি খালি স্ট্রিংটি ব্যাখ্যা করতে চান NaNতবে হ্যাঁ। (আমি আপনাকে বলছি না যে আপনি সর্বদা থাকবেন))
পল ডি ওয়েট

1
আমি যদি আপনি হয়ে থাকি তবে আমি এটিকে একটি ভেরিয়েবলের জন্য বরাদ্দ করব এবং শর্ত ভেরিয়েবল! == পরিবর্তনশীল ব্যবহার করব। এটি চশমাতে
শে

3
isNaN(parseFloat("geoff")) // true isNaN(parseFloat("10geo")) // false এটা কিভাবে দরকারী?
প্রশান্ত


146

আমি কেবল কার্যকর জাভাস্ক্রিপ্ট বইটিতে এই কৌশলটি পেয়েছি যা বেশ সহজ:

যেহেতু NaN একমাত্র জাভাস্ক্রিপ্ট মান যা নিজেকে অসম হিসাবে বিবেচনা করা হয়, আপনি সর্বদা এটির সাম্যতার জন্য এটি পরীক্ষা করে কোনও মান NaN হয় কিনা তা আপনি সর্বদা পরীক্ষা করতে পারেন:

var a = NaN;
a !== a; // true 

var b = "foo";
b !== b; // false 

var c = undefined; 
c !== c; // false

var d = {};
d !== d; // false

var e = { valueOf: "foo" }; 
e !== e; // false

@ বর্ণা com্য মন্তব্য না করা অবধি এটি উপলব্ধি করা যায়নি তবে এটি ইসিএমএ অনুচ্ছেদে রয়েছে: https://tc39.github.io/ecma262/#sec-isnan-number


27
কার্যকর তবে পাল্টা। আমি এই জাতীয় কোড বজায় রাখতে চাই না।
osa

35
এটি এমন কোনও কোড নয় যা পাল্টে দেওয়া হয়, এটি এনএএন।
জাজি

20
@ ড্যানএম এটি কোনও বাগ নয়, এটি এনএএন এর আদর্শ আইইই 75৫৪ আচরণ। এটি কীভাবে সিপিইউগুলিতে প্রয়োগ করা হয় এবং এটি বিশ্বের প্রতিটি প্রোগ্রামিং ভাষায় প্রত্যাশিত আচরণ যা ভাসমান ব্যবহার করে।
টারমিল

4
@ টারমিল ডিউলি! এটি আসলেই আকর্ষণীয়; আমি সর্বদা ভাবতাম যে এনএএন অসমতার অদ্ভুততা একটি জাভাস্ক্রিপ্ট জিনিস।
ড্যান এম

2
নাএন === নান; // মিথ্যা। এটি জাভাস্ক্রিপ্টে একটি পরিচিত বাগ। isNan একটি নতুন পদ্ধতি।
এটেলিকান

52

এই কোডটি ব্যবহার করুন:

isNaN('geoff');

isNaN()MDN এ ডক্স দেখুন ।

alert ( isNaN('abcd'));  // alerts true
alert ( isNaN('2.0'));  // alerts false
alert ( isNaN(2.0));  // alerts false

1
হতে পারে এটি কেবলমাত্র আমি, তবে NaN ধারণাটি বিভ্রান্ত হয়ে যায় var value = 0/0;এবং যখন var value2= String("123 131");NaN মান তৈরি করে এবং এর মতো var value3 = "abcd";কিছুও একটি NaN এর মান।
নিক পাইনেদা

@ নিকপিন্ডা কেন?
সিনজাই

44

যতক্ষণ না টাইপ সংখ্যার মান পরীক্ষা করা হয় এটি কিনা এটি NaN, এটি বিশ্বব্যাপী ফাংশনটি কাজ isNaNকরবে

isNaN(any-Number);

জেনেরিক পদ্ধতির জন্য যা জেএস-এ সমস্ত ধরণের কাজ করে, আমরা নিম্নলিখিত যে কোনওটি ব্যবহার করতে পারি:

ECMAScript-5 ব্যবহারকারীদের জন্য:

#1
if(x !== x) {
    console.info('x is NaN.');
}
else {
    console.info('x is NOT a NaN.');
}

ECMAScript-6 ব্যবহারকারীদের জন্য:

#2
Number.isNaN(x);

এবং ECMAScript 5 এবং 6 উভয় জুড়ে ধারাবাহিকতার জন্য, আমরা এই পলিফিলটি সংখ্যা.আইএসএন এর জন্যও ব্যবহার করতে পারি

#3
//Polyfill from MDN
Number.isNaN = Number.isNaN || function(value) {
    return typeof value === "number" && isNaN(value);
}
// Or
Number.isNaN = Number.isNaN || function(value) {     
    return value !== value;
}

আরও তথ্যের জন্য দয়া করে এই উত্তরটি চেক করুন।


6
শুধু "isNan ()" ব্যবহার না করে সম্পূর্ণ বিশদ উত্তর সরবরাহ করার জন্য ধন্যবাদ। গুগলে এই প্রশ্নটি খুঁজে পেয়ে আমি ঠিক কী খুঁজছিলাম what
mjohnsonengr

1
".... উপরের কেসগুলির জন্য ভুল ফলাফল দিচ্ছিল" আমি ভুল বলব না, ঠিক আলাদা, কারণ গ্লোবাল isNaNযুক্তিটিকে প্রথমে একটি সংখ্যাতে রূপান্তর করে।
ফেলিক্স ক্লিং

1
@ ফেলিক্সক্লিং দয়া করে আপডেট করা উত্তরটি পরীক্ষা করুন। ধন্যবাদ।
ডোপডডুড

1
isNaN ("lorem ipsum"); // সত্য ES5 দিয়ে আমার মন ফুঁকছিল
নিক পিনেদা

2
@ নিকপিনেদা অনুভূতিটি এতটা পারস্পরিক, তবে শেষ অবধি MDN এটিকে এভাবে ব্যাখ্যা করতে পারে "যখন isNaN ফাংশনটির জন্য যুক্তিটি সংখ্যা সংখ্যার হয় না, তখন মানটি প্রথমে একটি সংখ্যায় জোর করা হয় resulting ফলস্বরূপ মানটি পরে তা নির্ধারণ করার জন্য পরীক্ষা করা হয় NaN। "
dopeddude

16

NaN একটি বিশেষ মান যা এর মতো পরীক্ষা করা যায় না। একটি আকর্ষণীয় জিনিস যা আমি কেবল ভাগ করে নিতে চাই তা হ'ল এটি

var nanValue = NaN;
if(nanValue !== nanValue) // Returns true!
    alert('nanValue is NaN');

এটি কেবল NaN মানগুলির জন্য সত্য প্রত্যাবর্তন করে এবং এটি পরীক্ষার নিরাপদ উপায়। অবশ্যই কোনও ফাংশনে আবদ্ধ হওয়া উচিত বা কমপক্ষে মন্তব্য করা উচিত, কারণ একই ভেরিয়েবল একে অপরের সমান না হলে এটি পরীক্ষা করা স্পষ্টতই বোঝা যায় না, তিনি।


1
এটি পুরোপুরি নির্ভরযোগ্য উপায় নয়। চশমা অনুযায়ী। পরিবর্তনশীল! == ভেরিয়েবল NaN
allsyed

1
উপরে আমার উত্তরটি দেখুন ^
জাজি

14

আপনার গ্লোবাল isNaN(value)ফাংশন কলটি ব্যবহার করা উচিত , কারণ:

  • এটি ক্রস ব্রাউজার সমর্থিত
  • ডকুমেন্টেশনের জন্য isNaN দেখুন

উদাহরণ:

 isNaN('geoff'); // true
 isNaN('3'); // false

আমি আশা করি এটা তোমাকে সাহায্য করবে।


1
হ্যাঁ, isNaN('') //falseকিন্তু parseInt('') //NaN। একই জন্য বলা যেতে পারে null
নিরব পেঙ্গুইন

13

ES6 হিসাবে , Object.is(..)একটি নতুন ইউটিলিটি যা পরম সাম্যের জন্য দুটি মান পরীক্ষা করতে ব্যবহার করা যেতে পারে:

var a = 3 / 'bar';
Object.is(a, NaN); // true


9

সমস্যাটি যেখানে '1.2geoff'পার্স করা হয়েছে তা ঠিক করতে কেবল Number()পরিবর্তে পার্সার ব্যবহার করুন।

বরং এটির চেয়ে:

parseFloat('1.2geoff'); // => 1.2
isNaN(parseFloat('1.2geoff')); // => false
isNaN(parseFloat('.2geoff')); // => false
isNaN(parseFloat('geoff')); // => true

এটা কর:

Number('1.2geoff'); // => NaN
isNaN(Number('1.2geoff')); // => true
isNaN(Number('.2geoff')); // => true
isNaN(Number('geoff')); // => true

সম্পাদনা: আমি এ থেকে আর একটি বিষয় লক্ষ্য করেছি যদিও ... মিথ্যা মানগুলি (এবং সত্যিকারের বুলিয়ান হিসাবে সত্য) এর Number()হিসাবে ফেরত গেছে 0! কোন ক্ষেত্রে ... প্রতিবার পরিবর্তে পার্সফ্লোট কাজ করে। সুতরাং এটিতে ফিরে যান:

function definitelyNaN (val) {
    return isNaN(val && val !== true ? Number(val) : parseFloat(val));
}

এবং এটি আপাতদৃষ্টিতে সমস্ত কিছু কভার করে। আমি লোড্যাশের তুলনায় এটি 90% ধীর গতিতে চিহ্নিত করেছি _.isNaNতবে তারপরে সমস্ত এনএএন-র আচ্ছাদন করে না:

http://jsperf.com/own-isnan-vs-underscore-lodash-isnan

কেবল স্পষ্ট করে বলতে গেলে, আমার এমন কিছু মানুষের শাব্দিক ব্যাখ্যার যত্ন নেওয়া হয় যা "নং নং অ্যান্ট" এবং লোডাশ কম্পিউটারের আক্ষরিক ব্যাখ্যার যত্ন নেয় যে কোনও কিছু "এনএন" আছে কিনা তা যাচাই করার জন্য।


7

@ সিবির্গের উত্তর সঠিক থাকলেও এর মধ্যে আরও অনেক বিষয় রয়েছে যা লক্ষ করা উচিত:

parseFloat('1.2geoff'); // => 1.2
isNaN(parseFloat('1.2geoff')); // => false
isNaN(parseFloat('.2geoff')); // => false
isNaN(parseFloat('geoff')); // => true

পয়েন্ট সত্তা, আপনি যদি ইনপুটটির বৈধতার জন্য এই পদ্ধতিটি ব্যবহার করেন তবে ফলাফলটি উদার হয়ে উঠবে।

সুতরাং, হ্যাঁ আপনি ব্যবহার করতে পারেন parseFloat(string)(বা পুরো সংখ্যার ক্ষেত্রে parseInt(string, radix)'এবং তারপরে isNaN()এটি আবদ্ধ করতে পারেন, তবে অতিরিক্ত সংখ্যাসূচক অক্ষরের সাথে মিলিত সংখ্যার সাথে গেটচা সম্পর্কে সচেতন হন।


1
মজাদার. এটির পাল্টানোর কোনও উপায় এবং "1.2geoff" সনাক্ত করার কোনও উপায় আসলেই কোনও বৈধ সংখ্যার স্ট্রিং নয়?
গ্যাবে হালসমার

2
নোট করুন যে স্ট্রিংটি যখন কোনও সংখ্যার সাথে শুরু হয় কেবল তখনই এটি ঘটে । parseFloat('test1.2')ফিরে আসবে NaN
এডুয়ার্ড লুকা

6

সরল সমাধান!

সত্যিই খুব সহজ! এখানে! এই পদ্ধতি আছে!

function isReallyNaN(a) { return a !== a; };

যতটা সহজ ব্যবহার করুন:

if (!isReallyNaN(value)) { return doingStuff; }

পারফরম্যান্স পরীক্ষা দেখুন hereএই ফানক বনাম ব্যবহার করেselected answer

এছাড়াও: কয়েকটি বিকল্প বিকল্প বাস্তবায়নের জন্য নীচে প্রথম উদাহরণ দেখুন।


উদাহরণ:

function isReallyNaN(a) { return a !== a; };

var example = {
    'NaN': NaN,
    'an empty Objet': {},
    'a parse to NaN': parseFloat('$5.32'),
    'a non-empty Objet': { a: 1, b: 2 },
    'an empty Array': [],
    'a semi-passed parse': parseInt('5a5'),
    'a non-empty Array': [ 'a', 'b', 'c' ],
    'Math to NaN': Math.log(-1),
    'an undefined object': undefined
  }

for (x in example) {
    var answer = isReallyNaN(example[x]),
        strAnswer = answer.toString();
    $("table").append($("<tr />", { "class": strAnswer }).append($("<th />", {
        html: x
    }), $("<td />", {
        html: strAnswer
    })))
};
table { border-collapse: collapse; }
th, td { border: 1px solid; padding: 2px 5px; }
.true { color: red; }
.false { color: green; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<table></table>

আপনি বাস্তবায়নের জন্য কয়েকটি বিকল্প পথ অবলম্বন করেন, যদি আপনি কোনও বিকল্প নামকরণ পদ্ধতি ব্যবহার করতে না চান এবং বিশ্বব্যাপী এটি আরও উপলব্ধ কিনা তা নিশ্চিত করতে চান। সতর্কতা এই সমাধানগুলির মধ্যে নেটিভ অবজেক্টগুলিকে পরিবর্তন করা জড়িত এবং এটি আপনার সেরা সমাধান নাও হতে পারে। সর্বদা সাবধানতা অবলম্বন করুন এবং সচেতন থাকুন যে আপনি ব্যবহার করতে পারেন এমন অন্যান্য গ্রন্থাগারগুলি স্থানীয় কোড বা অনুরূপ পরিবর্তনের উপর নির্ভর করতে পারে।

বিকল্প বাস্তবায়ন 1: নেটিভ isNaNপদ্ধতিটি প্রতিস্থাপন করুন ।

//  Extremely simple. Just simply write the method.
window.isNaN = function(a) { return a !==a; }

বিকল্প বাস্তবায়ন 2: নম্বর অবজেক্টে যুক্ত করুন
* প্রস্তাবিত এটি এটি ইসিএমএ 5 থেকে 6 এর জন্য একটি পলি-ফিলও

Number['isNaN'] || (Number.isNaN = function(a) { return a !== a });
//  Use as simple as
Number.isNaN(NaN)

খালি থাকলে বিকল্প সমাধান পরীক্ষা

একটি সাধারণ উইন্ডো পদ্ধতি আমি লিখেছিলাম যে পরীক্ষাটি যদি বস্তু খালি হয় । এটি কিছুটা আলাদা যে আইটেমটি "হুবহু" এনএন হলে এটি দেয় না তবে আমি বুঝতে পেরেছিলাম যে খালি আইটেমগুলি সন্ধান করার সময় এটি কার্যকর হতে পারে।

/** isEmpty(varried)
 *  Simple method for testing if item is "empty"
 **/
;(function() {
   function isEmpty(a) { return (!a || 0 >= a) || ("object" == typeof a && /\{\}|\[(null(,)*)*\]/.test(JSON.stringify(a))); };
   window.hasOwnProperty("empty")||(window.empty=isEmpty);
})();

উদাহরণ:


খালি কিনা চূড়ান্ত গভীর চেক

এটি সর্বশেষে কিছুটা গভীর যায়, এমনকি কোনও বস্তু ফাঁকা বস্তুতে পূর্ণ কিনা তাও পরীক্ষা করে। আমি নিশ্চিত এটির উন্নতি এবং সম্ভাব্য গর্তের জায়গা রয়েছে তবে এখন পর্যন্ত এটি বেশিরভাগ জিনিসকেই ধরা দেয়।


1
@ পলডি.ওয়েট সম্ভবত এটি এই অ্যাপ্লিকেশন, তবে আমি কোনও গ্রহণযোগ্য উত্তর দেখতে পাচ্ছি না। প্রকৃতপক্ষে, আমি কেবল প্রায় 5 টি উত্তর দেখতে পাচ্ছি, কিন্তু আমি দেখতে পেয়েছি 15 আছে
SpYk3HH

1
আপনি কোন অ্যাপটি ব্যবহার করছেন?
পল ডি ওয়েট

2
অ্যান্ড্রয়েডের জন্য @ পলডি.ওয়েট এসই এক। গ্যালাক্সি এস 3
স্পাইকি

1
আহা। আমার নিজের মতো করে দেখার মতো অ্যাপ নেই, তবে গ্রহণযোগ্য উত্তরের একটি লিঙ্ক এখানে রয়েছে: stackoverflow.com/a/2652335/20578
পল ডি ওয়েট

@ পলডি.ওয়েট আহ, আমি দেখছি। আমার ধারণা, কেবলমাত্র এবং নিজেই প্রশ্নের সরাসরি উত্তরে, উত্তরটি যথেষ্ট হতে পারে। "জেএস-এর উপায় 'সত্যই' নাএন" কিনা তা যাচাই করার সামগ্রিক সম্পর্কের ক্ষেত্রে আমি আমার অন্য প্রশ্নের উত্তর পোস্ট করেছি, যেহেতু isNaNনির্ভরযোগ্য নয়। আমাকে সেখানে মন্তব্য করা হয়েছিল এবং বলা হয়েছিল যে এই উত্তরটি আমার উত্তরটির সাথে আরও ভাল মানাবে, এভাবে এটি এখানে নিয়ে যাওয়া হবে। এই সমস্যাটির সাথে সম্পর্কিতভাবে কেবল দরকারী / দরকারী কিছু রেখে যা ইস্যুটির একটি গুগল অনুসন্ধানে হাতছাড়া করবে is it NaN?। পার্শ্ব নোটে, আমার উত্তরটি নির্বাচিত উত্তরের চেয়ে প্রায়শই নিখুঁত হবে।
SpYk3HH

5

আমি কেবলমাত্র অন্য একটি বিকল্পটি ভাগ করতে চাই, এটি অন্যদের চেয়ে এটি অপরিহার্যভাবে ভাল নয়, তবে আমি মনে করি এটি দেখার পক্ষে উপযুক্ত:

function customIsNaN(x) { return (typeof x == 'number' && x != 0 && !x); }

এর পেছনে যুক্তি যে ব্যতীত যে সংখ্যা 0এবং NaNথেকে নিক্ষেপ করা হয়true

আমি একটি দ্রুত পরীক্ষা করেছি এবং এটি Number.isNaNমিথ্যা হিসাবে নিজের বিরুদ্ধে পরীক্ষা করার মতো এবং দুর্দান্ত অভিনয় করে । তিনটিই এর চেয়ে ভাল পারফর্ম করেisNan

ফলাফলগুলো

customIsNaN(NaN);            // true
customIsNaN(0/0);            // true
customIsNaN(+new Date('?')); // true

customIsNaN(0);          // false
customIsNaN(false);      // false
customIsNaN(null);       // false
customIsNaN(undefined);  // false
customIsNaN({});         // false
customIsNaN('');         // false

আপনি ভাঙ্গা isNaNফাংশন এড়াতে চাইলে দরকারী হতে পারে ।


5

যদি আপনার পরিবেশ ECMAScript 2015 সমর্থন করে তবে আপনি Number.isNaNমানটি সত্যই তা নিশ্চিত করার জন্য ব্যবহার করতে পারেনNaN

সমস্যাটি isNaNহ'ল, যদি আপনি এটি অ-সংখ্যাসূচক ডেটা ব্যবহার করেন তবে কয়েকটি বিভ্রান্তিকর নিয়ম রয়েছে (এমডিএন অনুসারে) প্রয়োগ করা হবে। উদাহরণ স্বরূপ,

isNaN(NaN);       // true
isNaN(undefined); // true
isNaN({});        // true

সুতরাং, ECMA স্ক্রিপ্ট 2015 সমর্থিত পরিবেশে, আপনি ব্যবহার করতে পারেন

Number.isNaN(parseFloat('geoff'))

7
আমার পরিবেশটি কেবলমাত্র ECMAScript এক্সপি হোম সংস্করণটিকে সমর্থন করে :(
পল ডি ওয়েট

1
@ পলডি.ওয়েট (আমি আশা করি আপনি IE 6: D বুঝিয়েছেন) কোন সমস্যা নেই :-) কেবল মনে রাখবেন যে isNaNআপনি সমস্যায় পড়তে পারেন Number.isNaNএবং ECMAScript 2015 পরিবেশে :-)
thefourtheye

5

জাভাস্ক্রিপ্টে এনএএন মানে "নট এ সংখ্যা" নয়, যদিও এর ধরণটি আসলে সংখ্যা।

typeof(NaN) // "number"

কোনও চলক NaN এর মান কিনা তা পরীক্ষা করতে, আমরা কেবল ফাংশন isNaN () ব্যবহার করতে পারি না, কারণ isNaN () এর নিম্নলিখিত সমস্যা রয়েছে, নীচে দেখুন:

var myVar = "A";
isNaN(myVar) // true, although "A" is not really of value NaN

এখানে সত্যই যা ঘটে তা হ'ল মাইভার সুস্পষ্টভাবে একটি সংখ্যায় জোর করে:

var myVar = "A";
isNaN(Number(myVar)) // true. Number(myVar) is NaN here in fact

এটি আসলে বোধগম্য হয়, কারণ "এ" আসলে সংখ্যা নয়। তবে আমরা যা যাচাই করতে চাই তা হ'ল মাইভারটি ঠিক এনএএনএন এর মান হয় কিনা।

সুতরাং isNaN () সাহায্য করতে পারে না। তারপরে আমাদের কী করা উচিত?

আলোকে যে NaN হ'ল একমাত্র জাভাস্ক্রিপ্ট মান যা নিজের কাছে অসম হিসাবে বিবেচিত হয়, তাই আমরা এর ব্যবহারের সাথে এর সমতাটি পরীক্ষা করতে পারি! ==

var myVar; // undefined
myVar !== myVar // false

var myVar = "A";
myVar !== myVar // false

var myVar = NaN
myVar !== myVar // true

সুতরাং উপসংহারে বলা যায় , যদি এটি সত্য যে কোনও ভেরিয়েবল! == নিজেই, তবে এই ভেরিয়েবলটি ঠিক হ'ল NaN:

function isOfValueNaN(v) {
    return v !== v;
}

var myVar = "A";
isNaN(myVar); // true
isOfValueNaN(myVar); // false

4

আমি আন্ডারস্কোরেরisNaN ফাংশনটি ব্যবহার করি কারণ জাভাস্ক্রিপ্টে:

isNaN(undefined) 
-> true

কমপক্ষে, এই গোছা সম্পর্কে সচেতন থাকুন।


10
আমি বিভ্রান্ত কেন যখন ন্যান সত্য ফিরে আসবে তখন undefinedভুল আচরণ হবে? এটি সত্য যে undefinedএকটি সংখ্যা নয়, তাই না?
Xaxis

3
@Xaxis NaN অপরিবর্তিত সমতুল্য হিসাবে বিবেচনা করা উচিত নয়, এগুলি উভয়ই নির্দিষ্ট এবং পৃথক অর্থ সহ বিশেষ মান । এটি বিবেচনা করুন: আমার একটি মূল্য আছে তবে আমি এটি কী তা বলছি না, এটি সম্ভবত একটি সংখ্যা এবং সম্ভবত এটি আপনার দৃষ্টিকোণ থেকে এটি অপরিজ্ঞাত।
করিন

1
@ কোরিন এর undefinedচেয়ে আলাদা কিছু হতে পারে NaN, তবে এটি এখনও সংখ্যা নয় তাই isNaN(undefined)হওয়া উচিত (এবং হয়)true
নিউহাউস

4

এটিও হতে পারে:

function isNaNCustom(value){
    return value.toString() === 'NaN' && 
           typeof value !== 'string' && 
           typeof value === 'number'
}

3

দেখে মনে হচ্ছে যে বক্সের বাইরে নোড.জেসগুলিতে isNaN () সমর্থিত নয়।
আমি প্রায় সঙ্গে কাজ

var value = 1;
if (parseFloat(stringValue)+"" !== "NaN") value = parseFloat(stringValue);

অবশ্যই, তবে আমি নোড.জেএস সম্পর্কে জিজ্ঞাসা করিনি
পল ডি ওয়েট


2
NaN === NaN;        // false
Number.NaN === NaN; // false
isNaN(NaN);         // true
isNaN(Number.NaN);  // true

সমতা অপারেটর (== এবং ===) NaN এর বিপরীতে একটি মান পরীক্ষা করতে ব্যবহার করা যাবে না।

মজিলা ডকুমেন্টেশন দেখুন বিশ্বব্যাপী NAN সম্পত্তি হ'ল নট-এ-নম্বকে উপস্থাপন করে

সেরা উপায়টি 'isNaN') ব্যবহার করছে যা NaN চেক করার জন্য বিট-ইন ফাংশন। সমস্ত ব্রাউজার উপায় সমর্থন করে ..


2

বিধিটি হ'ল:

NaN != NaN

IsNaN () ফাংশনের সমস্যাটি হ'ল এটি কিছু ক্ষেত্রে অপ্রত্যাশিত ফলাফল আসতে পারে:

isNaN('Hello')      //true
isNaN('2005/12/12') //true
isNaN(undefined)    //true
isNaN('NaN')        //true
isNaN(NaN)          //true
isNaN(0 / 0)        //true

মানটি সত্যই NAN কিনা তা যাচাই করার আরও ভাল উপায়:

function is_nan(value) {
    return value != value
}

is_nan(parseFloat("geoff"))

1

আইইইই 754 অনুসারে, NaN এর সাথে জড়িত সমস্ত সম্পর্ক মিথ্যা হিসাবে মূল্যায়ন করে! = বাদে। সুতরাং, উদাহরণস্বরূপ, (এ> = বি) = মিথ্যা এবং (এ <= বি) = মিথ্যা যদি এ বা বি বা উভয়ই ন্যান হয় are


1

আমি স্ট্যাকওভারফ্লোতে অন্য প্রশ্নের উত্তরটি লিখেছিলাম যেখানে কখন অন্য চেক হয়NaN == null তখন তখন এটি সদৃশ হিসাবে চিহ্নিত করা হয়েছিল তাই আমি আমার কাজটি নষ্ট করতে চাই না।

মজিলা ডেভেলপার নেটওয়ার্ক সম্পর্কে NaN


সংক্ষিপ্ত উত্তর

distance || 0যখন আপনি নিশ্চিত হন যে আপনি একটি যথাযথ সংখ্যা বা এটি নিশ্চিত হন তখন কেবল ব্যবহার করুনisNaN() এটি পরীক্ষা করে ।

দীর্ঘ উত্তর

জাভাস্ক্রিপ্টে NaN (নট-এ-সংখ্যা) একটি অদ্ভুত গ্লোবাল অবজেক্ট যা কিছু গাণিতিক ক্রিয়াকলাপ ব্যর্থ হলে ঘন ঘন ফিরে আসে।

আপনি NaN == nullযা দেখতে চান তা পরীক্ষা করতে চেয়েছিলেন false। Hovewer এমনকি NaN == NaNফলাফলfalse

পরিবর্তনশীল কিনা NaNতা খুঁজে বের করার একটি সহজ উপায় হ'ল বৈশ্বিক ফাংশনisNaN()

আরেকটি হ'ল x !== xএক্সটি এনএন হলেই । (@ রাফেল-স্কিওয়েকার্টকে মনে করিয়ে দেওয়ার জন্য ধন্যবাদ)

তবে কেন সংক্ষিপ্ত উত্তর কাজ?

খুঁজে বের কর.

আপনি যখন NaN == falseফলাফল কল করবেন তখন falseএকই রকমNaN == true

নির্দিষ্টকরণের কোথাও জাভাস্ক্রিপ্টের সর্বদা মিথ্যা মানগুলির সাথে একটি রেকর্ড রয়েছে, যার মধ্যে রয়েছে:

  • NaN - একটি নম্বর নয়
  • "" - খালি স্ট্রিং
  • false - একটি বুলিয়ান মিথ্যা
  • null - নাল বস্তু
  • undefined - অপরিবর্তিত ভেরিয়েবল
  • 0 - 0 এবং -0 সহ সংখ্যাসূচক 0

1
“ভেরিয়েবল NaN কিনা তা সন্ধান করার সহজ উপায় হ'ল একটি বিশ্বব্যাপী ফাংশন isNaN ()" - সত্য নয়; আরও একটি সহজ উপায় আছে: var xIsNaN = x !== x;এক্সটি হলেই এটি ফলন করে NaN
রাফেল শোয়েকার্ট

1

এমডিএন এর পার্সফ্লোয়েট পৃষ্ঠায় আরেকটি সমাধান উল্লেখ করা হয়েছে

এটি কঠোরভাবে বিশ্লেষণ করার জন্য একটি ফিল্টার ফাংশন সরবরাহ করে

var filterFloat = function (value) {
    if(/^(\-|\+)?([0-9]+(\.[0-9]+)?|Infinity)$/
      .test(value))
      return Number(value);
  return NaN;
}


console.log(filterFloat('421'));               // 421
console.log(filterFloat('-421'));              // -421
console.log(filterFloat('+421'));              // 421
console.log(filterFloat('Infinity'));          // Infinity
console.log(filterFloat('1.61803398875'));     // 1.61803398875
console.log(filterFloat('421e+0'));            // NaN
console.log(filterFloat('421hop'));            // NaN
console.log(filterFloat('hop1.61803398875'));  // NaN

এবং তারপরে আপনি isNaNএটি চেক করতে ব্যবহার করতে পারেনNaN


1

চেক করার সঠিক উপায়টি হ'ল:

//takes care of boolen, undefined and empty

isNaN(x) || typeof(x) ==='boolean' || typeof(x) !=='undefined' || x!=='' ? 'is really a nan' : 'is a number'

1

আমি এই ছোট্ট ফাংশনটি তৈরি করেছি যা একটি কবজির মতো কাজ করে। যেটি এনএএন-কে স্বজ্ঞাত বলে মনে হচ্ছে তা পরীক্ষা করার পরিবর্তে আপনি একটি নম্বর পরীক্ষা করে দেখুন check আমি নিশ্চিত যে আমি এইভাবে এটি করার আগে প্রথম নই, তবে আমি ভেবেছিলাম ভাগ করে নেব।

function isNum(val){
    var absVal = Math.abs(val);
    var retval = false;
    if((absVal-absVal) == 0){
        retval = true
    }

    return retval;
}


1

মার্কসাইজমের উত্তরটি ভালভাবে কাজ করে তবে এটি মিথ্যা হিসাবে ফিরে আসে না Infinity হিসাবে কারণ ইনফিনিটি প্রযুক্তিগতভাবে একটি সংখ্যা নয়।

আমি একটি isNumberফাংশন নিয়ে এসেছি যা পরীক্ষা করে দেখবে যে এটি একটি সংখ্যা কিনা।

function isNumber(i) {
    return !isNaN(i && i !== true ? Number(i) : parseFloat(i)) && [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY].indexOf(i) === -1;
}

console.log(isNumber(Infinity));
console.log(isNumber("asdf"));
console.log(isNumber(1.4));
console.log(isNumber(NaN));
console.log(isNumber(Number.MAX_VALUE));
console.log(isNumber("1.68"));

আপডেট: আমি লক্ষ্য করেছি যে এই কোডটি কিছু পরামিতিগুলির জন্য ব্যর্থ হয়, তাই আমি এটি আরও ভাল করে দিয়েছি।

function isNumber(i) {//function for checking if parameter is number
if(!arguments.length) {
throw new SyntaxError("not enough arguments.");
	} else if(arguments.length > 1) {
throw new SyntaxError("too many arguments.");
	} else if([Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY].indexOf(i) !== -1) {
throw new RangeError("number cannot be \xB1infinity.");
	} else if(typeof i === "object" && !(i instanceof RegExp) && !(i instanceof Number) && !(i === null)) {
throw new TypeError("parameter cannot be object/array.");
	} else if(i instanceof RegExp) {
throw new TypeError("parameter cannot be RegExp.");
	} else if(i == null || i === undefined) {
throw new ReferenceError("parameter is null or undefined.");
	} else {
return !isNaN(i && i !== true ? Number(i) : parseFloat(i)) && (i === i);
	}
}
console.log(isNumber(Infinity));
console.log(isNumber(this));
console.log(isNumber(/./ig));
console.log(isNumber(null));


তোমার প্রতিজ্ঞা অনন্ত টেকনিক্যালি না একটি সংখ্যা টেকনিক্যালি ত্রুটিপূর্ণ হয়: math.stackexchange.com/questions/36289/is-infinity-a-number । আমার উত্তরগুলি পড়ার থেকে অনন্তটি সংখ্যা থাকা প্রসঙ্গে নির্ভর করে।
জন পি

আমি এটিকে অন্য একটি প্রশ্নে স্থানান্তরিত করতে যাচ্ছি
অ্যাডডেফ

1
alert("1234567890.".indexOf(String.fromCharCode(mycharacter))>-1);

এটি মার্জিত নয়। তবে ইসনান () চেষ্টা করার পরে আমি এই সমাধানে পৌঁছেছি যা অন্য বিকল্প। এই উদাহরণে আমি অনুমতিও দিয়েছি '।' কারণ আমি ভেসে যাচ্ছি কোনও সংখ্যা ব্যবহার না করা হয়েছে তা নিশ্চিত করতে আপনি এটি বিপরীতও করতে পারেন।

("1234567890".indexOf(String.fromCharCode(mycharacter))==-1)

এটি একটি একক অক্ষরের মূল্যায়ন তবে আপনি কোনও সংখ্যার জন্য পরীক্ষা করতে কোনও স্ট্রিং দিয়ে লুপও করতে পারেন।


1

আপনি isNan জাভাস্ক্রিপ্ট ফাংশন ব্যবহার করে NaN চেক করতে পারেন। Isnan ফাংশনে কেবল সংখ্যা বা মানটি পাস করা

isNaN(123) //false
isNaN(-1.23) //false
isNaN(5-2) //false
isNaN(0) //false
isNaN('123') //false
isNaN('Hello') //true
isNaN('2005/12/12') //true
isNaN('') //false
isNaN(true) //false
isNaN(undefined) //true
isNaN('NaN') //true
isNaN(NaN) //true
isNaN(0 / 0) //true

0

ফলটিকে কেবল স্ট্রিংয়ে রূপান্তর করুন এবং 'NaN' এর সাথে তুলনা করুন।

var val = Number("test");
if(String(val) === 'NaN') {
   console.log("true");
}

0

Is (NAN> = 0) ? ...... " জানিনা "।

function IsNotNumber( i ){
    if( i >= 0 ){ return false; }
    if( i <= 0 ){ return false; }
    return true;
}

শর্ত শুধুমাত্র যদি সত্য হয় তবে কার্যকর করা হয় ।

না উপর মিথ্যা

" আমি জানি না " তে নেই ।


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