কেন ন্যান ("") (স্পেস সহ স্ট্রিং) সমান মিথ্যা?


160

জাভাস্ক্রিপ্টে, কেন isNaN(" ")মূল্যায়ন করে falseতবে isNaN(" x")মূল্যায়ন করে না true?

আমি একটি পাঠ্য ইনপুট ক্ষেত্রের উপর সংখ্যাসূচক অপারেশন সম্পাদন করছি, এবং যদি ক্ষেত্র আমি দেখতেছি null, ""অথবা NaN। কেউ যখন মাঠে কয়েক মুহুর্তের জায়গাগুলি টাইপ করেন, তখন আমার বৈধতা তিনটিতেই ব্যর্থ হয় এবং কেন এটি isNaNচেক পেরিয়ে যায় তা নিয়ে আমি বিভ্রান্ত ।


1
এইচএম ... বিষয়টির বাকি অর্ধেকটি কোথায় গেছে তা পুরোপুরি নিশ্চিত নয়। এটি পড়ার কথা, "জাভাস্ক্রিপ্ট: isNan (" ") কেন মিথ্যা হিসাবে মূল্যায়ন করে?"
আইভিআর অ্যাভেঞ্জার 15

হ্যাঁ, এটি আচরণ (খালি বা স্থান isNanN এর জন্য মিথ্যা প্রত্যাবর্তন করে) তবে আমি এই ফাংশনের সঠিক চশমা খুঁজে পাইনি।
Lucero 15

এখানে একটি প্রশ্ন যা এর উত্তর দেয়: http://stackoverflow.com/questions/115548/why-is-isnannull-false-in-js
লুসেরো

এই বিষয়গুলিতে জাভাস্ক্রিপ্ট মনে হচ্ছে ভুডু! আপনি কখনই জানেন না এবং ব্যাখ্যাটি সর্বদা জটিল। "" == false // trueএবংisNaN(" ") // false
জোও পিমেন্টেল

উত্তর:


155

জাভাস্ক্রিপ্ট একটি খালি স্ট্রিংটিকে 0 হিসাবে ব্যাখ্যা করে, যা পরে আইএনএন পরীক্ষায় ব্যর্থ হয়। আপনি প্রথমে স্ট্রিংটিতে পার্সইন্ট ব্যবহার করতে পারেন যা খালি স্ট্রিংকে 0 এ রূপান্তর করবে না ফলাফলটি পরে ব্যর্থ হওয়া উচিত ইসএনএন।


53
তবে পার্সেন্ট ("123abcd") 123 প্রদান করে, যার অর্থ isNNN (parseInt ("123abcd")) মিথ্যা ফিরবে যদিও এটি সত্য হওয়া উচিত!
পবন নোগারিয়া

11
তাহলে কীভাবে (ইসনান (স্ট্রিং) || isNaN (parseInt (স্ট্রিং)))
ম্যাট

5
ব্যাখ্যা করার 2 টি পদক্ষেপ রয়েছে isNaN(arg)। 1) আরগকে সংখ্যায় রূপান্তর করুন, 2) সেই সংখ্যাটি সংখ্যাসূচক মান কিনা তা পরীক্ষা করে দেখুন NaN। এটি আমাকে আরও ভালভাবে বুঝতে সাহায্য করেছে।
xdmoore

3
@ অ্যান্টোনিওহ্যালি এক মিনিট অপেক্ষা করুন, আমি এটি পাই না। যদি "জাভাস্ক্রিপ্ট একটি খালি স্ট্রিংটিকে 0 হিসাবে ব্যাখ্যা করে" তবে কেন পার্সেন্ট ("") NaN ফেরত দেয়?
জিন-ফ্রান্সোইস বিউচাম্প

1
@ জিন-ফরাসোইস আপনি ঠিক বলেছেন, আরও সঠিক বিবৃতিটি "isNaN একটি ফাঁকা স্ট্রিংকে 0 হিসাবে ব্যাখ্যা করে", জাভাস্ক্রিপ্ট নিজেই নয়।
আন্তোনিও হ্যালি

82

আপনি এটি অবাক করে দেখতে পারেন বা নাও পেতে পারেন তবে জাভাস্ক্রিপ্ট ইঞ্জিনের অসচেতনতা দেখানোর জন্য এখানে কিছু পরীক্ষার কোড রয়েছে।

document.write(isNaN("")) // false
document.write(isNaN(" "))  // false
document.write(isNaN(0))  // false
document.write(isNaN(null)) // false
document.write(isNaN(false))  // false
document.write("" == false)  // true
document.write("" == 0)  // true
document.write(" " == 0)  // true
document.write(" " == false)  // true
document.write(0 == false) // true
document.write(" " == "") // false

সুতরাং এর অর্থ এটি

" " == 0 == false

এবং

"" == 0 == false

কিন্তু

"" != " "

আনন্দ কর :)


5
+1 দুর্দান্ত পোস্ট। ট্রিপল সমান (=== এবং! ==) অপারেটরটি এখানে কীভাবে ফিট করতে পারবেন তা আপনি যুক্ত করতে পারেন?
bendewey

2
আপনার NaN === NaN বা NaN == NaN ;-) চেষ্টা করা উচিত, আমি জানি না যে এই সমস্তটির অর্থ জাভাস্ক্রিপ্ট ইঞ্জিনটি হতাশাগ্রস্ত কিনা বা জাভাস্ক্রিপ্টটি অসচেতন প্রোগ্রামারদের পক্ষে খারাপ কিনা।
KooiInc

10
@ কিলঙ্ক এই সত্য যে NaN! = NaN আসলে একবারের জন্য ভাল পছন্দ। ধারণাটি হল যে এনএনএন প্রায়শই একটি গণনার ফলাফল যা প্রোগ্রামারটি যেভাবে চেয়েছিল তার চেয়ে আলাদা হয়ে গেছে, এবং "ভুল" হয়ে গেছে এমন দুটি গণনার ফলাফল সমান বিপজ্জনক বলে ধরে নেওয়া যায়।
স্ক্র্যাবেল

2
@ কিলঙ্ক জাভাস্ক্রিপ্টের অসচেতনতা থেকে কিছুটা দূরে সরে না যাওয়ার জন্য, তবে এই এনএএনগুলি কেবল আইইইই 754 এর ভাসমান পয়েন্টের মান মেনে চলেছে। : আপনি সমস্ত বড় ওয়াট উপর যথারীতি এটি সম্পর্কে পড়তে পারেন en.wikipedia.org/wiki/NaN
Spike0xff

পুনঃটুইট আমি এই পোস্টটি দেখে খুব খুশী। কেন isNaN ফাংশনটি এত পিছিয়ে দেওয়া হয়েছে তা বুঝতে আমাকে সহায়তা করেছিল। আমি এখনই আমার সম্পূর্ণ-বিকাশিত কোড থেকে এটিকে সরিয়ে নেব এবং সম্ভবত এটি আর কখনও ব্যবহার করব না। আমি যাচাই করবে null, ""এবং " "নিজেকে। ধন্যবাদ!
ভয়েডকিং

16

এটি আরও ভালভাবে বুঝতে, দয়া করে 43 পৃষ্ঠায় "টুম্বার স্ট্রিংয়ের ধরণে প্রয়োগ করা হয়েছে" তে একমা -স্ক্রিপ্ট স্পেসিফিক পিডিএফ খুলুন

যদি স্ট্রিংয়ের একটি সাংখ্যিক সিনট্যাক্স থাকে, এতে সাদা-স্পেসের যে কোনও অক্ষর থাকতে পারে, তবে এটি সংখ্যার ধরণে রূপান্তরিত হতে পারে। খালি স্ট্রিং 0 টি মূল্যায়ন করে। এছাড়াও স্ট্রিং 'অনন্ত' দেওয়া উচিত

isNaN('Infinity'); // false

13

ব্যবহার করার চেষ্টা করুন:

alert(isNaN(parseInt("   ")));

অথবা

alert(isNaN(parseFloat("    ")));

3
হাই স্যার, isNaN (parseInt ("123a")): 123 ফিরে আসবে তাই আপনার সমাধান কাজ করবে না, যদি স্ট্রিংটিতে aplha সংখ্যা থাকে
সাজ্জাদ আলী খান

6

MDNআপনি যে সমস্যার মুখোমুখি হচ্ছেন তার কারণ থেকে

যখন isNaN ফাংশনে আর্গুমেন্ট সংখ্যা টাইপের নয়, মানটি প্রথমে একটি সংখ্যায় জোর করা হয়। ফলস্বরূপ মানটি এটি NAN কিনা তা নির্ধারণের জন্য পরীক্ষা করা হয়।

আপনি নিম্নলিখিত বিস্তৃত উত্তর যাচাই করতে চাইতে পারেন যা সমানতার জন্য NaN তুলনাও কভার করে।

জাভাস্ক্রিপ্ট ভেরিয়েবল হলে কীভাবে পরীক্ষা করবেন NaN


5

আমি মনে করি এটি জাভাস্ক্রিপ্টের টাইপিংয়ের কারণে: ' 'শূন্যে রূপান্তরিত হয়েছে, যদিও 'x'নেই:

alert(' ' * 1); // 0
alert('x' * 1); // NaN

4

আপনি যদি একটি সঠিক isNumber ফাংশন বাস্তবায়ন করতে চান তবে জাভাস্ক্রিপ্ট থেকে এটি করার একটি উপায় এখানে রয়েছে : ডগলাস ক্রকফোর্ডের গুড পার্টস [105 পৃষ্ঠা]

var isNumber = function isNumber(value) {
   return typeof value === 'number' && 
   isFinite(value);
}

4
@ জিয়ান যে ক্ষেত্রে এই ফাংশনটি ওপি যে কাজটি করতে বলছে তা সম্পাদন করতে খুব সহায়ক নয়, যা কোনও সংখ্যার স্ট্রিং প্রতিনিধিত্ব পরিদর্শন করছিল ...
এরিক

স্ট্রিং আক্ষরিক যেমন "সংখ্যা" এর বিপরীতে যে কোনও নির্দিষ্ট মানের তথাকথিত কঠোর সমতা অপারেটরটি ব্যবহার করা বোকামি,
বেকিম বাকাজ 8'17

4

সম্পূর্ণ-সঠিক উত্তর নয়

অ্যান্টোনিও হ্যালের উচ্চ আপভোটেড এবং স্বীকৃত উত্তর এখানে একটি ভুল ধারণা তৈরি করে যে এই প্রক্রিয়াটি জাভাস্ক্রিপ্টের parseIntকার্যক্রমে চলেছে :

আপনি স্ট্রিংটিতে পার্সেন্ট ব্যবহার করতে পারেন ... ফলাফলটি ব্যর্থ হওয়া উচিত ইসএনএন।

আমরা স্ট্রিং সহ এই বিবৃতিটি সহজেই অস্বীকার করতে পারি "123abc":

parseInt("123abc")    // 123     (a number...
isNaN("123abc")       // true     ...which is not a number)

এটির সাহায্যে আমরা দেখতে পাচ্ছি যে জাভাস্ক্রিপ্টের parseIntফাংশনটি "123abc"সংখ্যা হিসাবে প্রত্যাবর্তন করে 123, তবুও এর isNaNফাংশনটি আমাদের বলে যে "123abc" এটি একটি সংখ্যা নয়।

সঠিক উত্তর

ECMAScript-262 বিভাগ 18.2.3 বিভাগে চেকটি কীভাবে isNaNকাজ করে তা সংজ্ঞায়িত করে ।

18.2.3 isNaN(সংখ্যা)

isNaNফাংশন %isNaN%স্বকীয় অবজেক্ট। isNaNফাংশনটি যখন একটি আর্গুমেন্ট নম্বর দিয়ে ডাকা হয়, নিম্নলিখিত পদক্ষেপ নেওয়া হয়:

  1. যাক num? ToNumber(number)
  2. যদি numহয় NaN, ফিরে true
  3. অন্যথায়, ফিরে false

ToNumberফাংশন এটা রেফারেন্স এছাড়াও সংজ্ঞায়িত করা হয় এর নাম ECMAScript-262 এর অধ্যায় 7.1.3 । এখানে, আমরা জাভাস্ক্রিপ্ট কীভাবে স্ট্রিংগুলি পরিচালনা করে যা এই ফাংশনে প্রবেশ করে।

প্রশ্নে দেওয়া প্রথম উদাহরণটি এমন একটি স্ট্রিং যা সাদা স্পেস অক্ষর ছাড়া কিছুই নয় nothing এই বিভাগে বলা হয়েছে:

একজন StringNumericLiteralযে খালি থাকে বা শুধুমাত্র সাদা স্থান উপস্থিত রয়েছে রূপান্তরিত হয় +0

" "উদাহরণস্বরূপ স্ট্রিং তাই রূপান্তরিত হয় +0, যা একটি সংখ্যা।

একই বিভাগে আরও বলা হয়েছে:

ব্যাকরণ যদি এর Stringসম্প্রসারণ হিসাবে ব্যাখ্যা করতে না পারে StringNumericLiteralতবে ফলাফলটি ToNumberহয় NaN

যে অধ্যায় মধ্যে অন্তর্ভুক্ত চেক সব উদ্ধৃতি ছাড়া, " x"উদাহরণস্বরূপ প্রশ্নে দেওয়া এটি একটি হিসেবে ব্যাখ্যা করা যাবে না উপরে শর্ত মধ্যে পড়ে StringNumericLiteral" x"সুতরাং রূপান্তরিত হয় NaN


2

আমি নিশ্চিত না কেন তবে সমস্যাটি ঘুরে দেখার জন্য আপনি চেক করার আগে সর্বদা হোয়াইটস্পেস ট্রিম করতে পারেন। আপনি সম্ভবত যাইহোক এটি করতে চান।


4
একটি ছাঁটাই খালি স্ট্রিং isnan পরীক্ষা ব্যর্থ হয়।
এজেমেঙ্ক

2

ফাংশন isNaN("")একটি সঞ্চালিত নম্বর স্ট্রিং টাইপ বলপ্রয়োগ

ECMAScript 3-5 টাইপ অফ অপারেটরের জন্য নিম্নলিখিত রিটার্ন মানগুলি সংজ্ঞায়িত করে:

  • অনির্দিষ্ট
  • অবজেক্ট (নাল, অবজেক্টস, অ্যারে)
  • বুলিয়ান
  • সংখ্যা
  • দড়ি
  • ক্রিয়া

একটি ফাংশন বডি আমাদের পরীক্ষা মোড়ানো ভাল:

function isNumber (s) {
    return typeof s == 'number'? true
           : typeof s == 'string'? (s.trim() === ''? false : !isNaN(s))
           : (typeof s).match(/object|function/)? false
           : !isNaN(s)
}

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

স্ট্রিং এবং সংখ্যা ব্যতীত অন্য ধরণের জন্য যদি পরীক্ষা করার প্রয়োজন না থাকে তবে নিম্নলিখিত স্নিপেটটি কিছু শর্তের অংশ হিসাবে ব্যবহার করা যেতে পারে:

if (!isNaN(s) && s.toString().trim()!='') // 's' can be boolean, number or string
    alert("s is a number")

1

আমি আপনাকে নীচের ফাংশনটি ব্যবহার করার পরামর্শ দিচ্ছি যদি আপনি যদি সত্যই কোনও যথাযথ চেক চান তবে এটি কোনও পূর্ণসংখ্যা হয়:

function isInteger(s)
{
   return Math.ceil(s) == Math.floor(s);
}

1

isNaN(" ")এটি মিথ্যা যে isNaNসংখ্যার ধরণের অ-সংখ্যার জোরের কারণে বৈশ্বিক ফাংশনের বিভ্রান্তিমূলক আচরণের অংশ ।

এমডিএন থেকে :

isNaNফাংশন নির্দিষ্টকরণের একেবারে প্রথম সংস্করণ থেকে , অ-সংখ্যাসূচক যুক্তিগুলির জন্য এর আচরণ বিভ্রান্তিকর। যখন isNaNফাংশনে আর্গুমেন্ট সংখ্যা টাইপ না করে, মানটি প্রথমে একটি সংখ্যায় জোর করা হয়। ফলস্বরূপ মানটি এটি কিনা তা নির্ধারণের জন্য পরীক্ষা করা হয় NaN। সুতরাং অ-সংখ্যার জন্য যেগুলি যখন সংখ্যার প্রকারে বাধ্য হয় তখন একটি বৈধ অ-না-এন সংখ্যার মান হয় (বিশেষত খালি স্ট্রিং এবং বুলিয়ান আদিম্বর, যখন জোর করে সংখ্যার মান শূন্য বা এক দেয়), "মিথ্যা" প্রত্যাবর্তিত মান অপ্রত্যাশিত হতে পারে; উদাহরণস্বরূপ, খালি স্ট্রিং অবশ্যই "সংখ্যা নয়"।

আরও মনে রাখবেন যে ECMAScript 6 এর সাথে এখন আরও একটি Number.isNaNপদ্ধতি রয়েছে যা এমডিএন অনুসারে:

গ্লোবাল isNaN()ফাংশনের তুলনায় , Number.isNaN()পরামিতিটিকে একটি সংখ্যায় জোর করে রূপান্তর করার সমস্যা ভোগ করবেন না। এর অর্থ এই যে মানগুলি সাধারণত রূপান্তরিত হয় তা পাস করা এখন নিরাপদ NaNতবে বাস্তবে একই মান হয় না NaN। এটাও যে হয় টাইপ সংখ্যা যে শুধুমাত্র মূল্যবোধ, মানে NaNপ্রত্যাবর্তন, true

দুর্ভাগ্য :

এমনকি ECMAScript 6 Number.isNaNপদ্ধতির নিজস্ব ইস্যু রয়েছে, যেমন ব্লগ পোস্টে বর্ণিত হয়েছে - কুরুচিপূর্ণ জাভাস্ক্রিপ্ট এবং ES6 NaN সমস্যা ঠিক করা


1

isNaNফাংশন, একটি তার আর্গুমেন্ট হিসাবে নম্বর আশা তাই অন্য কোন প্রকার (আপনার ক্ষেত্রে একটি স্ট্রিং) অফ আর্গুমেন্ট সংখ্যায় রূপান্তরিত করা হবে সামনে প্রকৃত ফাংশন যুক্তিবিজ্ঞান সঞ্চালিত হয়। (সচেতন হোন যে NaNএটিও সংখ্যার মান!

BTW। এটি সমস্ত অন্তর্নির্মিত ফাংশনগুলির জন্য সাধারণ - যদি তারা কোনও নির্দিষ্ট ধরণের আর্গুমেন্টের প্রত্যাশা করে তবে আসল যুক্তিটি স্ট্যান্ডার্ড রূপান্তর ফাংশন ব্যবহার করে রূপান্তরিত হবে। সমস্ত বুনিয়াদি ধরণের (বুল, স্ট্রিং, সংখ্যা, অবজেক্ট, তারিখ, নাল, অপরিবর্তিত) মধ্যে মানক রূপান্তর রয়েছে)

এর জন্য স্ট্যান্ডার্ড রূপান্তরটি স্পষ্টভাবে আহ্বান Stringকরা Numberযেতে পারে Number()। সুতরাং আমরা এটি দেখতে পারি:

  • Number(" ") মূল্যায়ন 0
  • Number(" x") মূল্যায়ন NaN

এটি দেওয়া, isNaNফাংশনের ফলাফল সম্পূর্ণ যৌক্তিক!

আসল প্রশ্ন হ'ল স্ট্যান্ডার্ড-টু-নম্বর রূপান্তরটি এর মতো কাজ করে। স্ট্রিং-টু-নাম্বার রূপান্তরটি সত্যই "123" বা "17.5e4" এর মতো সংখ্যাযুক্ত স্ট্রিংগুলিকে সমতুল্য সংখ্যায় রূপান্তর করতে পারে। রূপান্তরটি প্রথমে প্রাথমিক সাদা জায়গা ছেড়ে যায় (সুতরাং "123" বৈধ) এবং তারপরে বিশিষ্টটিকে সংখ্যা হিসাবে পার্স করার চেষ্টা করে। যদি এটি সংখ্যা হিসাবে পার্সেবল না হয় ("x" হয় না) তবে ফলাফলটি এনএএন। তবে স্পষ্টতই বিশেষ নিয়ম রয়েছে যে একটি স্ট্রিং যা খালি বা কেবল সাদা স্থানকে 0 এ রূপান্তরিত হয় So সুতরাং এটি রূপান্তরটি ব্যাখ্যা করে।

তথ্যসূত্র: http://www.ecma-international.org/ecma-262/5.1/#sec-9.3.1


1

আমি এই সমস্যাটি সমাধানে সহায়তা করার জন্য এই দ্রুত সামান্য ফাংশনটি লিখেছি।

function isNumber(val) {
     return (val != undefined && val != null && val.toString().length > 0 && val.toString().match(/[^0-9\.\-]/g) == null);
};

এটি কেবল এমন অক্ষরের জন্য যাচাই করে যা সংখ্যাসূচক নয় (0-9), যা '-' বা '।' নয় এবং এটি অপরিজ্ঞাত, নাল বা খালি নয় এবং কোনও মিল না থাকলে সত্য প্রত্যাবর্তন করে। :)


একটি বিরক্তিকর এর জন্য আপনাকে ধন্যবাদ; এটি আমার সমস্যাটি খুব সুন্দরভাবে সমাধান করেছে।
হেনরি

1

অন্যান্য ব্যাখ্যা হিসাবে isNaNফাংশনটি খালি স্ট্রিংটিকে বৈধতা দেওয়ার আগে একটি সংখ্যাতে বাধ্য করবে, এইভাবে একটি খালি স্ট্রিংটি 0 (যা একটি বৈধ সংখ্যা) এ পরিবর্তন করবে। তবে, আমি দেখতে পেয়েছি যে খালি স্ট্রিং বা কেবলমাত্র ফাঁকা স্থানের একটি স্ট্রিং পার্স করার চেষ্টা করার পরে parseIntফাংশনটি ফিরে আসবে NaN। যেমন নীচের সংমিশ্রণটি ভালভাবে কাজ করছে বলে মনে হচ্ছে:

if ( isNaN(string) || isNaN(parseInt(string)) ) console.log('Not a number!');

এই চেকটি দশমিক পয়েন্ট সহ ধনাত্মক সংখ্যা, negativeণাত্মক সংখ্যা এবং সংখ্যার জন্য কাজ করবে, সুতরাং আমি বিশ্বাস করি এটি সমস্ত সাধারণ সংখ্যাসূচক ক্ষেত্রে কভার করে।


1

NaN ! == "সংখ্যা নয়"

NaN সংখ্যা প্রকারের একটি মান

এটি ECMAScript এ isNaN () এর একটি সংজ্ঞা

1. Let num be ToNumber(number).
2. ReturnIfAbrupt(num).
3. If num is NaN, return true.
4. Otherwise, return false.

যে কোনও মানকে সংখ্যায় রূপান্তর করার চেষ্টা করুন।

Number(" ") // 0
Number("x") // NaN
Number(null) // 0

যদি মানটি নির্ধারণ করতে চান তবে আপনার NaNপ্রথমে এটি একটি সংখ্যার মানতে রূপান্তর করার চেষ্টা করা উচিত।


0

এই ফাংশনটি আমার পরীক্ষাগুলিতে কাজ করেছে বলে মনে হয়েছিল

function isNumber(s) {
    if (s === "" || s === null) {
        return false;
    } else {
        var number = parseInt(s);
        if (number == 'NaN') {
            return false;
        } else {
            return true;
        }
    }
}

2
আপনার পুরো ফাংশনটি লেখা যেতে পারে:return !(s === "" || s === null || parseInt(s) == 'NaN');
এরিক


0

জাভাস্ক্রিপ্ট বিল্ট-ইন isNaN ফাংশন, হয় - ডিফল্ট দ্বারা আশা করা যেতে হবে - একটি "ডায়নামিক প্রকার অপারেটর"। অতএব (ডিটিসি প্রক্রিয়া চলাকালীন) সমস্ত মান একটি সাধারণ সত্য উপস্থাপন করতে পারে যেমন মিথ্যা"", " ", " 000" , এনএন হতে পারে না।

অর্থ যে সরবরাহ করা যুক্তিটি প্রথমে যেমন রূপান্তরিত হবে :

function isNaNDemo(arg){
   var x = new Number(arg).valueOf();
   return x != x;
}

ব্যাখ্যা:

ফাংশন বডির শীর্ষ লাইনে আমরা (প্রথম) আর্গুমেন্টটিকে সফলভাবে একটি সংখ্যা অবজেক্টে রূপান্তরিত করার চেষ্টা করছি। এবং (দ্বিতীয়) ডট অপারেটরটি ব্যবহার করে আমরা - আমাদের নিজস্ব সুবিধার্থে - তৈরি হওয়া অবজেক্টটির আদিম মান তত্ক্ষণাত বন্ধ করে দেওয়া

দ্বিতীয় লাইনে আমরা পূর্ববর্তী পদক্ষেপে প্রাপ্ত মানটি নিয়ে চলেছি, এবং এনএএন মহাবিশ্বের কোনও কিছুর সমান নয়, এমনকি নিজেরও নয়, যেমন সুবিধা:NaN == NaN >> false সর্বশেষে এটির সাথে (বৈষম্যের জন্য) তুলনা করা ।

এইভাবে ফাংশন রিটার্নটি কেবল তখনই ফলপ্রসূ হবে যখন কেবল সরবরাহিত আর্গুমেন্ট-রিটার্ন কোনও সংখ্যার অবজেক্টে রূপান্তর করার ব্যর্থ প্রচেষ্টা, অর্থাত্, একটি সংখ্যা নয়; যেমন, এনএএন


# ননস্ট্যাটিক ()

তবে, স্ট্যাটিক টাইপ অপারেটরের জন্য - প্রয়োজন হলে এবং যখন প্রয়োজন হয় - আমরা অনেক সহজ ফাংশন লিখতে পারি যেমন:

function isNaNstatic(x){   
   return x != x;
}

এবং সম্পূর্ণরূপে ডিটিসি এড়িয়ে চলুন যাতে যুক্তিটি সুস্পষ্টভাবে একটি এনএন নম্বর না করা হয় তবে এটি মিথ্যা বলে প্রত্যাবর্তন করবে। সুতরাং, নিম্নলিখিতগুলির বিরুদ্ধে পরীক্ষা করা:

isNaNStatic(" x"); // will return false কারণ এটি এখনও একটি স্ট্রিং

তবে: isNaNStatic(1/"x"); // will of course return true.উদাহরণস্বরূপ হিসাবেisNaNStatic(NaN); >> true

তবে এর বিপরীতে isNaN, isNaNStatic("NaN"); >> falseকারণ এটি (যুক্তি) একটি সাধারণ স্ট্রিং।

পিএস: ইসডন এর স্ট্যাটিক সংস্করণটি আধুনিক কোডিং দৃশ্যে খুব কার্যকর হতে পারে। এবং এটি পোস্ট করার জন্য আমার সময় নিয়ে যাওয়া অন্যতম প্রধান কারণ হতে পারে।

শুভেচ্ছা।


0

isNAN(<argument>)প্রদত্ত যুক্তিটি অবৈধ সংখ্যা কিনা তা জানাতে একটি ফাংশন। isNaNআর্গুমেন্ট সংখ্যা টাইপ টাইপ করে। আপনি যদি তদন্ত করতে চান যে আর্গুমেন্টটি সংখ্যাযুক্ত কিনা? দয়া করে $.isNumeric()jQuery এ ফাংশন ব্যবহার করুন ।

এটি হ'ল isNaN (foo) isNaN (সংখ্যা (foo)) এর সমতুল্য, এটি সুস্পষ্ট কারণে সমস্ত সংখ্যাযুক্ত যে কোনও স্ট্রিংকে সংখ্যা হিসাবে গ্রহণ করে। প্রাক্তন জন্য।

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

আমি এটি ব্যবহার করি

    function isNotANumeric(val) {
    	if(val.trim && val.trim() == "") {
         return true;
      } else {
      	 return isNaN(parseFloat(val * 1));
      }
    }
    
    alert(isNotANumeric("100"));  // false
    alert(isNotANumeric("1a"));   // true
    alert(isNotANumeric(""));     // true
    alert(isNotANumeric("   "));  // true


0

হোয়াইটস্পেসের সাথে নির্দিষ্ট স্ট্রিংয়ের মান রয়েছে কিনা তা পরীক্ষা করার সময় বা সম্ভবত স্ট্রিং বৈধতা দেওয়ার চেষ্টা করা " "হচ্ছে isNaN, উদাহরণস্বরূপ:

// value = "123 " if (value.match(/\s/) || isNaN(value)) { // do something }

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