উত্তর:
আপনি নিম্নলিখিত হিসাবে আপনার বস্তুর বৈশিষ্ট্য লুপ করতে পারেন:
for(var prop in ad) {
if (ad.hasOwnProperty(prop)) {
// handle prop as required
}
}
hasOwnProperty()অবজেক্টটির প্রত্যক্ষ সম্পত্তি হিসাবে নির্দিষ্ট সম্পত্তি রয়েছে কি না এবং অবজেক্টের প্রোটোটাইপ চেইন থেকে উত্তরাধিকার সূত্রে প্রাপ্ত নয় তা নির্ধারণের জন্য পদ্ধতিটি ব্যবহার করা গুরুত্বপূর্ণ ।
মন্তব্যগুলি থেকে: আপনি কোনও কোডটিতে সেই কোডটি রাখতে পারেন এবং মন্তব্যটি যে অংশে পৌঁছেছে ততক্ষণেই এটি মিথ্যা ফিরিয়ে দিতে পারেন
কর্মক্ষমতা পরীক্ষা
অবজেক্ট.কিজ বনামের জন্য পরীক্ষা .. কোনও বৈশিষ্ট্যের পরীক্ষার সময়
Object.keysকরা সবচেয়ে সহজ হবে: var a = [1,2,3];a.something=4;console.log(Object.keys(a))কারণ এটি ইতিমধ্যে ইসিএমএ 5 এর অংশ যা আপনি নিরাপদে এটি চিমিয়ে ফেলতে পারেন: বিকাশকারী.মোজিলা.আর.ইন.ইউএস
Object.defineProperty(obj, 'foo', {enumerable:false, value:'foo'})।
আপনি Object.keysকোনও বস্তুর কীগুলির তালিকা পেতে তার দৈর্ঘ্য পরীক্ষা করতে বিল্ট ইন পদ্ধতিটি ব্যবহার করতে পারেন ।
var x = {};
// some code where value of x changes and than you want to check whether it is null or some object with values
if(Object.keys(x).length > 0){
// Your code here if x has some properties
}
var str = "MyString"; Object.keys(str);, কনসোলটি প্রতিটি চরিত্রের জন্য 0 থেকে 7 পর্যন্ত 8 টি কী আউটপুট করে। বা আমি এখনও উত্তর বুঝতে পারি না।
একটি সাধারণ ফাংশন তৈরি সম্পর্কে কী?
function isEmptyObject(obj) {
for(var prop in obj) {
if (Object.prototype.hasOwnProperty.call(obj, prop)) {
return false;
}
}
return true;
}
isEmptyObject({}); // true
isEmptyObject({foo:'bar'}); // false
hasOwnPropertyপদ্ধতি কল সরাসরি উপর Object.prototypeশুধুমাত্র সামান্য আরো যোগ করার জন্য নিরাপত্তা , একটি স্বাভাবিক ব্যবহার করে নিম্নলিখিত কল্পনা obj.hasOwnProperty(...)কল:
isEmptyObject({hasOwnProperty:'boom'}); // false
দ্রষ্টব্য: (ভবিষ্যতের জন্য) উপরোক্ত পদ্ধতিটি for...inবিবৃতিটির উপর নির্ভর করে এবং এই বিবৃতিটি কেবলমাত্র গণ্যমান্য বৈশিষ্ট্যগুলির উপরে পুনরাবৃত্তি করে, বর্তমানে সর্বাধিক বহুল প্রয়োগিত ইসমাস্ক্রিপ্ট স্ট্যান্ডার্ড (তৃতীয় সংস্করণ) এ প্রোগ্রামারটির অ-গুণযোগ্য বৈশিষ্ট্য তৈরি করার কোনও উপায় নেই ।
তবে এটি এখন ইসমাস্ক্রিপ্টের 5 তম সংস্করণের মাধ্যমে পরিবর্তিত হয়েছে এবং আমরা অণনীয়, অ-লিখিতযোগ্য বা নন-বিযুক্তযোগ্য বৈশিষ্ট্য তৈরি করতে সক্ষম হয়েছি, সুতরাং উপরের পদ্ধতিটি ব্যর্থ হতে পারে , যেমন:
var obj = {};
Object.defineProperty(obj, 'test', { value: 'testVal',
enumerable: false,
writable: true,
configurable: true
});
isEmptyObject(obj); // true, wrong!!
obj.hasOwnProperty('test'); // true, the property exist!!
এই সমস্যার একটি ECMAScript 5 সমাধান হ'ল:
function isEmptyObject(obj) {
return Object.getOwnPropertyNames(obj).length === 0;
}
Object.getOwnPropertyNamesপদ্ধতি আয় একটি Arrayনাম ধারণকারী সব নিজের বৈশিষ্ট্য একটি বস্তু, এর গণনীয় বা না , এই পদ্ধতি ব্রাউজার বিক্রেতাদের দ্বারা প্রতিষ্ঠিত হচ্ছে, এটি ইতিমধ্যে ক্রোম 5 বেটা এবং সর্বশেষ ওয়েবকিট নাইট গুরুত্বপূর্ণ জৈব ফাংশন আছে।
Object.defineProperty এই ব্রাউজারগুলিতে এবং সর্বশেষতম ফায়ারফক্স 3.7 আলফা প্রকাশে উপলব্ধ।
hasOwnPropertyসম্পত্তিকে ওভাররাইড করে তবে ফাংশনটি ক্র্যাশ হয়ে যেতে পারে ... আমি জানি আমি কিছুটা বিড়ম্বনা ... তবে কখনও কখনও আপনি জানেন না যে আপনার কোডটি কোন ধরণের পরিবেশে ব্যবহৃত হবে তবে আপনি আপনি কী পদ্ধতিটি ব্যবহার করতে চান তা আপনি জানেন ...
Object.prototype, এটি দ্বারা অঙ্কিত হয় না for...in। তাই isEmptyObject({toString:1})ব্যর্থ হবে। এটি একটি দুর্ভাগ্যজনক কারণগুলির মধ্যে একটি যা আপনি সাধারণ উদ্দেশ্যে ম্যাপিং হিসাবে বেশ ব্যবহার করতে পারবেন না Object।
সঙ্গে jQuery এর আপনি ব্যবহার করতে পারেন:
$.isEmptyObject(obj); // Returns: Boolean
JQuery 1.4 হিসাবে এই পদ্ধতিটি নিজেই অবজেক্টের উভয় বৈশিষ্ট্য এবং প্রোটোটাইপগুলি থেকে উত্তরাধিকারসূত্রে প্রাপ্ত বৈশিষ্ট্যগুলি পরীক্ষা করে (এতে এটি হ'ল ওপেনপ্রটি ব্যবহার করে না)।
সঙ্গে ECMAScript প্রোগ্রামিং 5 ম সংস্করণ আধুনিক ব্রাউজারে (IE9 + FF4 + Chrome5 + Opera12 + Safari5 + +) আপনি সালে নির্মিত ব্যবহার করতে পারেন Object.keys পদ্ধতি:
var obj = { blah: 1 };
var isEmpty = !Object.keys(obj).length;
বা সাধারণ পুরানো জাভাস্ক্রিপ্ট:
var isEmpty = function(obj) {
for(var p in obj){
return false;
}
return true;
};
সর্বাধিক সাম্প্রতিক ব্রাউজারগুলি (এবং node.js) অবজেক্ট.কিগুলি () সমর্থন করে যা আপনার বস্তুর আক্ষরিক সমস্ত কীগুলির সাথে একটি অ্যারের ফিরিয়ে দেয় যাতে আপনি নিম্নলিখিতটি করতে পারেন:
var ad = {};
Object.keys(ad).length;//this will be 0 in this case
ব্রাউজার সমর্থন: ফায়ারফক্স 4, ক্রোম 5, ইন্টারনেট এক্সপ্লোরার 9, অপেরা 12, সাফারি 5
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
আপনি যদি আন্ডারস্কোর.জে ব্যবহার করছেন তবে আপনি _.আইএসপি ফাংশনটি ব্যবহার করতে পারেন :
var obj = {};
var emptyObject = _.isEmpty(obj);
_.isEmpty([]) // true : প্রথম চেক করতে ভুলবেন না stackoverflow.com/a/22482737/1922747
আপনি লোডাশ ব্যবহার করতে ইচ্ছুক হলে , আপনি এই someপদ্ধতিটি ব্যবহার করতে পারেন ।
_.some(obj) // returns true or false
এই ছোট jsbin উদাহরণ দেখুন
_.some([1, 2]) // true : প্রথম চেক করতে ভুলবেন না stackoverflow.com/a/13356338/1922747
for (var hasProperties in ad) break;
if (hasProperties)
... // ad has properties
যদি আপনাকে নিরাপদে থাকতে হয় এবং অবজেক্ট প্রোটোটাইপগুলি পরীক্ষা করতে হয় (এগুলি নির্দিষ্ট লাইব্রেরি দ্বারা যুক্ত করা হয় এবং সেখানে ডিফল্টরূপে নেই):
var hasProperties = false;
for (var x in ad) {
if (ad.hasOwnProperty(x)) {
hasProperties = true;
break;
}
}
if (hasProperties)
... // ad has properties
for(var memberName in ad)
{
//Member Name: memberName
//Member Value: ad[memberName]
}
সদস্যের অর্থ সদস্যের সম্পত্তি, সদস্য পরিবর্তনশীল, আপনি যেটিকে এটি> _> কল করতে চান
উপরের কোডটি স্ট্রিং সহ সমস্ত কিছুই ফিরিয়ে দেবে ... আপনি যদি কেবলমাত্র অবজেক্টের প্রোটোটাইপটি বাড়ানো হয়েছে কিনা তা দেখতে চান:
var dummyObj = {};
for(var memberName in ad)
{
if(typeof(dummyObj[memberName]) == typeof(ad[memberName])) continue; //note A
//Member Name: memberName
//Member Value: ad[memberName]
}
নোট এ: আমরা ডামি অবজেক্টের সদস্যের আমাদের টেস্টিং অবজেক্টের সদস্য হিসাবে একই ধরণের আছে কিনা তা পরীক্ষা করে দেখুন। যদি এটি প্রসারিত হয় তবে ডামিওবজেক্টের সদস্য প্রকারটি "অপরিজ্ঞাত" হওয়া উচিত
var hasAnyProps = false; for (var key in obj) { hasAnyProps = true; break; }
// as of this line hasAnyProps will show Boolean whether or not any iterable props exist
সরল, প্রতিটি ব্রাউজারে কাজ করে, এবং যদিও এটি প্রযুক্তিগতভাবে বস্তুর সমস্ত কীগুলির জন্য লুপ হয় তবে এটি সমস্তটি লুপ করে না ... হয় 0 রয়েছে এবং লুপটি চালায় না বা কিছু আছে এবং এটি প্রথমটির পরে ব্রেক হয় একটি (কারণ আমরা পরীক্ষা করে দেখছি যে যদি কিছু আছে ... তবে কেন চালিয়ে যেতে হবে?)
যখন নিশ্চিত হয়ে নিন যে অবজেক্টটি কোনও ব্যবহারকারী-সংজ্ঞায়িত, ইউডিও খালি রয়েছে তা নির্ধারণের সবচেয়ে সহজ উপায়, নিম্নলিখিত কোডটি হবে:
isEmpty=
/*b.b Troy III p.a.e*/
function(x,p){for(p in x)return!1;return!0};
যদিও এই পদ্ধতিটি (প্রকৃতির দ্বারা) একটি অনুক্ষারক, - এটি দ্রুততম এবং দ্রুততম সম্ভব।
a={};
isEmpty(a) >> true
a.b=1
isEmpty(a) >> false
PS:! এটি ব্রাউজার-সংজ্ঞায়িত অবজেক্টগুলিতে ব্যবহার করবেন না।
আপনি নিম্নলিখিত ব্যবহার করতে পারেন:
ডাবল ব্যাং !! সম্পত্তি অনুসন্ধান
var a = !![]; // true
var a = !!null; // false
hasOwnProperty এটি এমনটি যা আমি ব্যবহার করতাম:
var myObject = {
name: 'John',
address: null
};
if (myObject.hasOwnProperty('address')) { // true
// do something if it exists.
}
তবে জাভাস্ক্রিপ্ট পদ্ধতিটির নামটি রক্ষা না করার সিদ্ধান্ত নিয়েছে, তাই এটির সাথে হস্তক্ষেপ করা যেতে পারে।
var myObject = {
hasOwnProperty: 'I will populate it myself!'
};
মায়োবজেক্টে প্রপ
var myObject = {
name: 'John',
address: null,
developer: false
};
'developer' in myObject; // true, remember it's looking for exists, not value.
ধরণ
if (typeof myObject.name !== 'undefined') {
// do something
}
তবে এটি নাল পরীক্ষা করে না check
আমি মনে করি এটি সেরা উপায়।
অপারেটরে
var myObject = {
name: 'John',
address: null
};
if('name' in myObject) {
console.log("Name exists in myObject");
}else{
console.log("Name does not exist in myObject");
}
ফলাফল:
নামটি মাইবজেক্টে বিদ্যমান
এখানে একটি লিঙ্ক রয়েছে যা অপারেটরের আরও বিশদে যায়: কোনও বস্তুর সম্পত্তি উপস্থিত থাকলে তা নির্ধারণ করা হচ্ছে
ES6 ফাংশন
/**
* Returns true if an object is empty.
* @param {*} obj the object to test
* @return {boolean} returns true if object is empty, otherwise returns false
*/
const pureObjectIsEmpty = obj => obj && obj.constructor === Object && Object.keys(obj).length === 0
উদাহরণ:
let obj = "this is an object with String constructor"
console.log(pureObjectIsEmpty(obj)) // empty? true
obj = {}
console.log(pureObjectIsEmpty(obj)) // empty? true
obj = []
console.log(pureObjectIsEmpty(obj)) // empty? true
obj = [{prop:"value"}]
console.log(pureObjectIsEmpty(obj)) // empty? true
obj = {prop:"value"}
console.log(pureObjectIsEmpty(obj)) // empty? false
এ কেমন?
var obj = {},
var isEmpty = !obj;
var hasContent = !!obj