আমি যে উত্তরগুলি দিয়েছি তা শুনে আমি সত্যিই বিভ্রান্ত হয়ে পড়েছি - তাদের বেশিরভাগই কেবল সম্পূর্ণ ভুল। অবশ্যই আপনার অবজেক্টের বৈশিষ্ট্য থাকতে পারে যা অপরিজ্ঞাত, নাল, বা মিথ্যা মান রয়েছে। সুতরাং কেবল সম্পত্তি তদন্তকে কমিয়ে দেওয়া typeof this[property]বা আরও খারাপ এটি x.keyআপনাকে সম্পূর্ণ বিভ্রান্তিকর ফলাফল দেবে।
এটি আপনি যা খুঁজছেন তার উপর নির্ভর করে। যদি আপনি জানতে চান যে কোনও বস্তুর শারীরিকভাবে কোনও সম্পত্তি রয়েছে কিনা (এবং এটি কোথাও কোথাও থেকে প্রোটোটাইপ চেইনে আসছে না) তবে object.hasOwnPropertyযাওয়ার উপায়। সমস্ত আধুনিক ব্রাউজার এটি সমর্থন করে। (এটি সাফারির পুরানো সংস্করণগুলি - ২.০.১ এবং তার চেয়েও পুরনো ছিল - তবে ব্রাউজারের সেই সংস্করণগুলি খুব কমই ব্যবহৃত হয় rarely)
যদি আপনি যা সন্ধান করছেন তা যদি কোনও বস্তুর এমন কোনও সম্পত্তি থাকে যা পুনরাবৃত্তিযোগ্য হয় (আপনি যখন বস্তুর বৈশিষ্ট্যগুলি নিয়ে পুনরাবৃত্তি করেন, এটি প্রদর্শিত হবে) তখন করছেন: prop in objectআপনাকে আপনার পছন্দসই প্রভাব দেবে।
যেহেতু 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যার সাথে একটি সতর্কতা রয়েছে: এটি অভিন্ন সম্পত্তি প্রোটোটাইপ এবং উদাহরণ হিসাবে যে ক্ষেত্রে পার্থক্য করতে অক্ষম - এটি কেবল ধরে নেয় যে এটি প্রোটোটাইপ থেকে আসছে। আপনি আপনার অবস্থার উপর ভিত্তি করে এটিকে আরও হালকা বা কঠোর হতে শিফট করতে পারেন, তবে খুব কমপক্ষে এটি আরও সহায়ক হওয়া উচিত।