সাধারণ বিষয়গুলিতে সম্পত্তি অর্ডার জাভাস্ক্রিপ্টে একটি জটিল বিষয়।
যদিও 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
পরিবর্তে ব্যবহার করুন।