2015-07-23 14 views
24

के बीच अंतर का पता लगाना मैं दो बार के बीच अंतर की गणना करने के लिए MomentJS का उपयोग कर रहा हूं। अजीब चीज इस पुस्तकालय के बारे में है आज और आज के बीच का अंतर 0 है। आज और कल के बीच का अंतर -0 है।जावास्क्रिप्ट - सकारात्मक शून्य और नकारात्मक शून्य

मेरे सवाल यह है कि मैं 0 और -0 के बीच अंतर है, है। ऐसा लगता है कि जावास्क्रिप्ट उन्हें वही व्यवहार करता है।

if (tomorrow === -0) 
    console.log('It is tomorrow!'); 
else if (tomorrow === 0) 
    console.log('It is today!'); 

यहाँ JSFiddle पर एक उदाहरण के रूप में यह कैसे लौटे मूल्यों (संभालती है मैं तो जहां शब्द आप कर सकते हैं कर रहे हैं पर निर्भर करता है ऑस्ट्रेलिया में हूँ है:

इसलिए उदाहरण के लिए अगर मैं निम्नलिखित कोड लिखने आज और कल की तारीखों को समायोजित करना होगा)

+2

मेरे लिए, '' tomorrow' रूप -1', नहीं 'दिखा रहा है -0'। (आपके बेड़े के माध्यम से) – Pointy

+0

0 और -0 समस्या के बारे में, क्या आप इस http://stackoverflow.com/questions/7223359/are-0-and-0-the-same – cycopepe

+1

पर एक नज़र डाल सकते हैं, आप शारीरिक रूप से कहां हैं अभी ग्रह पृथ्वी पर? – Pointy

उत्तर

46

1/val > 0 जो भी आप चाहते हैं वह करेंगे। सकारात्मक के लिए true सकारात्मक और false पर नकारात्मक के लिए देता है।

यह काम करता है क्योंकि 1/-0 नकारात्मक अनंतता देता है, और 1/0 सकारात्मक अनंतता देता है, जो तब तुलनीय होते हैं। आप 1/val == Infinity जैसे कुछ भी कर सकते हैं।

11

this Stack Overflow question (और टिप्पणियों में) में बताया गया है, जावास्क्रिप्ट +0 === -0 में वास्तव में true डिज़ाइन द्वारा मूल्यांकन किया जाता है।

आप उपयोग कर सकते हैं Infinity/-Infinity एक अंतर देखने के लिए (तकनीकी रूप से, +0/-0 केवल संख्या अनंत मूल्यों का निर्माण नहीं हो सकता है, तो मैं में अतिरिक्त जांच के लिए छोड़ दिया):

var positiveZero = +0; 
var negativeZero = -0; 

console.log(positiveZero === 0 && 1/positiveZero === Infinity); // true 
console.log(positiveZero === 0 && 1/positiveZero === -Infinity); // false 

console.log(negativeZero === 0 && 1/negativeZero === Infinity); // false 
console.log(negativeZero === 0 && 1/negativeZero === -Infinity); // true 

JSFiddle

function isNegative0(x) { 
    if (x!==0) return false; 
    var obj=Object.freeze({z:-0}); 
    try { 
     Object.defineProperty(obj,'z',{value:x}); 
    } catch (e) {return false}; 
    return true; 
} 
:

अधिक जानकारी और अभी तक ECMAScript 5 के साथ एक और समाधान के लिए भी this blog post देखें 0

संबंधित मुद्दे