जावास्क्रिप्ट में गलत मान
false
- के शून्य
Number
के प्रकार: 0
और भी -0
, 0.0
और हेक्स प्रपत्र 0x0
( धन्यवाद RBT )
- शून्य का
BigInt
प्रकार: 0n
और -0n
(2020 में नया, धन्यवाद GetMeARemoteJob )
""
, ''
और ``
- लंबाई के तार ०
null
undefined
NaN
document.all
(केवल HTML ब्राउज़र में)
- यह एक अजीब है।
document.all
एक झूठी वस्तु है, typeof
जैसा कि undefined
। यह IE11 से पहले IE में एक Microsoft- स्वामित्व का कार्य था, और इसे "जावास्क्रिप्ट विनिर्देश के विलफुल उल्लंघन" के रूप में HTML कल्पना में जोड़ा गया था, ताकि IE के लिए लिखी गई साइटें, उदाहरण के लिए, उपयोग करने की कोशिश करने पर टूट न जाएं document.all.something
; यह मिथ्या है क्योंकि if (document.all)
सशर्त टिप्पणियों से पहले IE का पता लगाने के लिए एक लोकप्रिय तरीका हुआ करता था। देखें क्यों दस्तावेज़ है। ब्योरा हेतु
"फाल्सी" का सीधा मतलब है कि जावास्क्रिप्ट का आंतरिक ToBoolean
कार्य वापस आता है false
। ToBoolean
अंडरलाइज़ !value
, value ? ... : ...;
और if (value)
। यहां इसकी आधिकारिक विनिर्देश (2020 के कामकाज का मसौदा) ( 1997 में बहुत पहले ECMAscript विनिर्देश के बाद से केवल ES6 के प्रतीक के अतिरिक्त परिवर्तन हैं , जो हमेशा सत्य होते हैं, और BigInt
, ऊपर उल्लेख किया गया है:
तुलना ==
(ढीली समानता)
यह मिथ्या मूल्यों के साथ तुलना करने के==
बारे में बात करने लायक है , जो ToNumber()
अंतर्निहित मतभेदों के कारण उपयोग करता है और कुछ भ्रम पैदा कर सकता है। वे प्रभावी रूप से तीन समूह बनाते हैं:
false, 0, -0, "", ''
सभी एक दूसरे के साथ मेल खाते हैं ==
- जैसे
false == ""
, '' == 0
और इसलिए4/2 - 2 == 'some string'.slice(11);
null, undefined
साथ मिलाना ==
- जैसे
null == undefined
लेकिनundefined != false
- यह भी उल्लेख के लायक है कि जब तक
typeof null
रिटर्न 'object'
, null
है एक वस्तु नहीं है, यह एक लम्बे समय से बग / मोड़ है कि आदेश संगतता बनाए रखने के लिए तय नहीं किया गया था। यह एक सच्ची वस्तु नहीं है, और वस्तुएं सत्य हैं ( document.all
जब HTML में जावास्क्रिप्ट को लागू किया जाता है तो उस "विलफुल उल्लंघन" को छोड़कर )
NaN
कुछ भी मेल नहीं खाता, ==
या ===
, खुद भी नहीं
- जैसे
NaN != NaN
, NaN !== NaN
, NaN != false
,NaN != null
"सख्त समानता" ( ===
) के साथ, ऐसे समूह नहीं हैं। केवल false
===
false
।
यह एक कारण है कि कई डेवलपर्स और कई स्टाइल गाइड (जैसे मानकज ) पसंद करते हैं ===
और लगभग कभी भी उपयोग नहीं करते हैं ==
।
सत्य मूल्य जो वास्तव में है == false
"ट्रूथी" का सीधा मतलब है कि जावास्क्रिप्ट का आंतरिक ToBoolean
फ़ंक्शन वापस आ जाता है true
। जावास्क्रिप्ट का एक क्विक (और ===
अधिक अच्छा कारण के बारे में पता होना) से अवगत होना==
: एक मूल्य के लिए सत्य ( ToBoolean
रिटर्न true
) होना संभव है , लेकिन यह भी == false
।
आपको लगता if (value && value == false) alert('Huh?')
है कि एक तार्किक असंभवता हो सकती है, लेकिन ऐसा नहीं हो सकता है:
"0"
और '0'
- वे गैर-रिक्त तार हैं, जो सत्य हैं, लेकिन जावास्क्रिप्ट के ==
मिलान समतुल्य तारों (जैसे 42 == "42"
) के साथ होते हैं । के बाद से 0 == false
है, , ।"0" == 0
"0" == false
new Number(0)
और new Boolean(false)
- वे वस्तुएं हैं, जो सत्य हैं, लेकिन ==
उनके मूल्यों को देखता है, जो == false
।
0 .toExponential();
- एक संख्यात्मक मूल्य के साथ एक वस्तु 0
- कोई भी समान निर्माण जो आपको एक प्रकार से लिपटे हुए झूठे-समान मूल्य देता है जो सत्य है
[]
, [[]]
और [0]
( जावास्क्रिप्ट इक्विटी टेबल लिंक के लिए धन्यवाद क्लाउडफीट )
कुछ और सत्य मूल्य
ये केवल कुछ मूल्य हैं जो कुछ लोगों को गलत होने की उम्मीद कर सकते हैं, लेकिन वास्तव में सत्य हैं।
-1
और सभी गैर-शून्य नकारात्मक संख्या
' '
, " "
, "false"
, 'null'
... सब तार कि सिर्फ श्वेत रिक्ति हैं सहित गैर-रिक्त स्ट्रिंग,
कुछ भी typeof
, जो हमेशा एक गैर-रिक्त स्ट्रिंग लौटाता है, उदाहरण के लिए:
किसी भी वस्तु (सिवाय document.all
ब्राउज़रों में "विलफुल उल्लंघन" के ; याद रखें कि null
वास्तव में typeof
अन्यथा सुझाव देने के बावजूद कोई वस्तु नहीं है)। समेत:
{}
[]
function(){}
या () => {}
(कोई भी कार्य, जिसमें खाली कार्य शामिल हैं)
Error
और का कोई भी उदाहरण Error
- कोई नियमित अभिव्यक्ति
new
(सहित new Number(0)
और सहित new Boolean(false)
) कुछ भी बनाया
- कोई भी प्रतीक
true
, 1
, "1"
और [1]
वापसी true
जब साथ एक दूसरे की तुलना ==
।