ඉක්මන් පිළිතුර
ජාවාස්ක්රිප්ට් වස්තුවක හෝ අරාවක කිසියම් යතුරක් තිබේදැයි පරීක්ෂා කරන්නේ කෙසේද? යතුරක් නොපවතින අතර මම එයට ප්රවේශ වීමට උත්සාහ කළහොත් එය අසත්යයක් වේවිද? නැත්නම් දෝෂයක් විසි කරන්නද?
(සහායක) අරාව ශෛලිය හෝ වස්තු ශෛලිය භාවිතා කර නැතිවූ දේපලකට කෙලින්ම ප්රවේශ වීමෙන් නිර්වචනය නොකළ නියතයක් ලැබෙනු ඇත .
මන්දගාමී සහ විශ්වසනීය දී සමාගම සහ hasOwnProperty ක්රමය
මිනිසුන් දැනටමත් මෙහි සඳහන් කර ඇති පරිදි, ඔබට “නිර්වචනය නොකළ” නියතයක් හා සම්බන්ධ දේපලක් සහිත වස්තුවක් තිබිය හැකිය.
var bizzareObj = {valid_key: undefined};
එවැනි අවස්ථාවක දී, ඔබ භාවිතා කිරීමට සිදු වනු ඇත hasOwnProperty හෝ දී ප්රධාන ඇත්තටම තිබේ නම් දැන ගැනීමට ක්රියාකරු. නමුත්, නමුත් කුමන මිලකටද?
ඉතින්, මම ඔබට කියමි ...
දී සමාගම සහ hasOwnProperty ජාවාස්ක්රිප්ට් භාවිතා ඉඩකඩම් Descriptor යාන්ත්රණයක් (ජාවා භාෂාවෙන් ජාවා පිළිබිඹු සමාන) ඒ 'ක්රම' වේ.
http://www.ecma-international.org/ecma-262/5.1/#sec-8.10
නම් කරන ලද දේපල ගුණාංග හැසිරවීම සහ ප්රතිසංස්කරණය කිරීම පැහැදිලි කිරීම සඳහා දේපල විස්තර වර්ගය භාවිතා කරයි. දේපල විස්තර කිරීමේ වර්ගයේ අගයන් නම් කර ඇති ක්ෂේත්ර වලින් සමන්විත වන අතර එහිදී එක් එක් ක්ෂේත්රයේ නම ගුණාංග නාමයක් වන අතර එහි අගය 8.6.1 හි නිශ්චිතව දක්වා ඇති අනුරූපී ගුණාංග අගයකි. ඊට අමතරව, ඕනෑම ක්ෂේත්රයක් පැවතිය හැකිය.
අනෙක් අතට, වස්තු ක්රමයක් හෝ යතුරක් ඇමතීමෙන් ජාවාස්ක්රිප්ට් [[ලබා ගන්න]] යාන්ත්රණය භාවිතා වේ. එය බොහෝ වේගවත් ය!
මිණුම් ලකුණ
http://jsperf.com/checking-if-a-key-exists-in-a-javascript-array
.
ක්රියාකරු තුළ
භාවිතා
කිරීමvar result = "Impression" in array;
ප්රති result ලය විය
12,931,832 ±0.21% ops/sec 92% slower
HasOwnProperty භාවිතා කිරීම
var result = array.hasOwnProperty("Impression")
ප්රති result ලය විය
16,021,758 ±0.45% ops/sec 91% slower
මූලද්රව්ය වලට කෙලින්ම ප්රවේශ වීම (වරහන් ශෛලිය)
var result = array["Impression"] === undefined
ප්රති result ලය විය
168,270,439 ±0.13 ops/sec 0.02% slower
මූලද්රව්ය වලට කෙලින්ම ප්රවේශ වීම (වස්තු ශෛලිය)
var result = array.Impression === undefined;
ප්රති result ලය විය
168,303,172 ±0.20% fastest
සංස්කරණය කරන්න: දේපලකට undefined
වටිනාකම පැවරීමට හේතුව කුමක්ද?
එම ප්රශ්නය මට ප්රහේලිකාවක්. ජාවාස්ක්රිප්ට් හි, මෙවැනි ගැටළු වළක්වා ගැනීම සඳහා නොපැමිණෙන වස්තූන් සඳහා අවම වශයෙන් යොමු දෙකක් තිබේ: null
සහ undefined
.
null
කිසියම් වස්තු වටිනාකමක් හිතාමතාම නොපැවතීම හෝ කෙටියෙන් කිවහොත් තහවුරු කළ අගය නොමැතිකම නියෝජනය කරන ප්රාථමික අගය වේ. අනෙක් අතට, undefined
නොදන්නා අගය (අර්ථ දක්වා නැත). පසුව සමග භාවිතා කල බව නව දේපළක් තිබේ නම් නිසි අගය භාවිතා සලකා null
සඳහනක් වෙනුවට undefined
ආරම්භක මොහොතේ දේපල නිසා තහවුරු අගය නොලැබීයාමට.
සසඳන්න:
var a = {1: null};
console.log(a[1] === undefined); // output: false. I know the value at position 1 of a[] is absent and this was by design, i.e.: the value is defined.
console.log(a[0] === undefined); // output: true. I cannot say anything about a[0] value. In this case, the key 0 was not in a[].
උපදෙස් දෙන්න
undefined
වටිනාකම් සහිත වස්තු වලින් වළකින්න . හැකි සෑම විටම කෙලින්ම පරීක්ෂා null
කර දේපල අගයන් ආරම්භ කිරීමට භාවිතා කරන්න. එසේ නොමැතිනම් මන්දගාමී in
ක්රියාකරු හෝ hasOwnProperty()
ක්රමය භාවිතා කරන්න.
සංස්කරණය කරන්න: 12/04/2018 - කිසිසේත් අදාළ නොවේ
මිනිසුන් අදහස් දක්වා ඇති පරිදි, ජාවාස්ක්රිප්ට් එන්ජින් වල නවීන අනුවාදයන් (ෆයර්ෆොක්ස් හැර) ප්රවේශ ගුණාංග සඳහා ප්රවේශය වෙනස් කර ඇත. වර්තමාන ක්රියාත්මක කිරීම මෙම විශේෂිත අවස්ථාව සඳහා පෙර පැවති ක්රියාවලියට වඩා මන්දගාමී වන නමුත් ප්රවේශ යතුර සහ වස්තුව අතර වෙනස නොසලකා හැරිය හැකිය.