टिप्पणी पर 2014-04-14
यह यहाँ लगता Chrome की console.log
प्रिंट सभी प्रतीक-प्रकार-चाबियाँ, एक उदाहरण है:
var o = {};
o[Symbol.iterator] = function() {};
o[Symbol.unscopables] = {};
var s = Symbol('s');
o[s] = 3;
console.log(o);
प्रिंट जो:
वस्तु {प्रतीक (Symbol.unscopables): ऑब्जेक्ट, प्रतीक (Symbol.iterator): समारोह, प्रतीक (ओं): 3}
मैं नहीं चाहता कि क्यों क्रोम इस तरह से व्यवहार करती है, यह डिबगिंग या कुछ और के लिए है अन्य?
कुल मिलाकर यह toString()
परिणाम को प्रभावित नहीं करता है, इसलिए सभी कोड सुरक्षित हैं।
var o = {};
o[Symbol.unscopables] = {};
console.log(o);
जो आउटपुट:
ऐसा लगता है console.log
विशेष रूप से कंसोल में Symbol.unscopable
कुंजी मुद्रित होगा, हम इस तरह प्रदर्शन करने के लिए एक सादे वस्तु हो सकता है प्रतीक
वस्तु {(Symbol.unscopables): ऑब्जेक्ट}
Symbol.unscopables
प्रतीक एक विशेष प्रतीक @@unscopables
रूप ES6 में परिभाषित किया गया है जो जब इस वस्तु एक with
वातावरण में काम करता है कुछ गुण को छोड़कर के लिए इस्तेमाल किया जाता है, आधिकारिक विवरण है:
एक वस्तु मूल्यवान संपत्ति जिनकी संपत्ति के नाम संपत्ति हैं नाम जो संबंधित वस्तु के पर्यावरण बाइंडिंग के साथ बाहर रखा गया है।
एक साधारण उदाहरण:
var o = {x: 1, y: 2};
o[Symbol.unscopables] = {
y: true
};
console.log(o.x); // 1
console.log(o.y); // 2
with(o) {
console.log(x); // 1
console.log(y); // ReferenceError: y is not defined
}
आप Array.prototype[Symbol.unscopables]
उपयोग कर सकते हैं सभी कुंजियों जो with
वातावरण में नहीं किया जा सकता को खोजने के लिए
हालांकि अभी भी एक Array.prototype
के उत्पादन में नहीं बिल्कुल के रूप में एक ही है Symbol.unscopables
कुंजी के साथ एक सादा वस्तु, यह [Symbol(Symbol.unscopables): Object]
आउटपुट करता है, जो एक सरणी
नहीं कर सकता है बिल्कुल बताएं कि यह Symbol.toStringTag
से संबंधित हो सकता है जो नियंत्रित करता है कि स्ट्रिंग के लिए ऑब्जेक्ट को कैसे स्वरूपित किया जाना चाहिए, लेकिन क्रोम वर्तमान में इस प्रतीक को निर्यात नहीं करता है, इसलिए
का परीक्षण करना कठिन है 'न्यूनतम उदाहरण' console.log ([] .__ proto __) 'जो आपको बताता है कि आप जिस ब्राउज़र का उपयोग कर रहे हैं, जो शायद क्रोम है, अब आंतरिक रूप से नए प्रतीक प्रकार के साथ' ऐरे .__ proto__' को परिभाषित करता है। – adeneo
सच है। मुझे याद आया क्योंकि मैंने अभी '[] .__ proto__' इनपुट किया है जो [] के रूप में प्रिंट करता है। मैं जानता हूं कि कंसोल कंसोल नहीं करता है। इसके परिणाम लॉग करें। – spelufo
उस नोट पर, यह अजीब बात है कि कंसोल प्रिंट 'अपरिभाषित' में '{}' दर्ज करना और '{x: 3} 'आउटपुट' 3' दर्ज करना। – spelufo