डबल इक्वल्स (==) - अब्स्ट्रैक्ट इक्वलिटी
== टाइप कन्वर्जन (कोएरशन) के बाद तुलना करता है। ऑपरेंड्स को समान टाइप में बदलता है फिर तुलना करता है।
ट्रिपल इक्वल्स (===) - स्ट्रिक्ट इक्वलिटी
=== टाइप कन्वर्जन नहीं करता। वैल्यू और टाइप दोनों समान होने चाहिए।
ऑब्जेक्ट तुलना
तुलना व्यवहार String == Number String → Number Boolean == Anything Boolean → Number (true=1, false=0) Object == Primitive Object → Primitive (valueOf/toString) null == undefined true (विशेष केस) null/undefined == अन्य false आश्चर्यजनक == परिणाम
सिफारिश: हमेशा === उपयोग करें
- पूर्वानुमेय: कोई छिपा हुआ कन्वर्जन नहीं
- तेज़: कन्वर्जन ओवरहेड नहीं
- बग-मुक्त:
[] == falseजैसे आश्चर्य नहीं - स्पष्ट इरादा: कोड पढ़ने वाला समझता है कि सटीक मिलान चाहिए
अपवाद: null/undefined चेक
// .eslintrc
{
"rules": {
"eqeqeq": ["error", "always", { "null": "ignore" }]
}
}
// eqeqeq: "always" - === लागू करता है
// null: "ignore" - == null अनुमति देता है