জাভাস্ক্রিপ্টে কোনও অবজেক্টের বৈশিষ্ট্য যাচাইয়ের জন্য অপারেটর রয়েছে?


183

জাভাস্ক্রিপ্টে কোনও ধরণের "ইন ইন" অপারেটর কি কোনও বস্তুর মধ্যে কোনও সম্পত্তি উপস্থিত নেই কিনা তা খতিয়ে দেখার জন্য? আমি গুগল বা স্ট্যাক ওভারফ্লো এর চারপাশে এই সম্পর্কে কিছুই খুঁজে পাইনি। এই ধরণের কার্যকারিতা আমার যেখানে প্রয়োজন সেখানে আমি কোডের একটি ছোট স্নিপেট এখানে দেখছি:

var tutorTimes = {};

$(checked).each(function(idx){
  id = $(this).attr('class');

  if(id in tutorTimes){}
  else{
    //Rest of my logic will go here
  }
});

আপনি দেখতে পাচ্ছেন যে, আমি সমস্ত কিছু elseবিবৃতিতে রেখে যাচ্ছি । শুধু অংশটি ব্যবহার করার জন্য if- elseবিবৃতি স্থাপন করা আমার কাছে ভুল বলে মনে হচ্ছে else


4
আমি মনে করি আপনি var id = ...আপনার ফাংশন চাইবেন ।
কবি

উত্তর:


338

অন্য অংশটি ব্যবহার করার জন্য যদি / অন্য বিবৃতিটি সেট আপ করা আমার কাছে ভুল মনে হয় ...

কেবল আপনার অবস্থার অবহেলা করুন, এবং আপনি এর elseভিতরে যুক্তিটি পাবেন if:

if (!(id in tutorTimes)) { ... }

11
এই শৈলী এছাড়াও সতর্কীকরণ আপনি যদি করেনি আপনি পেতে চাই " '!' ব্যবহার বিভ্রান্তিকর" JSHint সমাধান করা হয়েছে( ! somekey in someobj )
mikemaccana

3
দয়া করে মনে রাখবেন যে সম্পত্তি নামের জন্য অনুসন্ধান যে কোন জায়গায় প্রোটোটাইপ চেন। আরও তথ্যের জন্য আমার উত্তর দেখুন ।
কিছু

25
আমি বুঝতে পারি এটি বর্তমানে সর্বোত্তম সমাধান, তবে অন্য কেউ কি সম্মতি জানায় যে এটি কৃপণ?
জোনাহ

3
যদি এটি কুৎসিত হয় তবে কেবল এটি একটি ফাংশনে মুড়িয়ে রাখুন এবং একটি সুন্দর নাম দিন 🙃let keyExists = (key, obj) => key in obj
কামাফেদার

আমি সম্পূর্ণভাবে রাজী. প্রকৃতপক্ষে আমার নামকরণের দক্ষতাও উন্নত হতে পারে 😁 let hasProperty"দেখতে" আরও ভাল
কামাফেদার

37

জর্দো ইতিমধ্যে বলেছিলেন, কেবল এটি এড়িয়ে যান:

if (!(id in tutorTimes)) { ... }

দ্রষ্টব্য: উপরের পরীক্ষাটি যদি টিউটরটাইমসের আইডিতে নির্দিষ্ট নামের সাথে প্রোটোটাইপ শৃঙ্খলে যে কোনও জায়গায় সম্পত্তি থাকে । উদাহরণস্বরূপ "valueOf" in tutorTimesফেরৎ সত্য কারণ এটি সংজ্ঞায়িত করা হয় হল Object.prototype

আপনি যদি বর্তমান টেস্টে কোনও সম্পত্তি বিদ্যমান না থাকে তা যদি পরীক্ষা করতে চান তবে hasnwnProperty ব্যবহার করুন:

if (!tutorTimes.hasOwnProperty(id)) { ... }

অথবা যদি আপনার কাছে এমন একটি কী থাকতে পারে যা হ'লআপনপ্রোপরি থাকে তবে আপনি এটি ব্যবহার করতে পারেন:

if (!Object.prototype.hasOwnProperty.call(tutorTimes,id)) { ... }

কোট এবং ব্যবহারের মধ্যে কীটি মুড়ে ফেলা কি নিরাপদif(!tutorTimes.hasOwnProperty('id')) ... ?
মজিদ ফৌলদপুর

@MajidFouladpour idএকটি পরিবর্তনশীল যে কোনো মূল্য আছে পারে, 'id'দুটি বর্ণের সঙ্গে একটি স্ট্রিং আমি এবং , তাই hasOwnProperty(id)চেক যদি সম্পত্তি পরিবর্তনশীল উল্লেখিত আইডি বিদ্যমান, এবং hasOwnProperty('id')আছে যদি চেক একটি সম্পত্তি নামে আইডি।
কিছু

17

ব্যক্তিগতভাবে আমি খুঁজে

if (id in tutorTimes === false) { ... }

চেয়ে পড়া সহজ

if (!(id in tutorTimes)) { ... }

তবে দু'জনেই কাজ করবে।


14

দুটি দ্রুত সম্ভাবনা:

if(!('foo' in myObj)) { ... }

অথবা

if(myObj['foo'] === undefined) { ... }

5
'undefined' === typeof xxxপরিবর্তে ব্যবহার করুন। undefinedকোনও সংরক্ষিত শব্দ নয় এবং এটি আসলে একটি বৈশ্বিক পরিবর্তনশীল যা ওভাররাইট করা যেতে পারে (বাগগুলি খুঁজে পাওয়া শক্ত করে)
hugomg

9
@ হিপ্পিট্রাইল কাজ করে না ... "" পরে প্যারেনস প্রয়োজন! এবং আশেপাশে'foo' in myObj)
ফিল কুপার

4
myObj['foo']সম্পত্তি হিসাবে উপস্থিত হতে পারে এবং কেবল সেট করা যেতে পারে undefined(অর্থাত্ বিবৃতি দিয়ে myObj.foo = undefined)। আপনি যদি সম্পত্তিটি নিজেই বিদ্যমান না দেখতে চান তবে আপনার !('foo' in myObj)স্বরলিপি প্রয়োজন ।
রিচার্ড কোনামাচার

আমাদের মধ্যে সচেতন পারফরম্যান্সের জন্য, চেক myObj.foo === undefinedকরা অনেক দ্রুত (সম্ভাব্য বিপজ্জনক হলেও): jsperf.com/not-in-vs-is-und परिभाषित
এটপিনার্ড

@ হুগমগ আমি এটি ব্যবহার না করার পক্ষে খুব ভাল যুক্তি বলে মনে করি না === undefined। লোকেরা কোনও প্রোগ্রামিং ভাষার ব্যবহার এ জাতীয় জিনিস যেমন উদাহরণস্বরূপ undefinedজাভাস্ক্রিপ্টে ওভার রাইটিং করে অপব্যবহার করতে পারে । এছাড়াও, দেখুন: stackoverflow.com/questions/8783510/...
Zero3
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.