2011-04-14 23 views
16

मैं क्रोम कंसोल में इस प्रश्नोत्तरी को आजमा रहा हूं: Quiz"अपरिभाषित" और अपरिभाषित के बीच क्या अंतर है?

मैं उनमें से अधिकतर कोशिश करने के बाद कुछ हद तक समझा सकता हूं। लेकिन एक बात मुझे confuses:

var x = [typeof x, typeof y][1]; 
    typeof typeof x; 

.... रिटर्न "स्ट्रिंग" है, जो मेरे लिए कोई मतलब नहीं है।

var x = [typeof x, typeof y][1]; 

रिटर्न "अपरिभाषित"

typeof "undefined"

रिटर्न "स्ट्रिंग" है, जो कुछ समझ में आता है क्योंकि अपरिभाषित उद्धरण में था। लेकिन कुल मिलाकर, मुझे अपरिभाषित के साथ सह-अस्तित्व में "अपरिभाषित" का उद्देश्य नहीं दिखाई देता है। इसके अलावा, यह किस तरह का सरणी वाक्यविन्यास है? "जावास्क्रिप्ट द गुड पार्ट्स" का कहना है कि कोई बहुआयामी सरणी नहीं है।

+0

जांच यह पता पता है कि कैसे अपरिभाषित दायरे से संबंधित है https://codepen.io/grumpy/post/undefined-scope-in-javascript –

उत्तर

30
  1. undefined वास्तव में अधिकांश स्थितियों में window.undefined है। यह सिर्फ एक चर है।
  2. window.undefined होता परिभाषित नहीं किया जा करने के लिए जब तक कि कोई यह परिभाषित करता है (undefined = 1 कोशिश करते हैं और typeof undefined"number" हो जाएगा)।
  3. typeofएक ऑपरेटर है कि हमेशा एक मान के प्रकार का वर्णन करते हुए एक स्ट्रिंग देता है।
  4. typeof window.undefined आपको "undefined" देता है - फिर, केवल एक स्ट्रिंग।
  5. typeof "undefined""string" देता है, जैसे typeof "foo" होगा।
  6. इसलिए, "string" देता है।

इस वाक्य रचना के संबंध में:

[1, 2][1]; 

एक बहु-आयामी सरणी नहीं है यही कारण है कि - यह महज एक सरणी पहले arr = [1, 2] पैदा कर रही है, और फिर इसे से तत्व 1 का चयन: arr[1]

1

"undefined" एक स्ट्रिंग (शाब्दिक), अपरिभाषित EHR है ... undefined

var x = [typeof x, typeof y][1] माना जाता है कि (typeof y से) स्ट्रिंग "undefined" देता है। अब अगर आप typeof "undefined" के लिए पूछते हैं, तो यह स्ट्रिंग "string" देता है। और यदि आप typeof "string" के लिए पूछते हैं तो यह (दोबारा) "string" संभोग करता है।

यह कहना सुरक्षित है कि typeof [anything] हमेशा एक स्ट्रिंग (शाब्दिक) देता है, इसलिए typeof typeof something हमेशा "स्ट्रिंग" होगा।

+1

मुझे लगता है कि यह है कि "अनिर्धारित" कहने के लिए उपयोगी है के रूप में एक स्ट्रिंग शाब्दिक है यह उद्धरण में है – sdm350

2

undefined एक वैश्विक है जो डिफ़ॉल्ट रूप से अपरिभाषित है।

typeof ऑब्जेक्ट के प्रकार का वर्णन करने वाली स्ट्रिंग देता है।

तो:

[typeof x, typeof y][1]; 
[typeof undefined, typeof undefined][1]; 
["undefined", "undefined"][1]; 
"undefined" 

typeof "undefined" == "string" 
typeof undefined == "undefined" 
typeof 1 == "number" 
typeof {} == "object" 

इसके अलावा, सरणी वाक्य रचना किस तरह का है?

यह अंत पर एक सरणी [1] साथ शाब्दिक तो यह सूचकांक 1.

में ऑब्जेक्ट है "जावास्क्रिप्ट अच्छा पार्ट्स" कहते हैं कोई बहुआयामी सरणियों देखते हैं कि।

नहीं हैं, लेकिन एक सरणी में अन्य सरणी हो सकती हैं। यह एक हालांकि नहीं है।

1

वाह, यह समझाने के लिए एक कठिन है। "टाइपोफ" ऑपरेटर एक स्ट्रिंग देता है, जो इसके ऑपरेंड के प्रकार का वर्णन करता है। तो:

typeof undefined 

स्ट्रिंग रिटर्न "अनिर्धारित", और

typeof typeof undefined 

रिटर्न स्ट्रिंग "स्ट्रिंग" है, जो तार का "अनिर्धारित" प्रकार है। मुझे लगता है कि यह भ्रमित है क्योंकि अपरिभाषित एक प्रकार और एक मूल्य दोनों है।

दूसरा भाग: वास्तव में जावास्क्रिप्ट में कोई बहुआयामी सरणी (जैसे) नहीं हैं। इस एक्सप्रेशन में:

var x = [typeof x, typeof y][1]; 

वर्ग कोष्ठक का पहला सेट शाब्दिक एक सरणी 2 तत्वों से मिलकर है। स्क्वायर ब्रैकेट का दूसरा सेट उस सरणी के तत्व 1 का संदर्भ देता है (टाइपो वाई)। ताकि अभिव्यक्ति प्रभावी रूप से इस के बराबर है:

var x = typeof y; 
1
  1. [typeof x, typeof y], जैसे ["string", "number"] या संभवतः ["undefined", "undefined"] एक सामान्य कुछ सरणी युक्त x और y के प्रकार पर निर्भर करता है।
  2. x = ["string", "number"][1] उस सरणी का दूसरा तत्व लेता है और इसे x पर निर्दिष्ट करता है।
  3. typeof x स्ट्रिंग "string" के रूप में x का प्रकार देता है।
  4. typeof "string""string" है।

"undefined" और undefined के बीच क्या अंतर है: एक स्ट्रिंग है, दूसरा ऑब्जेक्ट है। typeof हमेशा एक स्ट्रिंग के रूप में चर के प्रकार को लौटाता है, क्योंकि आप undefined को किसी अन्य चीज़ को फिर से परिभाषित कर सकते हैं ताकि आप इसकी तुलना ठीक से नहीं कर सकें, लेकिन "undefined" == "undefined" हमेशा सत्य है।

संबंधित मुद्दे