ලබා දී ඇති පිළිතුරු වලින් මම ඇත්තටම ව්යාකූල වී සිටිමි - ඒවායින් බොහොමයක් සම්පූර්ණයෙන්ම වැරදිය. ඇත්ත වශයෙන්ම ඔබට නිර්වචනය නොකළ, ශුන්ය හෝ ව්යාජ අගයන් ඇති වස්තු ගුණාංග තිබිය හැකිය. එබැවින් දේපල පරීක්ෂාව අඩු කිරීම typeof this[property]
හෝ ඊටත් වඩා නරක යx.key
ඔබට සම්පූර්ණයෙන්ම නොමඟ යවන ප්රති .ල ලබා දෙනු ඇත.
එය ඔබ සොයන දේ මත රඳා පවතී. යම් වස්තුවක භෞතිකව දේපලක් තිබේදැයි දැන ගැනීමට ඔබට අවශ්ය නම් (එය මූලාකෘති දාමයේ කොතැනක හෝ එන්නේ නැත) එවිට object.hasOwnProperty
යා යුතු මාර්ගයයි. සියලුම නවීන බ්රව්සර් එයට සහය දක්වයි. (සෆාරි - 2.0.1 සහ ඊට වඩා පැරණි අනුවාද වල එය අස්ථානගත වී ඇත, නමුත් බ්රව්සරයේ එම අනුවාදයන් කලාතුරකින් භාවිතා වේ.)
ඔබ සොයන දෙය නම්, යම් වස්තුවක් මත එය නැවත ලබා ගත හැකි දේපලක් තිබේ නම් (ඔබ එම වස්තුවේ ගුණාංග ඉක්මවා යන විට එය දිස්වනු ඇත) එසේ කිරීමෙන්: prop in object
ඔබට අපේක්ෂිත ප්රති give ල ලබා දෙනු ඇත.
භාවිතා hasOwnProperty
කිරීම බොහෝ විට ඔබට අවශ්ය දේ වන අතර, ඔබට ආපසු හැරවීමේ ක්රමයක් අවශ්ය විය හැකි බැවින්, මම ඔබට පහත විසඳුම ඉදිරිපත් කරමි:
var obj = {
a: undefined,
b: null,
c: false
};
// a, b, c all found
for ( var prop in obj ) {
document.writeln( "Object1: " + prop );
}
function Class(){
this.a = undefined;
this.b = null;
this.c = false;
}
Class.prototype = {
a: undefined,
b: true,
c: true,
d: true,
e: true
};
var obj2 = new Class();
// a, b, c, d, e found
for ( var prop in obj2 ) {
document.writeln( "Object2: " + prop );
}
function hasOwnProperty(obj, prop) {
var proto = obj.__proto__ || obj.constructor.prototype;
return (prop in obj) &&
(!(prop in proto) || proto[prop] !== obj[prop]);
}
if ( Object.prototype.hasOwnProperty ) {
var hasOwnProperty = function(obj, prop) {
return obj.hasOwnProperty(prop);
}
}
// a, b, c found in modern browsers
// b, c found in Safari 2.0.1 and older
for ( var prop in obj2 ) {
if ( hasOwnProperty(obj2, prop) ) {
document.writeln( "Object2 w/ hasOwn: " + prop );
}
}
ඉහත දැක්වෙන්නේ hasOwnProperty
එක් අවවාදයක් සමඟ වැඩ කරන, හරස් බ්රව්සරයකි, විසඳුමකි : මූලාකෘතියේ හා නිදසුනක් ලෙස සමාන දේපලක් ඇති අවස්ථා අතර වෙනස හඳුනා ගැනීමට එයට නොහැකි ය - එය උපකල්පනය කරන්නේ එය මූලාකෘතියෙන් එන බවයි. ඔබේ තත්වය මත පදනම්ව ඔබට එය වඩාත් සැහැල්ලු හෝ දැඩි ලෙස වෙනස් කළ හැකිය, නමුත් අවම වශයෙන් මෙය වඩාත් ප්රයෝජනවත් විය යුතුය.