මම මේක මෙතනින් ගත්තා
නිර්වචනය නොකළ අගය යනු විචල්යයකට අගයක් පවරා නොමැති විට භාවිතා කරන ප්රාථමික අගයකි.
ශුන්ය අගය යනු ශුන්ය, හිස් හෝ නොපවතින යොමු දැක්වීමක් නියෝජනය කරන ප්රාථමික අගයකි.
ඔබ var හරහා විචල්යයක් ප්රකාශ කර එයට අගයක් ලබා නොදෙන විට, එහි අගය නිර්වචනය නොකෙරේ. ඔබ විසින්ම WScript.Echo () හෝ මෙම අගය දැනුම් දීමට උත්සාහ කළහොත් ඔබට කිසිවක් නොපෙනේ. කෙසේ වෙතත්, ඔබ එයට හිස් නූලක් එකතු කළහොත් හදිසියේම එය දිස්වනු ඇත:
var s;
WScript.Echo(s);
WScript.Echo("" + s);
ඔබට විචල්යයක් ප්රකාශ කළ හැකිය, එය ශුන්ය ලෙස සකසන්න, සහ හැසිරීම අනන්ය වන්නේ “ශුන්ය” මුද්රණය කර “නිර්වචනය නොකළ” ලෙසට ය. මෙය ඇත්ත වශයෙන්ම කුඩා වෙනසක්.
ඔබට නිර්වචනය නොකළ විචල්යයක් ශුන්ය හෝ අනෙක් අතට සංසන්දනය කළ හැකි අතර තත්වය සත්ය වනු ඇත:
undefined == null
null == undefined
කෙසේ වෙතත් ඒවා විවිධ වර්ග දෙකක් ලෙස සැලකේ. නිර්වචනය නොකළ සියල්ලම තමාටම ආවේණික වූවක් වුවද, ශුන්යය විශේෂ වස්තු අගයක් ලෙස සැලකේ. ටයිප් ඔෆ් () භාවිතා කිරීමෙන් ඔබට මෙය දැකිය හැකි අතර එය විචල්යයක සාමාන්ය වර්ගය නියෝජනය කරන නූලක් ලබා දෙයි:
var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));
ඉහත ස්ක්රිප්ට් ධාවනය කිරීමෙන් පහත ප්රතිදානය ලැබෙනු ඇත:
undefined
object
ඔවුන් විවිධ වර්ගයන් නොතකා, ඔබ එක් සාමාජිකයෙකු වෙත ප්රවේශ වීමට උත්සාහ කළහොත් ඒවා තවමත් ක්රියාත්මක වේ, උදා: ඔවුන් ව්යතිරේකයක් දමනු ඇතැයි කියනු ලැබේ. WSH සමඟ භයානක "" නම "ශුන්ය හෝ වස්තුවක් නොවන බව ඔබට පෙනෙනු ඇති අතර එය ඔබ වාසනාවන්ත නම් (නමුත් එය වෙනත් ලිපියකට මාතෘකාවක් වේ).
ඔබට විචල්යයක් නිර්වචනය කළ නොහැකි ලෙස සැකසිය හැකිය, නමුත් මම එයට එරෙහිව දැඩි ලෙස උපදෙස් දෙමි. මම ඔබට නිර්දේශ කරන්නේ විචල්යයන් ශුන්ය කිරීමට සහ ඔබට සැකසීමට අමතක වූ දේවල් සඳහා වටිනාකම නිර්වචනය නොකිරීමට පමණි. ඒ අතරම, සෑම විචල්යයක්ම සෑම විටම සැකසීමට මම ඔබව දිරිමත් කරමි. ජාවාස්ක්රිප්ට් හි සී-ශෛලීය භාෂාවන්ට වඩා වෙනස් විෂය පථයක් ඇති අතර, ප්රවීණ ක්රමලේඛකයින් පවා පහසුවෙන් ව්යාකූල කරයි, සහ විචල්යයන් ශුන්යයට සැකසීම එය මත පදනම් වූ දෝෂ වළක්වා ගත හැකි හොඳම ක්රමයයි.
මකාදැමීමේ ක්රියාකරු භාවිතා කරන විට නිර්වචනය නොකළ උත්පතන ඔබ දකින තවත් අවස්ථාවක්. සී ලෝකයක සිටින අපට මෙය වස්තුවක් විනාශ කිරීමක් ලෙස වැරදියට අර්ථකථනය කළ හැකි නමුත් එය එසේ නොවේ. මෙම මෙහෙයුම කරන්නේ අරාවකින් හෝ සාමාජිකයෙකුගෙන් වස්තුවකින් දායකත්වයක් ඉවත් කිරීමයි. අරා සඳහා එය දිගට බලපාන්නේ නැත, නමුත් එම දායකත්වය දැන් නිර්වචනය කර නැත.
var a = [ 'a', 'b', 'c' ];
delete a[1];
for (var i = 0; i < a.length; i++)
WScript.Echo((i+".) "+a[i]);
ඉහත පිටපතෙහි ප්රති result ලය:
0.) a
1.) undefined
2.) c
කිසි විටෙකත් නොතිබූ දායකත්වයක් හෝ සාමාජිකයෙකු කියවීමේදී ඔබට නිර්වචනය නොකළ ප්රතිලාභ ලැබෙනු ඇත.
ශුන්ය හා නිර්වචනය නොකළ වෙනස නම්: ජාවාස්ක්රිප්ට් කිසි විටෙකත් ශුන්ය කිරීමට කිසිවක් සකසන්නේ නැත, සාමාන්යයෙන් අප කරන්නේ එයයි. අපට විචල්යයන් නිර්වචනය නොකළ ලෙස සැකසිය හැකි නමුත්, අපි ශුන්යයට වැඩි කැමැත්තක් දක්වන්නේ එය අප වෙනුවෙන් මෙතෙක් කර ඇති දෙයක් නොවන බැවිනි. ඔබ නිදොස්කරණය කරන විට මෙයින් අදහස් වන්නේ ශුන්ය කිරීමට සකසා ඇති ඕනෑම දෙයක් ඔබගේම ක්රියාවකින් මිස ජාවාස්ක්රිප්ට් වලින් නොවන බවයි. ඉන් ඔබ්බට, මෙම විශේෂ අගයන් දෙක ආසන්න වශයෙන් සමාන වේ.
null
JavaScript අගය?