সম্পত্তি নাম ধারণ করে একটি ভেরিয়েবলের সাথে অবজেক্ট সম্পত্তি উপস্থিত রয়েছে কিনা তা কীভাবে পরীক্ষা করবেন?


680

আমি সম্পত্তির নামটিকে প্রশ্নে ধারণ করে একটি ভেরিয়েবল সহ কোনও সামগ্রীর সম্পত্তির অস্তিত্বের জন্য যাচাই করছি।

var myObj;
myObj.prop = "exists";
var myProp = "p"+"r"+"o"+"p";

if(myObj.myProp){
    alert("yes, i have that property");
};

এটি undefinedকারণ এটি সন্ধান করছে myObj.myPropতবে আমি এটি চেক করা চাইmyObj.prop


2
সম্ভবত কার্যকর: এনসিজেডঅনলাইনে পাবলো ক্যাব্রের একটি মন্তব্য থেকে : "আমি মনে করি যে এই hasOwnPropertyপদ্ধতিটি ওভাররাইট করা থাকলে আপনি এর উপর নির্ভর করতে পারেন note Object.prototype.hasOwnProperty.call(object, property)"
হিউম্যানআইডিজুইজ

10
এই প্রশ্নের একটি নকল কি স্ট্যাকওভারফ্লো.com / জিজ্ঞাসা / ৪৪৪৪৪৮৯6 / এক? ওটা কেমন? 'অস্তিত্ব পরীক্ষা করা' এবং 'অ্যাক্সেসিং মান' আলাদা জিনিস? আমি ভুল হলে আমাকে সংশোধন করুন ....
adnan2nd

এটি কোনও সদৃশ নয়।
জেফ ক্লেটন

উত্তর:


1307
var myProp = 'prop';
if(myObj.hasOwnProperty(myProp)){
    alert("yes, i have that property");
}

অথবা

var myProp = 'prop';
if(myProp in myObj){
    alert("yes, i have that property");
}

অথবা

if('prop' in myObj){
    alert("yes, i have that property");
}

নোট করুন যে hasOwnPropertyউত্তরাধিকারসূত্রে প্রাপ্ত বৈশিষ্ট্যগুলি পরীক্ষা করে না, যেখানে রয়েছে in। উদাহরণস্বরূপ 'constructor' in myObjসত্য, তবে myObj.hasOwnProperty('constructor')তা নয়।


23
hasOwnProperty()এরপরে myObj[myProp](অন্যান্য উত্তরগুলি থেকে) ভাল তবে এটি কার্যকর হয় যদিও এর মান myProp0 হয়
ম্যাট আর

9
"ইন" অপারেটর স্ট্রিং দিয়ে কাজ করে না। যেমন 'কিউকিউ' এর 'দৈর্ঘ্য' একটি ব্যতিক্রম তৈরি করবে produce সুতরাং আপনি যদি একটি সাধারণ উদ্দেশ্য পরীক্ষা করতে চান তবে আপনার hasnwroperty ব্যবহার করা উচিত।
জ্যাকব

1
@ জ্যাকব আপনি যখন "ইন" অপারেটরটি স্ট্রিংয়ের সাথে কাজ করেন না "বলছেন তখন আপনার অর্থ কী? "ইন" অপারেটরের সাথে বাম প্রকাশটি অবশ্যই একটি স্ট্রিং বা মান হতে হবে যা একটি স্ট্রিংয়ে রূপান্তর করতে পারে। হ্যাঁ, আপনি 'কিউকিউ'-তে' দৈর্ঘ্য 'লিখতে পারবেন না তবে আপনি' কিউককিউ 'লিখতে পারবেন না .আপনি প্রপার্টি (' দৈর্ঘ্য ') হয়
ওয়াচবার্ন

2
@ ওয়াচবার্ন: 'qqq'.hasOwnProperty('length')এটি trueআপনি এটি করতে পারেন।
রকেট হাজমত

1
@ গৌরভ ৫৪৩০ আমি বিশ্বাস করি যে আমি যে বিষয়টি উল্লেখ করছি তা হ'ল যদি myProp0 হয় তবে যদি বিবৃতিটি এমন মনে হয় if (myObj[0])যাতে myObjকোনও বৈশিষ্ট্য থাকে তবে অভিব্যক্তিটি মূল্যায়ন করবে true। এবং myObj[0]আপনার সন্ধান করা সম্পত্তি নাও হতে পারে।
ম্যাট আর

51

আপনি hasnwnProperty ব্যবহার করতে পারেন , তবে এই পদ্ধতিটি ব্যবহার করার সময় আপনার রেফারেন্সের ভিত্তিতে উদ্ধৃতিগুলি প্রয়োজন :

if (myObj.hasOwnProperty('myProp')) {
    // do something
}

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

অপর একটি উপায় অপারেটর ব্যবহার করা হয় , কিন্তু আপনার পাশাপাশি এখানে উদ্ধৃতি প্রয়োজন :

if ('myProp' in myObj) {
    // do something
}

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in


6
যেভাবে প্রয়োগ করা হয় নাhasOwnProperty()
ক্যানন

7
এটি ভুল। মাইপ্রপ নামটির চারপাশে উদ্ধৃতি স্থাপন করে আপনি আর মাইপ্রপের মান উল্লেখ করছেন না, বরং আপনি 'মাইপ্রপ' এর একটি নতুন স্ট্রিং () ঘোষণা করছেন এবং মাইঅবজেজে 'মাইপ্রপ' এর কোনও সম্পত্তি নেই।
বিজয়

1
ট্রিউম্পস্ট: উপরে লিঙ্কিত এমডিএন থেকে, "প্রপ - একটি স্ট্রিং বা প্রতীক যা কোনও সম্পত্তির নাম বা অ্যারে সূচককে উপস্থাপন করে (অ-চিহ্নগুলি স্ট্রিংগুলিতে জোর করা হবে)।
বেন ক্র্যাসি

এটা সঠিক। আপনি যদি কোনও ভেরিয়েবল ব্যবহার করতে না চান তবে কেবল একটি নির্দিষ্ট 'মাইপ্রপ' উপস্থিত থাকলে আপনার উদ্ধৃতিগুলি দরকার।
কাটিনকা হেসেলিংক

@ কাটিনকা হেসেলিংক: আপনার মন্তব্য বিভ্রান্তিকর। প্রশ্নটি ছিল "সম্পত্তি নাম ধারণ করে একটি ভেরিয়েবলের সাথে কীভাবে বস্তুর সম্পত্তি উপস্থিত রয়েছে কিনা তা কীভাবে পরীক্ষা করবেন?"
হারবার্ট ভ্যান-ভ্লিয়েট

26

প্রত্যেকের সহায়তার জন্য এবং এভিয়াল বিবৃতি থেকে মুক্তি পেতে চাপ দেওয়ার জন্য আপনাকে ধন্যবাদ। চলকগুলি বন্ধনীতে থাকা দরকার, বিন্দু চিহ্নিতকরণ নয়। এটি কাজ করে এবং পরিষ্কার, সঠিক কোড।

এগুলির প্রত্যেকটি ভেরিয়েবল: অ্যাপকোয়েস, আন্ডারআই, আন্ডারব্রাস্টার।

if(typeof tData.tonicdata[appChoice][underI][underObstr] !== "undefined"){
    //enter code here
}

এটি আমার কাছে সমস্যা মনে হচ্ছে। যদি tData.tonicdata[appChoice]কোনও মান / underIফলাফলের সাথে সূচক মেলে না এমন ফলাফলের ফলাফল হয় তবে এর ফলস্বরূপ TypeErrorছুঁড়ে ফেলা হবে।
ইয়োনট

আপনার প্রাথমিক পোস্টের সাথে আপনার উদ্দেশ্য সত্ত্বেও, আপনি আসলে এই উত্তরটির চেয়ে আলাদা প্রশ্ন জিজ্ঞাসা করেছিলেন। আপনি কোনও সম্পত্তির অস্তিত্ব পরীক্ষা করতে চেয়েছিলেন, কীভাবে এটি অ্যাক্সেস করবেন সে সম্পর্কে আপনি কিছু উল্লেখ করেননি। যা এই উত্তরটিকে আসল প্রশ্নের সাথে সম্পর্কিত করে না।
ছাগল

18

নিজস্ব সম্পত্তির জন্য:

var loan = { amount: 150 };
if(Object.prototype.hasOwnProperty.call(loan, "amount")) 
{ 
   //will execute
}

নোট: ব্যবহার Object.prototype.hasOwnProperty মত loan.hasOwnProperty (..), কেস এ একটি কাস্টম hasOwnProperty (যে ক্ষেত্রে এখানে নেই) প্রোটোটাইপ শৃঙ্খল সংজ্ঞায়িত করা হয়, বেশী ভালো

var foo = {
      hasOwnProperty: function() {
        return false;
      },
      bar: 'Here be dragons'
    };

// https://developer.mozilla.org/en-US/docs/Web/ জাভা স্ক্রিপ্ট / রেফারেন্স / গ্লোবাল_অবজেক্টস / অবজেক্ট / কিস মালিকানা

অনুসন্ধানের ক্ষেত্রে উত্তরাধিকারসূত্রে প্রাপ্ত বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করতে ইন- অপারেটরটি ব্যবহার করুন : (তবে আপনাকে অবশ্যই 'ইন' এর ডানদিকে কোনও বস্তু স্থাপন করতে হবে, আদিম মানগুলি ত্রুটি ফেলবে, যেমন 'বাড়ির ' দৈর্ঘ্য ' ত্রুটি ফেলবে, তবে ' দৈর্ঘ্য ' নতুন স্ট্রিং ('হোম') না

const yoshi = { skulk: true };
const hattori = { sneak: true };
const kuma = { creep: true };
if ("skulk" in yoshi) 
    console.log("Yoshi can skulk");

if (!("sneak" in yoshi)) 
    console.log("Yoshi cannot sneak");

if (!("creep" in yoshi)) 
    console.log("Yoshi cannot creep");

Object.setPrototypeOf(yoshi, hattori);

if ("sneak" in yoshi)
    console.log("Yoshi can now sneak");
if (!("creep" in hattori))
    console.log("Hattori cannot creep");

Object.setPrototypeOf(hattori, kuma);

if ("creep" in hattori)
    console.log("Hattori can now creep");
if ("creep" in yoshi)
    console.log("Yoshi can also creep");

// https://developer.mozilla.org/en-US/docs/Web/ জাভা স্ক্রিপ্ট / রেফারেন্স / অপারেটর / ইন

নোট: নীচের কোড হিসাবে সর্বদা কাজ করে না এমন টাইপফ এবং [] প্রপার্টি অ্যাক্সেসর ব্যবহার করতে কেউ প্ররোচিত হতে পারে ...

var loan = { amount: 150 };

loan.installment = undefined;

if("installment" in loan) // correct
{
    // will execute
}

if(typeof loan["installment"] !== "undefined") // incorrect
{
    // will not execute
}

13

বস্তুর উপর সম্পত্তি বিদ্যমান কিনা তা খতিয়ে দেখার আরও অনেক সুরক্ষিত উপায় হ'ল কল করার জন্য খালি বস্তু বা অবজেক্ট প্রোটোটাইপ ব্যবহার করা hasOwnProperty()

var foo = {
  hasOwnProperty: function() {
    return false;
  },
  bar: 'Here be dragons'
};

foo.hasOwnProperty('bar'); // always returns false

// Use another Object's hasOwnProperty and call it with 'this' set to foo
({}).hasOwnProperty.call(foo, 'bar'); // true

// It's also possible to use the hasOwnProperty property from the Object
// prototype for this purpose
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

এমডিএন ওয়েব ডক্স থেকে রেফারেন্স - অবজেক্ট.প্রোটোটাইপ.হস ওনপ্রোপার্টি ()


4
আপনি যদি জাভাস্ক্রিপ্টকে অন্তর্ভুক্ত করছেন যা ওভাররাইডের মতো hasOwnPropertyকোনও খারাপ কাজ করতে পারে তবে এর মতো কোনও পরিমাণ রক্ষী আপনার কোডটি নিরাপদ বা সুরক্ষিত করবে না।
meustrus

@ মিডস্ট্রাস আমি জানি আপনি কোথা থেকে এসেছেন তবে ব্যবসায়ের দৃষ্টিকোণ থেকে এটি পাওয়া খুব সম্ভব যে কোনও অনভিজ্ঞ বিকাশকারী এই সম্পত্তির নামটি ব্যবহার করবেন, যার অর্থ এই নয় যে তারা ইচ্ছাকৃতভাবে কোনও মন্দ করছেন।
skmasq

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.