javascript Reflect.ownKeys(obj) और Object.keys(obj) के बीच अंतर क्या है?




ecmascript-6 es2015 (3)

उन्हें एक वास्तविक साधारण मामले में जांचने से एक ही आउटपुट उत्पन्न होता है:

const obj = {a: 5, b: 5};
console.log(Reflect.ownKeys(obj));
console.log(Object.keys(obj));

// Result
['a', 'b']
['a', 'b']

Reflect.ownKeys(obj) Object.keys(obj) से अलग उत्पादन का उत्पादन कब करता है। Object.keys(obj) ?


सबसे पहले, एक उदाहरण ( ईएस 6 एफडेल ):

// getFoo is property which isn't enumerable
var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; } } });
my_obj.foo = 1;

console.log(Object.keys(my_obj)); // console ['foo']
console.log(Reflect.ownKeys(my_obj)); // console ['getFoo', 'foo']

यहां, Reflect.ownKeys() लक्ष्य ऑब्जेक्ट की अपनी संपत्ति कुंजियों की एक सरणी देता है। अर्थात्, सभी गुणों की एक सरणी (गणनीय या नहीं) सीधे दिए गए ऑब्जेक्ट पर मिली सभी प्रतीक गुणों की एक सरणी के साथ जुड़ी हुई वस्तु पर सीधे मिलती है

Object.ownKeys() केवल Object.ownKeys() गुण वापस करेगा

अनगिनत गुण हैं, जो कि प्रोटोटाइप श्रृंखला के माध्यम से विरासत में मिली संपत्तियों के अपवाद के साथ लूप में ... के लिए एक अनुमानित किया जा सकता है। अधिक विवरण के लिए एमडीएन विवरण देखें।

सारांश:

Reflect.ownKeys () Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target)) के समकक्ष है Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target)) जो दोनों गणनीय और गैर-गणनीय गुण वापस करेगा

जहाँ तक

Object.keys () गणनायोग्य गुण देता है लेकिन गैर-गणना योग्य गुण (जो कि Object.getOwnPropertyNames () का एक विशेषता है ) वापस नहीं करता है।


Object.keys() तार की एक array देता है, जो ऑब्जेक्ट की अपनी गणनायोग्य गुण हैं

Reflect.ownKeys(obj) के बराबर लौटाता है:

Object.getOwnPropertyNames(target).
                   concat(Object.getOwnPropertySymbols(target))

Object.getOwnPropertyNames() विधि सभी गुणों की एक सरणी देता है Object.getOwnPropertyNames() या नहीं ) किसी दिए गए ऑब्जेक्ट पर सीधे मिलती है।

Object.getOwnPropertySymbols() विधि किसी दिए गए ऑब्जेक्ट पर सीधे मिले सभी symbol गुणों की एक सरणी देता है।

var testObject;
Object.defineProperty(testObject, 'myMethod', {
    value: function () {
        alert("Non enumerable property");
    },
    enumerable: false
});

//does not print myMethod since it is defined to be non-enumerable
console.log(Object.keys(testObject));   

//prints myMethod irrespective of it being enumerable or not.
console.log(Reflect.ownKeys(testObject)); 

प्रदर्शित करने के लिए एक छोटा सा fiddle


  • Object.keys । कुंजी केवल Object.keys करने योग्य स्ट्रिंग कुंजी देता है; Reflect.ownKeys स्ट्रिंग और प्रतीक कुंजियां उनकी Reflect.ownKeys परवाह किए बिना देता है। दोनों ही अपने गुणों पर ही काम करते हैं।
  • Object.keys एक खाली सरणी देता है, यदि तर्क ऑब्जेक्ट नहीं है और null या undefined (जैसे Object.keys(1) ), जबकि Reflect.ownKeys एक TypeError फेंकता है
  • Reflect.ownKeys को ES6 के साथ पेश किया गया था और पुराने जावास्क्रिप्ट इंजनों में समर्थित नहीं है।




es2015