JavaScript හි for-in පුඩුවක් සමඟ අරාවක් පුඩුවන් කිරීමේ දෝෂය
අරාවක් පුඩුවන් කිරීම සඳහා
for-of පුඩුව භාවිතා කළ යුතුය.
කෙසේ වෙතත්, සමහර විට ආරම්භකයන් වැරදියට
for-in පුඩුව යොදා ගැනීමට උත්සාහ කරයි.
අපි මෙම දෝෂයේ සුලභ ලක්ෂණ දෙස බලමු.
අප සතුව පහත අරාව ඇතැයි සිතමු:
let arr = ['a', 'b', 'c'];
අපි මෙම අරාවේ මූලද්රව්ය පුඩුවන් කර ඒවා එක් තන්තුවකට ලියමු.
යම් ප්රෝග්රාමර් කෙනෙක් මෙම කාර්යය විසඳා ඇත,
නමුත් වැරදියට for-in පුඩුව භාවිතා කර ඇත.
ඔහුට ලැබුණු ප්රතිඵලය අපි බලමු:
let res = '';
for (let elem in arr) {
res += elem;
}
console.log(res); // '012' ප්රතිදානය කරයි
එබැවින්, ප්රතිඵලය වන්නේ 'abc' නොව
'012' තන්තුවයි. මෙය සිදු වූයේ මන්දැයි
අපි විමසා බලමු.
අරාවක් හැරවීම සඳහා for-in
පුඩුව භාවිතා කළ හැක්කේ ඇයි? හේතුව වන්නේ
JavaScript හි අරාවක් වස්තුවක විශේෂ අවස්ථාවක්
වීමයි. එම නිසා ඇත්ත වශයෙන්ම
මෙය නිවැරදි කේතයකි. නමුත් මෙය කිරීම
නුසුදුසුය.
හේතුව වන්නේ, සමහර තත්ව යටතේ,
for-in පුඩුව
අමතර දේවල් සමඟ ඇලී ගොස්,
අරාවේ මූලද්රව්ය හැර වෙනත්
අවාසිදායක දේවල්ද පුඩුවන් කිරීමේදී ලබා ගත හැකි වීමයි.
අරා පුඩුවන් කරන්නේ කෙලින්ම for-of
පුඩුවෙන් පමණි.
අපි දැන් එවැනි අමුතු ප්රතිඵලයක්
අපට දකින්නේ ඇයි යන්න විමසා බලමු. හේතුව වන්නේ
for-in පුඩුවෙන් පුඩුවන් කිරීමේදී
ඇත්ත වශයෙන්ම elem විචල්යයට
ලැබෙන්නේ යතුරු වන අතර,
මෙම විචල්යයේ නම විසින් ඇති කරන උඩුගත කිරීම අනුමත නොවේ.
දැන් අපි සිදු කරන ලද වැරදි නිවැරදි කර නිවැරදි කේතය ලියමු:
let arr = ['a', 'b', 'c'];
let res = '';
for (let elem of arr) {
res += elem;
}
console.log(res); // 'abc' ප්රතිදානය කරයි