क्या मुझे उपयोग करना चाहिए (टाइपोफ (वैल) === 'अपरिभाषित') या (वैल === अपरिभाषित)? जावास्क्रिप्ट

यह SO पर कई अन्य प्रश्नों के समान है, लेकिन जैसा कि मैं पा सकता हूं उतना ही वही नहीं।

जावास्क्रिप्ट में एक अनिर्धारित मूल्य की जांच के लिए सबसे अच्छा तरीका कौन सा है, और क्यों?

पहला उदाहरण:

var a;
if (typeof(a) === "undefined"){...}

दूसरा उदाहरण:

var a;
if (a === undefined){...}

तो, पहला उदाहरण नाम की तुलना कर रहा हैएक स्ट्रिंग के लिए प्रकार, और दूसरा वैरिएबल ऑपरेटर का उपयोग करके, अपरिपक्व ऑब्जेक्ट में चर की तुलना कर रहा है, जो जांचता है कि प्रकार समान हैं और साथ ही मान भी हैं।

कौनसा अच्छा है? या वे दोनों एक दूसरे के रूप में अच्छे हैं?

ध्यान दें कि मैं अपरिभाषित और शून्य, या सच्चाई या झूठी के बीच किसी भी अंतर के बारे में नहीं पूछ रहा हूं, इन दोनों तरीकों में से कौन सा सही और / या बेहतर है।

उत्तर:

जवाब के लिए 9 № 1

यदि कोई चर "" मौजूद नहीं है, तो आप इसका उपयोग करने का प्रयास करते समय संदर्भ त्रुटि प्राप्त करेंगे - भले ही आप इसकी तुलना कर रहे हों undefined। तो हमेशा उपयोग करें typeof

> foo === undefined
ReferenceError: foo is not defined
at repl:1:2
at REPLServer.eval (repl.js:80:21)
at Interface.<anonymous> (repl.js:182:12)
at Interface.emit (events.js:67:17)
at Interface._onLine (readline.js:162:10)
at Interface._line (readline.js:426:8)
at Interface._ttyWrite (readline.js:603:14)
at ReadStream.<anonymous> (readline.js:82:12)
at ReadStream.emit (events.js:88:20)
at ReadStream._emitKey (tty.js:320:10)
> typeof foo === "undefined"
true

ओवरराइट करने के लिए (खराब) कोड भी संभव है undefined, जो एक अपरिभाषित मान के बराबर नहीं होगा undefined


उत्तर № 2 के लिए 1

The undefined एक मूल्य सौंपा जा सकता है, और प्रकार की जांच जीत "टी काम ।जब तक कि कोड का स्कोप सुरक्षित न हो, उदा.

(function(undefined){
var a;
if (a === undefined) {
})();
// note called without parameter, so undefined is actually an undefined value

इस तरह की जांच करने के लिए सुरक्षित नहीं है, और पहले एक है पसंद

संपादित करें: ऐसा लगता है कि ECMA 5 अपरिभाषित के लिए मूल्य निर्दिष्ट dissalows, लेकिन अभी भी यह ब्राउज़र कार्यांवयन पर निर्भर करता है ।


जवाब के लिए 0 № 3

दो विधियां सही हैं, लेकिन typeof एक के मूल्य में परिवर्तन करने के लिए प्रतिरक्षा है undefined. यदि आप सख्त जांच की जरूरत है, का उपयोग करें typeof()

ECMA 3 मानक में, आप जैसे अनिर्धारित के मान को संशोधित कर सकते हैं:

undefined = "not undefined";

और यह कुरूपता जब तुलना करने के लिए नेतृत्व कर सकते है undefined बाद में । ECMA 5 में, यह अस्वीकृत है । इसका मतलब है कि सबसे आधुनिक ब्राउज़रों आप के मूल्य निर्धारित नहीं होने देंगे undefined, और आप का उपयोग कर सुरक्षित होना चाहिए === undefined

इसके अलावा, यदि आप "नहीं भी यकीन है कि क्या चर आप जांच कर रहे है परिभाषित किया गया है, तो आप का उपयोग करना चाहिए typeof, अंयथा आप एक संदर्भ त्रुटि मिल जाएगा ।


संबंधित सवाल
सबसे लोकप्रिय