आप कैसे उपयोग करते हैं? : (सशर्त) जावास्क्रिप्ट में ऑपरेटर?


434

क्या कोई मुझे सरल शब्दों में समझा सकता है कि ?:(सशर्त, "टर्नरी") ऑपरेटर क्या है और इसका उपयोग कैसे करना है?


2
जो संचालक हैं। ऑपरेंड वे मान हैं जिनके साथ आप इन ऑपरेटरों का उपयोग करते हैं।
BoltClock

7
मजेदार तथ्य: कुछ भाषाओं (अर्थात् ग्रूवी ) में वास्तव में एक ऑपरैंड होता है ?:(जैसा कि आपने इसे लिखा है, जिसमें कोई कथन नहीं है) - एल्विस ऑपरेटर । बहुत चालाक है।
रोब ह्रस्का


3
Googling प्रतीकों समस्याग्रस्त हो सकता है, लेकिन Googling "जावास्क्रिप्ट ऑपरेटर" (और उन सभी को सीखना) के बारे में कैसे?
nnnnnn

इस विकी प्रविष्टि की जांच करें en.wikipedia.org/wiki/Elvis_operator
Nerdroid

जवाबों:


645

यह if-if स्टेटमेंट के लिए एक-लाइन शॉर्टहैंड है। इसे सशर्त ऑपरेटर कहा जाता है। 1

यहाँ कोड का एक उदाहरण दिया गया है जिसे सशर्त ऑपरेटर के साथ छोटा किया जा सकता है:

var userType;
if (userIsYoungerThan18) {
  userType = "Minor";
} else {
  userType = "Adult";
}

if (userIsYoungerThan21) {
  serveDrink("Grape Juice");
} else {
  serveDrink("Wine");
}

इसे इस ?:तरह से छोटा किया जा सकता है:

var userType = userIsYoungerThan18 ? "Minor" : "Adult";

serveDrink(userIsYoungerThan21 ? "Grape Juice" : "Wine");

सभी अभिव्यक्तियों की तरह, सशर्त ऑपरेटर को साइड-इफेक्ट के साथ एक स्टैंडअलोन स्टेटमेंट के रूप में भी इस्तेमाल किया जा सकता है, हालांकि यह मिनरल के बाहर असामान्य है :

userIsYoungerThan21 ? serveGrapeJuice() : serveWine();

वे भी जंजीर हो सकते हैं:

serveDrink(userIsYoungerThan4 ? 'Milk' : userIsYoungerThan21 ? 'Grape Juice' : 'Wine');

हालांकि, सावधान रहें, या आप इस तरह से जटिल कोड के साथ समाप्त हो जाएंगे:

var k = a ? (b ? (c ? d : e) : (d ? e : f)) : f ? (g ? h : i) : j;

1 जिसे अक्सर "टर्नरी ऑपरेटर" कहा जाता है, लेकिन वास्तव में यह केवल एक टर्नेरी ऑपरेटर है [एक ऑपरेटर जो तीन ऑपरेंड स्वीकार करता है]। यह वर्तमान में केवल एक जावास्क्रिप्ट है, हालांकि।


56
बस नाम स्पष्ट करने के लिए: ऑपरेटर ternaryका प्रकार है (अर्थात इसके 3 भाग हैं)। उस विशिष्ट टर्नरी ऑपरेटर का नाम है conditional operator। जेएस में केवल एक ही टर्नरी ऑपरेटर होता है, इसलिए शर्तों का दुरुपयोग होता है।
कोडिंग हुई

1
@tryingToGetProgrammingStern ternary रूप तकनीकी रूप से एक अभिव्यक्ति है, और अभिव्यक्ति में अभिव्यक्ति के पेड़ बनाने के लिए अन्य भाव हो सकते हैं। वह कोड वहीं है जो एक अभिव्यक्ति वृक्ष की तरह दिखता है :) देखें: fsharpforfunandprofit.com/posts/expressions-vs-statements
अलेक्जेंडर

1
आम उपयोग के मामले के लिए उदाहरण को अपडेट करने की दृढ़ता से सलाह देते हैं, न कि साइड-इफेक्ट उपयोग के मामले को अक्सर ऑपरेटर के अपमान के रूप में उद्धृत किया जाता है।
टीजे क्राउडर

7
यकीन नहीं होता कि नीचे की तरफ थोड़ा व्याकरण क्यों है, लेकिन यह गलत है। यदि जावास्क्रिप्ट में केवल 1 प्रकार का ऑपरेटर होता है, तो निश्चित रूप से यह कहना सही है कि टर्नेरी ऑपरेटर और ए टर्नरी ऑपरेटर नहीं ... यह कहना कि "यह टर्नेरी ऑपरेटर जावास्क्रिप्ट में एक टर्नेरी ऑपरेटर है (और यह केवल एक है)" है मूर्खतापूर्ण, बस का उपयोग करें और यह सभी का तात्पर्य है।
एंड्रयू

1
@MarkCarpenterJr जावास्क्रिप्ट में ऐसा करने का विशिष्ट तरीका ||ऑपरेटर के साथ है , क्योंकि यह शॉर्ट-सर्किट है यदि बाईं ओर का मान सत्य है।
पीटर ओल्सन

142

मैं दिए गए उत्तरों में कुछ जोड़ना चाहता हूं ।

यदि आप मुठभेड़ करते हैं (या उपयोग करना चाहते हैं) तो एक परिस्थिति में एक टर्नरी जैसे 'एक चर को प्रदर्शित करें यदि वह सेट है, और ...', आप इसे टर्नरी के बिना भी छोटा बना सकते हैं ।


के बजाय:

var welcomeMessage  = 'Hello ' + (username ? username : 'guest');

आप उपयोग कर सकते हैं:

var welcomeMessage  = 'Hello ' + (username || 'guest');

यह PHP के शॉर्टहैंड टर्नरी ऑपरेटर के बराबर है ?:

या और भी:

var welcomeMessage  = 'Hello ' + (username || something || maybethis || 'guest');

यह चर का मूल्यांकन करता है, और यदि यह गलत या परेशान है, तो यह अगले पर जाता है।


4
मैं टर्नरी से जूझ रहा था और आखिरकार मुझे यह जवाब मिल गया। धन्यवाद!
लजुबीसा लिवाक

अगर मुझे टर्नरी ऑपरेटर के आस-पास के ब्रेसिज़ का उपयोग नहीं करना था 'Hello ' + (username ? username : 'guest'), Hello + अगर इसे नजरअंदाज कर दिया जाए और टर्नरी ऑपरेशन के परिणाम को वापस कर दिया जाए। क्या कोई समझा सकता है क्यों?
शिव

2
@ शिव बिना कोष्ठक के, यह पूरे बाएं भाग को विकसित करता है : 'Hello ' + usernameजो हमेशा होता है true, क्योंकि यह एक स्ट्रिंग है जिसकी लंबाई 0. से अधिक है
जेफरी रोसेनडाल

26

इसे 'टर्नरी' या 'सशर्त' ऑपरेटर कहा जाता है।

उदाहरण

?: ऑपरेटर को एक ... और कथन के लिए शॉर्टकट के रूप में उपयोग किया जा सकता है। यह आमतौर पर एक बड़ी अभिव्यक्ति के हिस्से के रूप में उपयोग किया जाता है जहां एक ... और कथन अजीब होगा। उदाहरण के लिए:

var now = new Date();
var greeting = "Good" + ((now.getHours() > 17) ? " evening." : " day.");

उदाहरण एक स्ट्रिंग बनाता है जिसमें "गुड इवनिंग।" अगर यह शाम 6 बजे के बाद का है। समतुल्य कोड if का उपयोग करके ... और स्टेटमेंट निम्नानुसार दिखेगा:

var now = new Date();
var greeting = "Good";
if (now.getHours() > 17)
   greeting += " evening.";
else
   greeting += " day.";

से MSDN जे एस प्रलेखन

मूल रूप से यह एक शॉर्टहैंड कंडीशनल स्टेटमेंट है।

और देखें:


5
इसे वास्तव में सशर्त ऑपरेटर कहा जाता है।
चोसपंडियन

5
इसका एक टर्नरी कंडिशनर ऑपरेटर
पेटा

4
- @Michael अनुभाग देखें (?:) 11.12 सशर्त ऑपरेटर : विनिर्देश के ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
ChaosPandion

7
क्या लोग अभी भी इस सामान पर बहस कर रहे हैं ? गीज़।
BoltClock

7
@ बॉलकॉक - बिल्कुल बहस नहीं, बस हमारी आवश्यक शब्दावली को सामान्य करने की कोशिश कर रहा है।
चोसपंडियन

21

यह Google के लिए थोड़ा कठिन है जब आपके पास सभी प्रतीक हैं;) उपयोग करने की शर्तें "जावास्क्रिप्ट सशर्त ऑपरेटर" हैं।

यदि आप जावास्क्रिप्ट में कोई और अधिक अजीब प्रतीक देखते हैं, तो आपको पहले जावास्क्रिप्ट के ऑपरेटरों को देखने का प्रयास करना चाहिए: एमडीसी के ऑपरेटरों की सूची । आपके द्वारा सामना किए जाने वाले एक अपवाद का $प्रतीक है

अपने प्रश्न का उत्तर देने के लिए, सशर्त संचालक यदि बयान देते हैं, तो साधारण की जगह लेते हैं। एक उदाहरण सबसे अच्छा है:

var insurancePremium = age > 21 ? 100 : 200;

के बजाय:

var insurancePremium;

if (age > 21) {
    insurancePremium = 100;
} else {
    insurancePremium = 200;
}

अच्छी व्याख्या, लेकिन उदाहरण खराब है क्योंकि यह एक बूलियन मूल्य प्रदान कर रहा है जो बूलियन अभिव्यक्ति के परिणाम पर निर्भर करता है, जो कि बहुत कम है। आप इसके बजाय उपयोग करना चाहते हैं var olderThan20 = age > 20;
बालुसक

@ बालसु - हाँ :) मुझे एहसास हुआ कि, लेकिन उदाहरण मेरी टोपी से बाहर निकालना मुश्किल है! एक बेहतर के बारे में सोचेंगे ...
डेविड तांग


7

अधिकांश उत्तर सही हैं लेकिन मैं थोड़ा और जोड़ना चाहता हूं। त्रिगुट ऑपरेटर राइट साहचर्य, जो साधन यह किया जा सकता है श्रृंखलित निम्नलिखित तरीके से if … else-if … else-if … else:

function example() {
    return condition1 ? value1
         : condition2 ? value2
         : condition3 ? value3
         : value4;
}

के बराबर:

function example() {
    if (condition1) { return value1; }
    else if (condition2) { return value2; }
    else if (condition3) { return value3; }
    else { return value4; }
}

अधिक जानकारी यहाँ है


1
यही मैं खोज रहा हूं।
सज़ल दास

6

इसे टर्नरी ऑपरेटर कहा जाता है

tmp = (foo==1 ? true : false);

6
इसे सशर्त ऑपरेटर कहा जाता है। यह भाषा में एक टर्नरी ऑपरेटर का एकमात्र उदाहरण होता है ।
को ऑर्बिट

tmp = foo == 1 एक ही काम करता है, इसलिए यह पर्याप्त होगा
राबर्ट वर्गा

6

टर्नरी ऑपरेटर

आमतौर पर हमारे पास जावास्क्रिप्ट में सशर्त वक्तव्य हैं।

उदाहरण:

if (true) {
    console.log(1)
} 
else {
    console.log(0)
}
# Answer
# 1

लेकिन इसमें दो या दो से अधिक रेखाएँ होती हैं और यह एक चर को निर्दिष्ट नहीं कर सकता है। जावास्क्रिप्ट में इस समस्या के लिए एक समाधान है टर्नरी ऑपरेटर । टर्नेरी ऑपरेटर एक लाइन में लिख सकता है और एक चर को असाइन कर सकता है।

उदाहरण:

var operator = true ? 1 : 0
console.log(operator)
# Answer
# 1

यह टर्नेरी ऑपरेटर सी प्रोग्रामिंग भाषा में समान है।


5

अरे दोस्त बस याद है जे एस काम करता है या तो सही या गलत, सही का मूल्यांकन करके?

चलो एक सहायक ऑपरेटर ले:

questionAnswered ? "Awesome!" : "damn" ;

सबसे पहले, js जाँच करता है कि क्या प्रश्नवाचक है trueया नहीं false

अगर true( ?) आप "भयानक!"

और ( :) आपको "लानत" मिलेगी;

आशा है कि यह दोस्त की मदद करता है :)


2

यह if statementसब एक लाइन पर है।

इसलिए

var x=1;
(x == 1) ? y="true" : y="false";
alert(y);

मूल्यांकन किया जाना अभिव्यक्ति में है ( )

यदि यह सच से मेल खाता है, तो कोड को निष्पादित करें ?

यदि यह गलत है, तो कोड को निष्पादित करें :


var x = 1; y = (x == 1)? सही गलत;
अगुरोन


1

यह कहा जाता है ternary operator। कुछ और जानकारी के लिए, इस संबंध में एक और सवाल मैंने यहां दिया:

'और ’के बिना IF इफ स्टेटमेंट कैसे लिखें


4
दरअसल टर्नरी ऑपरेटर का प्रकार है (अर्थात इसके 3 भाग हैं)। उस विशिष्ट टर्नरी ऑपरेटर का नाम है conditional operator। जेएस में केवल एक ही टर्नरी ऑपरेटर होता है, इसलिए शर्तों का दुरुपयोग होता है।
कोडिंग हो गई

1

यह शायद ऐसा करने का सबसे सुंदर तरीका नहीं है। लेकिन किसी ऐसे व्यक्ति के लिए जो टर्नरी ऑपरेटरों से परिचित नहीं है, यह उपयोगी साबित हो सकता है। मेरी व्यक्तिगत प्राथमिकता शर्त-ब्लॉक के बजाय 1-लाइनर कमियां करना है।

  // var firstName = 'John'; // Undefined
  var lastName = 'Doe';

  // if lastName or firstName is undefined, false, null or empty => fallback to empty string
  lastName = lastName || '';
  firstName = firstName || '';

  var displayName = '';

  // if lastName (or firstName) is undefined, false, null or empty
  // displayName equals 'John' OR 'Doe'

  // if lastName and firstName are not empty
  // a space is inserted between the names
  displayName = (!lastName || !firstName) ? firstName + lastName : firstName + ' ' + lastName;


  // if display name is undefined, false, null or empty => fallback to 'Unnamed'
  displayName = displayName || 'Unnamed';

  console.log(displayName);

टर्नरी ऑपरेटर


1

हम Jquery के साथ-साथ नीचे के उदाहरण के साथ लंबाई का उपयोग कर सकते हैं:

मान लीजिए कि हमारे पास गारंटर नाम का टेक्स्टबॉक्स है, जिसका मूल्य है और पहले नाम और अंतिम नाम प्राप्त करना चाहते हैं- यह शून्य हो सकता है। तो रथार से

        var gnamesplit = $("#txtGuarantorName").val().split(" ");
        var gLastName = "";
        var gFirstName = "";
        if(gnamesplit.length > 0 ){
           gLastName  = gnamesplit[0];        
        }
        if(gnamesplit.length > 1 ){
           gFirstName = gnamesplit[1];        
        }

हम न्यूनतम कोड के साथ Jquery के नीचे कोड का उपयोग कर सकते हैं

    

    var gnamesplit = $("#txtGuarantorName").val().split(" ");
    var gLastName = gnamesplit.length > 0  ? gnamesplit[0] : "";
    var gFirstName =  gnamesplit.length > 1  ? gnamesplit[1] : "";
    $("#txtLastName").val(gLastName);
    $("#txtFirstName").val(gFirstName);
    
    
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div >
  Guarantor Name: <input type="text" id="txtGuarantorName" value="ASP.NET Core"  /><br/>
  <br/>
  <br/>
  
  First Name: <input type="text" id="txtLastName" value="ASP.NET Core"  />
  Last Name: <input type="text" id="txtFirstName" value="ASP.NET Core"  />
</div>


1

जेएस, विशेष रूप से प्रतिक्रिया में टर्नरी अभिव्यक्ति बहुत उपयोगी है। यहाँ कई अच्छे, विस्तृत लोगों के लिए एक सरलीकृत उत्तर दिया गया है।

condition ? expressionIfTrue : expressionIfFalse

expressionIfTrueयदि कथन सही हो तो ओजी के रूप में सोचें ; दूसरे कथन
के expressionIfFalseरूप में सोचें ।

उदाहरण:

var x = 1;
(x == 1) ? y=x : y=z;

इसने x के मान की जाँच की, पहला y = (मान) लौटाया यदि सही है, तो बृहदान्त्र के बाद दूसरा रिटर्न: y = (मान) यदि गलत है।


0

सशर्त (टर्नरी) ऑपरेटर केवल जावास्क्रिप्ट ऑपरेटर है जो तीन ऑपरेंड लेता है। इस ऑपरेटर को अक्सर if स्टेटमेंट के लिए शॉर्टकट के रूप में उपयोग किया जाता है।

condition ? expr1 : expr2 

यदि स्थिति सही है, तो ऑपरेटर expr1 का मान लौटाता है; अन्यथा, यह expr2 का मान लौटाता है।

function fact(n) {
  if (n > 1) {
    return n * fact(n-1);
  } else {
    return 1;
  }
  // we can replace the above code in a single line of code as below
  //return (n != 1) ? n * fact(n - 1) : 1;
}
console.log(fact(5));

अधिक स्पष्टीकरण के लिए कृपया MDN दस्तावेज़ लिंक पढ़ें


0

यदि आपके पास जावास्क्रिप्ट में एक शर्त जाँच उदाहरण फ़ंक्शन है । टर्नरी ऑपरेटर का उपयोग करना आसान है । जिसे लागू करने के लिए केवल एक ही लाइन की आवश्यकता होगी । उदाहरण के लिए:

    private module : string ='';
    private page:boolean = false;
    async mounted(){
     if(this.module=== 'Main')
    {
    this.page = true;}
    else{
    this.page = false;
    }
}

एक शर्त के साथ इस तरह के एक समारोह के रूप में लिखा जा सकता है।

this.page = this.module=== 'Main' ?true:false;

स्थिति ? अगर सही: अगर गलत


-3
 (sunday == 'True') ? sun="<span class='label label-success'>S</span>" : sun="<span class='label label-danger'>S</span>";

 sun = "<span class='label " + ((sunday === 'True' ? 'label-success' : 'label-danger') + "'>S</span>"

आप html को ternary ऑपरेटर के साथ भी जोड़ सकते हैं
चंद्रशेखर कोमाटी

Thats वास्तव में नहीं है कि आपको टर्नरी असाइनमेंट कैसे लिखना चाहिए और यह भी === not == का उपयोग करें अन्य बुद्धिमान जो आप बस कर सकते हैं sunday ?। यह होना चाहिएsun = "<span class='label " + ((sunday === 'True' ? 'label-success' : 'label-danger') + "'>S</span>"
TheRealMrCrowley

सशर्त टर्नरी का पूरा बिंदु सशर्त असाइनमेंट मानों को छोटा करना है अन्यथा आपको बस एक if स्टेटमेंट का उपयोग करना चाहिए
TheRealMrCrowley

अब मुझे बताओ कि यह सही है या नहीं। अगर आप गलत कहते हैं, तब भी यह काम कर रहा है और मैं अपनी परियोजना का उपयोग कर रहा हूं ..
चंद्रशेखर कोमाटी

मुझे पता है कि यह "काम करता है" आपके पास पहले उदाहरण में यह कैसे है, लेकिन मैंने जो प्रदान किया है, वह दूसरे संस्करण के रूप में है। ध्यान दें कि शीर्ष संस्करण में कितना अनावश्यक दोहराव है बनाम मैंने आपको दिया था। JS वह कोड है जो ब्राउज़र को भेजा जाता है, इसलिए कोड की लंबाई मायने रखती है
TheRealMrCrowley
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.