सामान्य वस्तुओं में संपत्ति का आदेश जावास्क्रिप्ट में एक जटिल विषय है।
जबकि ES5 में स्पष्ट रूप से कोई आदेश निर्दिष्ट नहीं किया गया है, ES2015 में कुछ मामलों में एक आदेश है। निम्नलिखित वस्तु है:
o = Object.create(null, {
m: {value: function() {}, enumerable: true},
"2": {value: "2", enumerable: true},
"b": {value: "b", enumerable: true},
0: {value: 0, enumerable: true},
[Symbol()]: {value: "sym", enumerable: true},
"1": {value: "1", enumerable: true},
"a": {value: "a", enumerable: true},
});
इसका परिणाम निम्न क्रम में (कुछ मामलों में) है:
Object {
0: 0,
1: "1",
2: "2",
b: "b",
a: "a",
m: function() {},
Symbol(): "sym"
}
- पूर्णांक जैसी कुंजियाँ आरोही क्रम में
- प्रविष्टि क्रम में सामान्य कुंजी
- सम्मिलन क्रम में प्रतीक
इस प्रकार, तीन खंड हैं, जो प्रविष्टि क्रम को बदल सकते हैं (उदाहरण के रूप में हुआ)। और पूर्णांक की तरह कुंजियाँ प्रविष्टि क्रम पर बिल्कुल नहीं टिकती हैं।
सवाल यह है कि ES2015 की युक्ति में इस आदेश की गारंटी किन तरीकों से दी गई है?
निम्न तरीके दिखाए गए आदेश की गारंटी देते हैं:
- Object.assign
- Object.defineProperties
- Object.getOwnPropertyNames
- Object.getOwnPropertySymbols
- Reflect.ownKeys
निम्नलिखित विधियाँ / छोरें बिना किसी आदेश के गारंटी देती हैं:
- Object.keys
- अंदर के लिए
- JSON.parse
- JSON.stringify
निष्कर्ष: ES2015 में भी आपको जावास्क्रिप्ट में सामान्य वस्तुओं के संपत्ति क्रम पर भरोसा नहीं करना चाहिए। यह त्रुटियों के लिए प्रवण है। Map
इसके बजाय उपयोग करें ।