जावास्क्रिप्ट में क्या + = _ का मतलब है


252

मैं सोच रहा था कि जावास्क्रिप्ट में = + _ ऑपरेटर का क्या मतलब है। ऐसा लगता है कि यह असाइनमेंट करता है।

उदाहरण:

hexbin.radius = function(_) {
   if (!arguments.length)
       return r;
   r = +_;
   dx = r * 2 * Math.sin(Math.PI / 3);
   dy = r * 1.5;
   return hexbin;
};

57
मुझे अच्छे पुराने अप्रोच ऑपरेटर की याद दिलाई-->
ov

12
+ यहां एक ओपेरियन ऑपरेटर है, जिसमें _ इसके ऑपरेंड के रूप में है।
पीटर विटवेट

44
ऐसा लगता है कि पर्ल प्रोग्रामर डिफ़ॉल्ट चर को जाने नहीं दे सकता; ;-)
माइकल वाइल्ड

4
एक अच्छा वाक्यविन्यास-हाइलाइटिंग आपको सवाल का जवाब देने में मदद करता था।
ह्यूगो डर hungrige

18
आप एक स्माइली चेहरा बना सकते हैंx= +_+ 0;
tckmn

जवाबों:


396
r = +_;
  • +जो कुछ भी _एक नंबर पर लाने की कोशिश करता है ।
  • _केवल एक चर नाम है (ऑपरेटर नहीं), यह हो सकता है a, fooआदि।

उदाहरण:

+"1"

शुद्ध संख्या 1 के लिए "1" डाली।

var _ = "1";
var r = +_;

rअब 1नहीं है "1"

इसके अलावा, अंकगणितीय ऑपरेटरों पर एमडीएन पृष्ठ के अनुसार :

यूनीरी प्लस ऑपरेटर अपने ऑपरेंड से पहले और अपने ऑपरेंड का मूल्यांकन करता है, लेकिन अगर यह पहले से ही नहीं है, तो इसे एक नंबर में बदलने का प्रयास करता है[...] यह पूर्णांक और फ़्लोट्स के स्ट्रिंग निरूपण और साथ ही साथ गैर-स्ट्रिंग मान और true, को परिवर्तित कर सकता है । दशमलव और हेक्साडेसिमल ( -प्रक्षिप्त) दोनों स्वरूपों में पूर्णांक समर्थित हैं। नकारात्मक संख्याएं समर्थित हैं (हालांकि हेक्स के लिए नहीं)। यदि यह किसी विशेष मूल्य को पार्स नहीं कर सकता है, तो यह इसका मूल्यांकन करेगा ।falsenull"0x"NaN

यह भी ध्यान दिया जाता है कि

यूनीरी प्लस किसी संख्या में किसी चीज़ को परिवर्तित करने का सबसे तेज़ और पसंदीदा तरीका है


2
क्या + वास्तव में एक संख्या के लिए डाली जाती है, या +_वास्तव में इसका मतलब है 0+_, _0 में जोड़ने से पहले किस मामले में डाली जानी चाहिए?
कोलिनसिमरन


17
@ c.cam108 - नहीं, वे समान व्यवहार नहीं करते हैं। यूनरी प्लस मान को एक संख्या पर रखता है, लेकिन बाइनरी प्लस नहीं करता है: +'12' === 12(परिणाम एक संख्या है), लेकिन 0 + '12' === '012'(परिणाम एक स्ट्रिंग है)। हालांकि, ध्यान दें, कि 0 - '12' === -12
कोबी

1
@ जुज़ेरली ज़रूर, लेकिन यह अच्छा अभ्यास नहीं है। इसके अलावा का उपयोग करने की कोशिश;)
इज़काता

पर्ल का डिफ़ॉल्ट चर $ _
मैथ्यू लॉक

95

यह एक असाइनमेंट ऑपरेटर नहीं है।

  • _ फ़ंक्शन में केवल एक पैरामीटर पास किया गया है।

    hexbin.radius = function(_) {
                    //       ^ It is passed here
        // ...
    };
  • अगली पंक्ति में r = +_; +उस चर ( _) को एक संख्या या पूर्णांक मान में डाला जाता है और उसे चर पर निर्दिष्ट करता हैr

+=ऑपरेटर के साथ यह मत करो


54

=+वास्तव में दो ऑपरेटरों =का काम है +और _यह चर नाम है।

पसंद:

i = + 5;
or 
j = + i;
or 
i = + _;

मेरे निम्नलिखित कोड आपको स्ट्रिंग को इंट में =+बदलने के लिए उपयोग दिखाने में मदद करेंगे । उदाहरण:

y = +'5'
x = y +5
alert(x);

आउटपुट 10

उपयोग: तो यहाँ अन्यथा की वजह से yint है :5=+

y = '5'
x = y +5
alert(x);

आउटपुट 55

जहाँ जैसा _चर है।

_ = + '5'
x = _ + 5
alert(x)

आउटपुट 10

इसके अतिरिक्त, यह जानना दिलचस्प होगा कि आप भी उसी चीज़ को प्राप्त कर सकते हैं ~(यदि स्ट्रिंग इंट स्ट्रिंग है (फ्लोट इंट के लिए गोल होगा )

y = ~~'5'  // notice used two time ~
x = y  + 5
alert(x);

10 भी आउटपुट

~बिटवाइज़ नहीं है: अपने ऑपरेंड के बिट्स को सम्मिलित करता है। मैंने परिमाण में कोई बदलाव नहीं करने के लिए दो बार किया।


1
मैं x|0डबल का उपयोग अक्सर इंट में बदलने के लिए करता हूं ; हालाँकि, इसके साथ ही '~' के प्रयोग से संख्याओं को सीमित करने का दंड <2 ^ 32 है। + "2e15" नहीं करता है।
एकि सुइकोनें

@AkiSuihkonen हाँ अच्छा मुझे विश्वास x|0है कि और भी तेज है +। सही है ? अच्छी तकनीक :)। (२) मैं ~केवल ओपी दिखाने के लिए उपयोग करता हूं जो कि +केवल एक चिन्ह नहीं है जिसका उपयोग किया जा सकता है ( मैं स्वयं उपयोग करता हूं+ )।
ब्रिजेश चौहान

कहने के लिए मुश्किल - वहाँ jsperf है, हालांकि कोई इसे मापना चाहता है। OTOH इन दो ऑपरेटरों का एक अलग अर्थ है। यदि केवल एक संख्या की आवश्यकता होती है (और पूर्णांक नहीं) '+' वैसे भी एक वर्ण छोटा होता है।
अकी सुहिचोनेन

1
असल में मैंने इसे सिर्फ jsperf - 18M ops '' 0 'के लिए, 19M ops' + 'के लिए टेस्ट किया; प्रदर्शन संभवतः ब्राउज़र से ब्राउज़र में भिन्न होगा। jsperf.com/strtoint
Aki Suihkonen

1
@AkiSuihkonen ओह माय, बस फ़ायरफ़ॉक्स में jsperf परीक्षण किया, बहुत बड़ा अंतर .. |बहुत तेजी से।
तापीरोब

16

यह नहीं है =+। जावास्क्रिप्ट में, +इसका मतलब है इसे संख्या में बदलें।

+'32' 32 देता है।

+'a' NaN लौटाता है।

तो आप isNaN()यह जांचने के लिए उपयोग कर सकते हैं कि क्या इसे नंबर में बदला जा सकता है।


16

यह एक डरपोक है।

समझने वाली महत्वपूर्ण बात यह है कि यहाँ अंडरस्कोर वर्ण वास्तव में एक परिवर्तनीय नाम है , ऑपरेटर नहीं।

इसके सामने प्लस चिन्ह को अंडरस्कोर का सकारात्मक संख्यात्मक मान प्राप्त हो रहा है - अर्थात प्रभावी रूप से अंडरस्कोर वेरिएबल को इंट करने के लिए कास्टिंग करना। आप उसी प्रभाव को प्राप्त कर सकते हैं parseInt(), लेकिन प्लस साइन कास्टिंग का उपयोग यहां किया जा सकता है क्योंकि यह अधिक संक्षिप्त है।

और यह सिर्फ एक मानक चर असाइनमेंट के रूप में बराबर चिह्न छोड़ देता है।

यह शायद जानबूझकर भ्रमित करने के लिए नहीं लिखा गया है, जैसा कि एक अनुभवी जावास्क्रिप्ट प्रोग्रामर आमतौर पर अंडरस्कोर को एक चर के रूप में पहचानता है। लेकिन अगर आप नहीं जानते कि यह निश्चित रूप से बहुत भ्रामक है। मैं निश्चित रूप से इसे ऐसा नहीं लिखूंगा; मैं सबसे अच्छे समय में छोटे अर्थहीन चर नामों का प्रशंसक नहीं हूं - यदि आप अंतरिक्ष को बचाने के लिए जेएस कोड में लघु चर नाम चाहते हैं, तो एक मिनीफ़ायर का उपयोग करें; शुरुआत करने के लिए इसे छोटे चर के साथ न लिखें।


1
+1, जैसा कि आप स्पष्ट रूप से इंगित करने के लिए केवल एक ही यहाँ हैं कि _एक चर है।
13

@TRiG Starx के उत्तर के बारे में क्या है, जो बिना tl; ड्र?
मैथलेटिक्स


9

मुझे लगता है तुम मतलब है r = +_;? उस स्थिति में, यह पैरामीटर का रूपांतरण है a Number। कहते हैं _'12 .3 'है, फिर +'12.3'लौटता है 12.3। इसलिए उद्धृत विवरण +_में दिया गया है r


6

_फ़ंक्शन के एक पैरामीटर के रूप में पारित किया गया है, बस एक चर नाम है hexbin.radius, और +इसे संख्या में डाल दिया है

मुझे अपने कार्य की तरह ही एक अतिशयोक्ति करने दें।

var hexbin = {},r  ;

hexbin.radius = function(_) {
   if (!arguments.length)
      return r;
   console.log( _ , typeof _ )    
   r = +_;
   console.log( r , typeof r , isNaN(r) );   
}

और इस उदाहरण फ़ंक्शन को चलाएं .. जो आउटपुट देता है

hexbin.radius ("1");

1 string
1 number false 

hexbin.radius (1);

1 number
1 number false

hexbin.radius ([]);

[] object
0 number false

hexbin.radius ('a');

a string
NaN number true

hexbin.radius ({});

Object {} object
NaN number true

hexbin.radius (सच);

true boolean
1 number false

बहुत देर से जवाब दिया लेकिन बहुत अच्छा जवाब +।
ब्रिजेश चौहान

5

यह नंबर के बाईं ओर नया मान प्रदान करेगा।

var a=10;
var b="asg";
var c=+a;//return 10
var d=-a;//return -10
var f="10";

var e=+b;
var g=-f;

console.log(e);//NAN
console.log(g);//-10

आप +पहले एक भूल गए b
अत्तिला ओ।

1
thanx 4 ने मुझे एक उत्तर लिखने में मदद की।
अमरेन्द्र

3

+_के लगभग बराबर है parseFloat(_)। निरीक्षण करें कि parseIntगैर-संख्यात्मक वर्ण जैसे कि डॉट पर रुक जाएगा, जबकि parshFloatनहीं।

ऍक्स्प:

    parseFloat(2.4) = 2.4 
vs 
    parseInt(2.4) = 2 
vs 
    +"2.4" = 2.4

समाप्ति:

var _ = "3";
    _ = +_;

console.log(_); // will show an integer 3

बहुत कम अंतर:


मुझे लगता है कि पहली पंक्ति में आप parseInr(_)इसके बजाय कहना parseFloat(_) चाहते हैं?
ब्रिजेश चौहान

1
नहीं, मेरा मतलब था float, क्योंकि parseInt गैर-संख्यात्मक चरित्र पर रोक देगा, parshFloat नहीं करेगा। EXP: parseFloat(2.4) = 2.4बनाम parseInt(2.4) = 2
ब्रायन

3

सीधे शब्दों में, संख्या () कंस्ट्रक्टर का उपयोग करने के +_ बराबर है ।

वास्तव में, यह तारीखों पर भी काम करता है:

var d = new Date('03/27/2014');
console.log(Number(d)) // returns 1395903600000
console.log(+d) // returns 1395903600000

डेमो: http://jsfiddle.net/dirtyd77/GCLjd/


अधिक जानकारी MDN - Unary plus (+) सेक्शन पर भी मिल सकती है :

यूनीरी प्लस ऑपरेटर अपने ऑपरेंड से पहले और अपने ऑपरेंड का मूल्यांकन करता है, लेकिन अगर यह पहले से ही नहीं है, तो इसे एक नंबर में बदलने का प्रयास करता है। हालांकि एकतरफा नकार (-) भी गैर-संख्याओं को परिवर्तित कर सकता है, कुछ को एक संख्या में परिवर्तित करने का सबसे तेज़ और पसंदीदा तरीका है, क्योंकि यह संख्या पर कोई अन्य संचालन नहीं करता है। यह पूर्णांकों और फ़्लोट्स के स्ट्रिंग अभ्यावेदन को, साथ ही साथ गैर-स्ट्रिंग मानों को सही, गलत और अशक्त में बदल सकता है। दशमलव और हेक्साडेसिमल ("0x" -प्रकाशित) दोनों स्वरूपों में पूर्णांक समर्थित हैं। नकारात्मक संख्याएं समर्थित हैं (हालांकि हेक्स के लिए नहीं)। यदि यह किसी विशेष मूल्य को पार्स नहीं कर सकता है, तो यह NaN का मूल्यांकन करेगा।


2

इस अभिव्यक्ति में:

r = +_;
  • '+' यहाँ एक अपर संचालक के रूप में कार्य करता है जो सही ऑपरेंड के मान को परिवर्तित करने का प्रयास करता है । यह ऑपरेंड लेकिन मूल्यांकन किए गए मान को परिवर्तित नहीं करता है। तो _"1" रहेगा यदि यह मूल रूप से था, लेकिन rशुद्ध संख्या बन जाएगी।

इन मामलों पर विचार करें कि क्या कोई संख्यात्मक रूपांतरण के लिए + को लागू करना चाहता है

+"-0" // 0, not -0
+"1" //1
+"-1" // -1
+"" // 0, in JS "" is converted to 0
+null // 0, in JS null is converted to 0
+undefined // NaN
+"yack!" // NaN
+"NaN" //NaN
+"3.14" // 3.14

var _ = "1"; +_;_ // "1"
var _ = "1"; +_;!!_ //true
var _ = "0"; +_;!!_ //true
var _ = null; +_;!!_ //false

हालांकि, यह सबसे तेज संख्यात्मक कनवर्टर है, मैं शायद ही किसी को इसका उपयोग करने के लिए उपयोग करने की सलाह दूंगा। parseInt/parseFloatअच्छे पठनीय विकल्प हैं।

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