क्यों (![]+[])[+!![]+[]]
उत्पादन "एक" कदम से
कदम नहीं करता है। प्रथम बिट पहले से ही artemb द्वारा समझाया गया था: []
एक सरणी है। इसे नकारात्मक, ![]
एक बूलियन, false
का मूल्यांकन करता है - यह !
काम करता है जब यह null
या अपरिभाषित किसी चीज़ पर लागू होता है। फिर से artemb द्वारा इंगित, इस +[]
संलग्न करने से बूलियन को एक स्ट्रिंग में परिवर्तित करने के लिए मजबूर करता है। ऐसा इसलिए है क्योंकि +
एक स्ट्रिंग कॉन्सटेनेशन ऑपरेटर है। बूलियन false
को इसके स्ट्रिंग प्रस्तुति में परिवर्तित किया जाता है, "false"
।
फिर, दूसरा बिट, [+!![]+[]]
। सबसे पहले, बाहरी [
और ]
पिछली स्ट्रिंग का इलाज करने के लिए काम करता है, जिसे हम अभी डिवाइव किया गया है, वर्णों की एक सरणी के रूप में "false"
के बराबर है। [
और ]
के अंदर एक पूर्णांक अनुक्रमणिका डालने से, आप एक विशेष अनुक्रमणिका में चरित्र प्राप्त करते हैं। तो क्या रहता है +!![]+[]
इसमें 4 टुकड़े होते हैं: +
, !![]
, +
और []
। पहले !![]
का मूल्यांकन किया गया है।हमने पहले ही देखा है कि ![]
एक बूलियन false
है इसलिए !
को पूर्ववत करना इसे अस्वीकार करता है, और true
उत्पन्न करता है। अगली बात क्या होता है कि +!![]
में +
लागू किया जाता है, और +
लगाने से यह संख्या प्रतिनिधित्व है, जो है 1
(ताकि +true
है 1
) +[]
इस प्रकार है कि एक स्ट्रिंग फिर से कि 1
"1"
उपज लेकिन बनाता में बूलियन true
धर्मान्तरित यह वास्तव में समझ में नहीं आता है, छोटी अभिव्यक्ति (![]+[])[+!![]]
पहले से ही a
उत्पन्न करती है। +[]
को जोड़ना या तो चोट नहीं पहुंचाता है, परिणामी अभिव्यक्ति [1]
के बजाय ["1"]
है। मेरा झटका यह है कि जब []
किसी सरणी पर लागू होता है, जो []
के अंदर जो भी हो, उसे एक संख्या में घुमाया जाएगा, जो "1"
के लिए 1
फिर से देगा। तो या तो रास्ता, +!![]+[]
1
का मूल्यांकन करता है, अंतिम अभिव्यक्ति: "false"[1]
जो कह रहा है: स्ट्रिंग "false"
से इंडेक्स 1 पर वर्ण को चित्रित करें, और डिफ़ॉल्ट रूप से, सरणी जावास्क्रिप्ट में 0
से शुरू होती है, यह "false"
का दूसरा अक्षर है, और a
।
स्रोत
2010-01-20 10:05:58
यदि आप रुचि रखते हैं कि भाषाएं कैसे काम करती हैं, तो इसके लिए एक कंपाइलर लिखना कुछ भी नहीं है - जो मूल रूप से आपको भाषा और इसके आंतरिक सिखाएंगे। – Chii
सभी प्रतिक्रियाओं के लिए धन्यवाद। मुझे पता था कि जावास्क्रिप्ट ने कुछ जादू किया है लेकिन कुछ चीजें जो खतरनाक हैं वह खतरनाक है ... – prafulfillment