मेरे पास जावास्क्रिप्ट गणनाओं की एक श्रृंखला है जो (केवल IE के तहत) उपयोगकर्ता की पसंद के आधार पर इन्फिनिटी दिखाती है।
Infinity
उदाहरण के लिए प्रदर्शित होने वाले शब्द को कैसे रोकता है और उदाहरण के लिए, 0.0
इसके बजाय दिखाता है ?
जवाबों:
if (result == Number.POSITIVE_INFINITY || result == Number.NEGATIVE_INFINITY)
{
// ...
}
आप संभवतः isFinite
इसके बजाय फ़ंक्शन का उपयोग कर सकते हैं , इस पर निर्भर करता है कि आप कैसे इलाज करना चाहते हैं NaN
। isFinite
रिटर्न false
अपना नंबर है अगर POSITIVE_INFINITY
, NEGATIVE_INFINITY
या NaN
।
if (isFinite(result))
{
// ...
}
Infinity
संपत्ति केवल-पढ़ने के लिए नहीं है, जिसका अर्थ है कि इसे फिर से परिभाषित किया जा सकता है: उदाहरण के लिए, "सही"var x = 42; Infinity = 42; alert(x === Infinity);
प्रदर्शित करता है । (निश्चित रूप से यह एक अस्पष्ट मामला है, और जो कोई भी फिर से परिभाषित करने का फैसला करता है , आदि को अजीब चीजें होने की उम्मीद करनी चाहिए।)Infinity
NaN
Number.(POSITIVE|NEGATIVE)_INFINITY
केवल-या तो पढ़ा नहीं है, केवल सख्त मोड में पढ़ा Infinity
जाता है। इसके अलावा, -?1/0
मैंने आपके सामने जो केस पेश किया है , उसका क्या ? वैसे भी, आपको isFinite
इसके बजाय लगभग हमेशा उपयोग करना चाहिए ।
Number.POSITIVE_INFINITY
और Number.NEGATIVE_INFINITY
कर रहे हैं केवल पढ़ने के लिए (Chrome8, FF3.6 और IE8 पर परीक्षण)। 1/0
काम का उपयोग करना ठीक है, लेकिन यह आपके कोड के अनुरक्षकों के लिए इतना स्पष्ट नहीं होगा कि आप वास्तव में क्या परीक्षण करना चाहते हैं। मैं मानता हूं कि isFinite
चीजों को करने का लगभग हमेशा बेहतर तरीका है - इसीलिए मैंने अपने उत्तर में इसका उल्लेख किया है - लेकिन केवल ओपी ही यह तय कर सकता है कि यह उनकी आवश्यकताओं को पूरा करता है या नहीं।
Object.defineProperty
और __defineGetter__
। Infinity
दूसरी ओर, है सख्त मोड में गैर-विन्यास।
एक सरल n === n+1
या n === n/0
काम करता है:
function isInfinite(n) {
return n === n/0;
}
ध्यान रखें कि मूल isFinite()
संख्याओं के लिए मूल coerces इनपुट। isFinite([])
और उदाहरण के लिए isFinite(null)
दोनों हैं true
।
n === n+1
2 ^ 53, अर्थात 1e30 से बड़ी सभी संख्याओं के लिए सही का मूल्यांकन करता है। विभाजन हैक काम करता है, यहां तक कि NaN और -Infinity के लिए भी। हालांकि, ल्यूक का जवाब आपको वायाए को अधिक पठनीय कोड देता है।
n+1
इसका प्रतिनिधित्व नहीं किया जा सकता है और यह गोलाई के अधीन है। ठीक है, यहां तक कि पूर्णांक त्रुटियों को गोल करने से भी प्रभावित होते हैं। Btw, मुझे नहीं लगता कि आपका कोड "गणित-प्रूफ" है, बस कोशिश करें n === n/-0
। Reals को +/- inf के साथ पूरा करने पर, आपकी सीमा को अच्छी तरह से परिभाषित नहीं किया जाता है जब तक कि अंतर्निहित शून्य अनुक्रम को सकारात्मक नहीं माना जाता है।
में ES6
, Number.isFinite()
विधि यह निर्धारित करती है कि पारित मूल्य एक परिमित संख्या है या नहीं।
Number.isFinite(Infinity); // false
Number.isFinite(NaN); // false
Number.isFinite(-Infinity); // false
Number.isFinite(0); // true
Number.isFinite(2e64); // true
मुझे विभिन्न प्रकार के रक्षात्मक कोडिंग कारणों के साथ-साथ पठनीयता के लिए लॉडश का उपयोग करना पसंद है। ईएस 6 महान है और इसमें गैर-संख्यात्मक मानों के मुद्दे नहीं हैं, लेकिन यदि ईएस 6 संभव नहीं है, तो आपके पास पहले से ही दर्ज है, या ब्रीफ़ कोड चाहते हैं: _.isFiniteNumber.isFinite
_.isFinite(Infinity); // false
_.isFinite(NaN); // false
_.isFinite(-Infinity); // false
_.isFinite(null); // false
_.isFinite(3); // true
_.isFinite('3'); // true
मैं एक ऐसे परिदृश्य में भाग गया हूं, जिसकी मुझे यह जाँच करने की आवश्यकता है कि क्या मान NaN
या Infinity
प्रकार का है, लेकिन मान्य परिणामों के रूप में तार पास करें। क्योंकि कई टेक्स्ट स्ट्रिंग्स झूठे-पॉजिटिव पैदा करेंगे NaN
, मैंने इसे दरकिनार करने के लिए एक सरल उपाय किया है:
const testInput = input => input + "" === "NaN" || input + "" === "Infinity";
उपरोक्त कोड मानों को स्ट्रिंग्स में परिवर्तित करता है और जाँचता है कि क्या वे NaN या Infinity के समान हैं (आपको नकारात्मक अनन्तता के लिए कोई अन्य मामला जोड़ना होगा)।
इसलिए:
testInput(1/0); // true
testInput(parseInt("String")); // true
testInput("String"); // false
NaN
एस नहीं, आदि
toString()
इसके बजाय इस्तेमाल करता तो क्या यह आपको अधिक खुश करता ? यह कैसे असंगत परिणाम दे सकता है या क्यों इस विधि की सिफारिश नहीं है नीचे या राज्य कारणों से मुक्त महसूस करें। अब तक, मुझे अभी भी यह लगता है कि जो कोई भी उत्तर की तलाश में है उसके लिए एक विकल्प जोड़ता है और कोई ठोस कारण नहीं है कि यह खतरनाक, अस्थिर क्यों है, आदि
आप उपयोग कर सकते हैं खिड़की में अनंतisFinite(123)
:
आप एक फ़ंक्शन लिख सकते हैं जैसे:
function isInfinite(num) {
return !isFinite(num);
}
और जैसे उपयोग करें:
isInfinite(null); //false
isInfinite(1); //false
isInfinite(0); //false
isInfinite(0.00); //false
isInfinite(NaN); //true
isInfinite(-1.797693134862316E+308); //true
isInfinite(Infinity); //true
isInfinite(-Infinity); //true
isInfinite(+Infinity); //true
isInfinite(undefined); //true
आप Number.isFinit
ई भी कर सकते हैं जो यह भी जांचता है कि क्या मूल्य संख्या भी है और जाँच undefined
और null
आदि के लिए अधिक सटीक है ...
या आप इसे इस तरह से पॉलीफिल कर सकते हैं :
Number.isFinite = Number.isFinite || function(value) {
return typeof value === 'number' && isFinite(value);
}
Number.(POSITIVE|NEGATIVE)_INFINITY
के बजाय-?Infinity
या-?1/0
?