मेरे पास जावास्क्रिप्ट गणनाओं की एक श्रृंखला है जो (केवल 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); प्रदर्शित करता है । (निश्चित रूप से यह एक अस्पष्ट मामला है, और जो कोई भी फिर से परिभाषित करने का फैसला करता है , आदि को अजीब चीजें होने की उम्मीद करनी चाहिए।)InfinityNaN
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+12 ^ 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?