'+ नई तारीख' में प्लस साइन क्या करता है


238

मैंने इसे कुछ जगहों पर देखा है

function fn() {
    return +new Date;
}

और मैं देख सकता हूं कि यह एक डेट ऑब्जेक्ट के बजाय टाइमस्टैम्प लौटा रहा है, लेकिन मुझे इस बात पर कोई दस्तावेज नहीं मिल रहा है कि प्लस साइन क्या कर रहा है।

क्या कोई समझा सकता है?


जवाबों:


294

यह + unary ऑपरेटर है, यह इसके बराबर है:

function(){ return Number(new Date); }

देखें: http://xkr.us/articles/javascript/unary-add/

और MDN में: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus


4
लेकिन क्यों आप getTimeतारीख वस्तु पर परिभाषित विधि का उपयोग नहीं करेंगे ?!
tkone

30
लगभग किसी भी परिस्थिति में आपको वास्तव में इसका उपयोग नहीं करना चाहिए। मैं वास्तव में इस पर जल गया। + नई तिथि () किसी भी प्रकार के गणितीय कार्यों के अलावा एक प्रमुख प्रदर्शन दंड से गुजरना होगा। इस jsperf को देखें, jsperf.com/new-date-timing
Geuis

9
प्रोग्रामिंग ब्रेविटी में @BradKoch निश्चित रूप से आत्मा की बुद्धि नहीं है। जैसा कि अजगर समुदाय ने इसे पर्याप्त रूप से रखा है "स्पष्ट हमेशा निहित से बेहतर है।" क्या होगा यदि एक ब्राउज़र ने स्वचालित प्रकार के रूपांतरण को बदल दिया है जो एक प्रतिगमन के माध्यम से वहां निहित है? अब आपका कोड काम नहीं करता है! .getTime()हमेशा बीमा करेगा।
tkone

11
@ एक और उत्कृष्ट कारण है कि सिर्फ इसलिए कि आप का मतलब नहीं होना चाहिए आप कर सकते हैं!
tkone

14
Sine ECMAScript 5 है Date.now(), जो मिलीसेकंड में दिनांक और समय प्राप्त करने का पसंदीदा तरीका है।
कटेमाचीनी

43

जावास्क्रिप्ट शिथिल टाइप का होता है, इसलिए यह कुछ विशेष परिस्थितियों में टाइप कॉर्शन / रूपांतरण करता है:

http://blog.jeremymartin.name/2008/03/understanding-loose-typing-in.html
http://www.jibbering.com/faq/faq_notes/type_convert.html

अन्य उदाहरण:

>>> +new Date()
1224589625406
>>> +"3"
3
>>> +true
1
>>> 3 == "3"
true

>>> 3 === "3" झूठा
डेविड स्पेक्टर 12

6

एक जावास्क्रिप्ट तारीख एक स्ट्रिंग के रूप में लिखा जा सकता है:

Thu Sep 10 2015 12:02:54 GMT + 0530 (IST)

या एक संख्या के रूप में:

1441866774938

संख्या के रूप में लिखे गए दिनांक, 1 जनवरी, 1970, 00:00:00 के बाद से मिलीसेकंड की संख्या को निर्दिष्ट करता है।

आपके प्रश्न पर आकर यह असाइनमेंट ऑपरेटर '=' के बाद '+' जोड़कर, दिनांक को समान संख्या मान में परिवर्तित करता है।

समान संख्या (फ़ंक्शन) का उपयोग करके प्राप्त किया जा सकता है, जैसे संख्या (नई तिथि ());

var date = +new Date(); //same as 'var date =number(new Date());'


3

बस कुछ और जानकारी देने के लिए:

यदि आपको याद है, जब आप दो दिनांक के बीच समय का अंतर खोजना चाहते हैं, तो आप बस निम्नलिखित के रूप में करते हैं;

var d1 = new Date("2000/01/01 00:00:00"); 
var d2 = new Date("2000/01/01 00:00:01");  //one second later

var t = d2 - d1; //will be 1000 (msec) = 1 sec

typeof t; // "number"

अब यदि आप d1-0 के प्रकार की जांच करते हैं, तो यह भी एक संख्या है:

t = new Date() - 0; //numeric value of Date: number of msec's since 1 Jan 1970.
typeof t; // "number"

वह + भी दिनांक को संख्या में बदल देगा:

typeof (+new Date()) //"number"

लेकिन ध्यान दें कि इसी तरह से व्यवहार नहीं किया 0 + new Date()जाएगा ! इसे स्ट्रिंग के रूप में संक्षिप्त किया जाएगा:

0 + new Date() // "0Tue Oct 16 05:03:24 PDT 2018"

1

यह एक यूनीरी ऐड ऑपरेटर है और इसका उपयोग स्पष्ट संख्या रूपांतरण के लिए भी किया जाता है, इसलिए जब आप कॉल करते हैं, तो +new Date()यह उस वस्तु के संख्यात्मक मान को प्राप्त करने की कोशिश करता है valueOf()जैसे हम से स्ट्रिंग प्राप्त करते हैं।toString()

new Date().valueOf() == (+new Date)  // true

-3

यह बिल्कुल वैसा ही काम करता है जैसे:

समारोह () {वापसी 0 + नई तारीख; }

उसी का परिणाम है:

फ़ंक्शन () {नई तिथि लौटाएं ()। getTime (); }

11
0 + नई तिथि पर नहीं। वह पहले तारीख को एक स्ट्रिंग में परिवर्तित करता है और फिर एक "0" को प्रस्तुत करता है, (उदाहरण के लिए: "0Tue 21 अक्टूबर 2008 20:38:05 GMT-0400");
क्रिस नू

2
1 * नई तारीख, लेकिन 1 + नई तारीख -> स्ट्रिंग
केंट फ्रेड्रिक

हां, यह भी वही हैnew Date/1
आशीष
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.