2012-05-01 20 views
5

निम्न कोड मेंक्यों इस जावास्क्रिप्ट 'अगर ... वरना ...' बयान में कोई तुलना बयान

var $next = $active.next().length ? $active.next() 
     : $('#slideshow IMG:first'); 

हिस्सा है '$ active.next()। लंबाई' प्रतीत नहीं होता किसी भी चीज की तुलना करने के लिए और मुझे समझ में नहीं आता कि स्थिति सही या गलत होने के लिए कैसे निर्धारित की जाती है।

या यह कह रहा है कि: यदि विभिन्न $ अगला $ active.next() लंबाई के बराबर है तो लंबाई सही है?

+0

आप यह पढ़ करना चाहते हो सकता है: http://stackoverflow.com/questions/6766044/understanding-javascript-hoisting-and-truthy-falsy –

+0

एक funkier (और कम से कम फ़ंक्शन कॉल) ऐसा करने का तरीका var $ next = $ ($ active.next() [0] || 'slideshow img: first') होगा; – GillesC

उत्तर

9

जावास्क्रिप्ट में किसी भी अभिव्यक्ति को सच्चाई या गलत मूल्य में परिवर्तित किया जा सकता है और इसलिए तुलनात्मक स्थान पर मान्य है। मान जो जावास्क्रिप्ट में झूठे हैं

  • हैं false
  • 0
  • "" (रिक्त स्ट्रिंग)
  • null
  • undefined
  • NaN

इस मामले में length एक संख्यात्मक मान को संदर्भित करता है और यदि यह 0 का मूल्यांकन करता है तो इसे गलत साबित माना जाएगा। अन्यथा यह सच होगा

5

तो length संपत्ति 0 या undefined (अर्थात $active एक सरणी नहीं है) के बराबर है, हालत false हो जाएगा।

2

यदि $active.next().lengthtrue है, जिसका अर्थ है कि अगला तत्व है, तो $next = $active.next()। अन्यथा $next = $('#slideshow IMG:first')? ऑपरेटर को टर्नरी ऑपरेटर कहा जाता है। यह एक छोटा if else है। ।

if($active.next().length) { 
    $next = $active.next(); 
} 
else { 
    $next = $('#slideshow IMG:first'); 
} 

तो हालत $ active.next() लंबाई जो शून्य या अधिक से अधिक का मान प्रदान करना चाहिए पर आधारित है:

1

यह करने के लिए एक त्रिगुट तुलना बराबर है। शून्य से अधिक कुछ भी, जावास्क्रिप्ट सत्य, शून्य झूठी के रूप में व्याख्या करेगा।

0

आप Ternary opertation पर क्या देख रहे हैं जो कि ... के लिए एक छोटा सा हाथ है ... अन्यथा ... क्या आपने शीर्षक में उल्लेख किया है।

तो आपके कथन का लंबा संस्करण है;

if($active.next().length){ 
$next = $active.next(); 
}else { 
$next = $('#slideshow IMG:first'); 
} 
संबंधित मुद्दे