জাভাস্ক্রিপ্টে মালিকানাধীন সম্পত্তি কী?


97

বিবেচনা:

if (someVar.hasOwnProperty('someProperty') ) {
 // Do something();
} else {
 // Do somethingElse();
}

সঠিক ব্যবহার / ব্যাখ্যা কী hasOwnProperty('someProperty')?

someVar.somePropertyকোনও বস্তুর someVarনামের সাথে সম্পত্তি রয়েছে কিনা তা আমরা কেন খালি পরীক্ষা করতে পারি না someProperty?

এক্ষেত্রে সম্পত্তি কী?

এই জাভাস্ক্রিপ্ট কোন সম্পত্তি পরীক্ষা করে?



আমি যখন এই প্রশ্নটি জিজ্ঞাসা করেছি তখন আমি ভেবেছিলাম এটি এমন একটি ফাংশন যা কিছু এইচটিএমএল পরীক্ষা করে। এখন আমি এটি দেখতে পাচ্ছি যে জাভাস্ক্রিপ্ট অবজেক্ট বা পদ্ধতিটি সেই অবজেক্ট বা পদ্ধতির মধ্যে 'ভেরিয়েবল'-এর জন্য পরীক্ষা করা হচ্ছে। থানেক্স!
ফ্লাই করুন

উত্তর:


165

hasOwnPropertyআপনি যে বস্তুর উপরে এটি কল করছেন তার আর্গুমেন্টের নামের সাথে সম্পত্তি আছে কিনা তা বোঝায় এমন একটি বুলিয়ান মান প্রদান করে। উদাহরণ স্বরূপ:

var x = {
    y: 10
};
console.log(x.hasOwnProperty("y")); //true
console.log(x.hasOwnProperty("z")); //false

তবে এটি বস্তুর প্রোটোটাইপ চেইনের দিকে নজর দেয় না।

আপনি for...inনির্মাণের সাথে কোনও বস্তুর বৈশিষ্ট্যগুলি গণনা করার সময় এটি ব্যবহার করা কার্যকর ।

আপনি যদি পুরো বিশদটি দেখতে চান তবে ES5 স্পেসিফিকেশনটি বরাবরের মতো, দেখতে ভাল জায়গা good


6
প্রোটোটাইপ চেইনের জন্য বোনাস পয়েন্ট। এখনও যখন এটি কোনও বস্তুর কাছে ডাকা হবে না তখন এটি কী আহ্বান জানানোর চেষ্টা করছে ... এটি নয়window
ক্রিস্টোফার সল-স্টোরগার্ড

@ ক্রিস্টোফারএসহানসান - আমিও ভাবছিলাম যে এটিও, তবে প্রশ্নটি সম্পাদিত হয়েছে সুতরাং এটি এখন কোনও বস্তুর উপরে ডাকা হচ্ছে। যখন এটি না হয়, একটি ত্রুটি নিক্ষেপ করা হয়।
জেমস আলার্ডাইস

আমি মনে করি যে জিনিস পরিবর্তন করে। যদিও ক্রোমে কনসোল থেকে চালিত হওয়ার সময় কোনও ত্রুটি নেই।
ক্রিস্টোফার সল-স্টোরগার্ড

@ ক্রিস্টোফারস হ্যানসান - আমি মনে করি যে এটি কনসোল কোডটি কীভাবে চালায় (এটি evalগ্লোবাল বা ফাংশন কোডের চেয়ে কোড হিসাবে চালানো হয় )। আমি এটি একটি ফাঁকা HTML পৃষ্ঠায় চেষ্টা করেছি এবং একটি "নালকে বস্তুতে রূপান্তর করতে পারি না" ত্রুটি পেয়েছি।
জেমস আলার্ডাইস

@ ক্রিস্টোফারএসহানসান যখন কোনও শ্রেণি পদ্ধতিতে ডাকা হয় তখন কুণাল ভাসিস্টের উত্তর দেখুন
ফ্লাই করুন

25

এখানে একটি সংক্ষিপ্ত এবং সুনির্দিষ্ট উত্তর:

জাভাস্ক্রিপ্টে, প্রতিটি বস্তুর মধ্যে অন্তর্নির্মিত কী-মান যুক্তগুলির একটি গুচ্ছ থাকে যাতে অবজেক্ট সম্পর্কে মেটা তথ্য থাকে। যখন আপনি কোনও মূল for...inঅবজেক্টের জন্য কনট্রাক্ট / লুপ ব্যবহার করে সমস্ত কী-মান জোড়ার মধ্য দিয়ে লুপ করেন তখন আপনি এই মেটা-তথ্য কী-মান জোড়ার মাধ্যমেও লুপ করছেন (যা আপনি অবশ্যই চান না)।

এখানে চিত্র বিবরণ লিখুন

মেটা তথ্যের মাধ্যমে hasOwnPropery(property) ফিল্টার-আউট এই অপ্রয়োজনীয় লুপিং ব্যবহার করে এবং প্যারামিটারটি propertyযা সরাসরি পরীক্ষা করে তা কোনও বস্তুতে ব্যবহারকারী প্রদত্ত সম্পত্তি। দ্বারা ফিল্টার আউট , আমি বলতে চাইছি, যে hasOwnProperty(property)মনে হচ্ছে না, তাহলে propertyঅবজেক্ট এর প্রোটোটাইপ শৃঙ্খল ওরফে মেটা তথ্য বিদ্যমান।

এটি তার true/falseভিত্তিতে বুলিয়ান ফেরত দেয় ।

এখানে একটি উদাহরণ:

var fruitObject = {"name": "Apple", "shape": "round", "taste": "sweet"};
console.log(fruitObject.hasOwnProperty("name"));  //true
console.log(Object.prototype.hasOwnProperty("toString");) //true because in above snapshot you can see, that there is a function toString in meta-information

আমি আশা করি এটা পরিষ্কার!


আপনার উদাহরণের শেষ লাইনে আপনি লিখুন console.log(Object.prototype....; তুমি কি বোঝাতে চাইলে console.log(fruitObject.? ফলের অবজেক্ট বা অবজেক্ট?
হামিদ আরাগি

> "আপনি এই মেটা-তথ্য কী-মান জোড়গুলিও লুপ করছেন" তবে আমি যখন for (var key in fruitObject) { ... }জেএসকে কেবল প্রনোটোটাইপ কীগুলির মাধ্যমে চালাই , তখন কি আমি কিছু অনুপস্থিত বা কী-ইন-অবজেক্টের জন্য হ্যান্ডেল করার পদ্ধতিটি জেএস রানটাইম পরিবর্তন করেছিলাম? লুপস?
চিকেনফিট

13

এটি পরীক্ষা করে:

নির্দিষ্ট নামের সাথে কোনও বস্তুর সম্পত্তি রয়েছে কিনা তা নির্দেশ করে একটি বুলিয়ান মান প্রদান করে

HasOwnProperty পদ্ধতি আয় যদি সত্য হয় বস্তুর নিদিষ্ট নামের একটি সম্পত্তি, মিথ্যা যদি এটা না হয়েছে। এই পদ্ধতিটি বস্তুর প্রোটোটাইপ চেইনে সম্পত্তি বিদ্যমান কিনা তা পরীক্ষা করে না; সম্পত্তি অবশ্যই অবজেক্টের একটি সদস্য হতে হবে।

উদাহরণ:

var s = new String("Sample");
document.write(s.hasOwnProperty("split"));                        //false
document.write(String.prototype.hasOwnProperty("split"));         //true

4
আমি একটি -১ দিয়েছিলাম কারণ আপনার প্রাথমিক উত্তরটি একটি সংক্ষিপ্ত এবং সম্পূর্ণ অন্তর্নিহিত বাক্য ছিল, যা পরে কিছুটা দীর্ঘ, সামান্য আরও সুসংগত, তবে সম্পূর্ণরূপে ভুল বাক্যটিতে আপডেট হয়েছিল।

@ অ্যামনিটিয়াম- তবে আমি এখন এটি অনেকটাই পরিষ্কার বলে মনে করি ... কারণ এটি আমার ইন্টারনেট সমস্যাটি আমি বেশি পোস্ট করতে পারছি না ..........
প্রণয় রানা

12

সারসংক্ষেপ:

hasOwnProperty()কোনও ফাংশন যা কোনও অবজেক্টে ডাকা যেতে পারে এবং একটি স্ট্রিংকে ইনপুট হিসাবে গ্রহণ করে। এটি এমন একটি বুলিয়ান দেয় যা trueসম্পত্তি যদি বস্তুর উপর অবস্থিত থাকে তবে তা মিথ্যা ফেরত দেয়। hasOwnProperty()অবস্থিত Object.prototypeএবং এইভাবে যে কোনও বস্তুর জন্য উপলব্ধ।

উদাহরণ:

function Person(name) {
  this.name = name;
}

Person.prototype.age = 25;

const willem = new Person('willem');

console.log(willem.name); // Property found on object
console.log(willem.age); // Property found on prototype

console.log(willem.hasOwnProperty('name')); // 'name' is on the object itself
console.log(willem.hasOwnProperty('age')); // 'age' is not on the object itself

এই উদাহরণে একটি নতুন ব্যক্তি অবজেক্ট তৈরি করা হয়। প্রতিটি ব্যক্তির নিজস্ব নাম রয়েছে যা কনস্ট্রাক্টরে আরম্ভ হয়। যাইহোক, বয়স বস্তুর উপর নয় তবে অবজেক্টের প্রোটোটাইপে। সুতরাং নাম এবং বয়সের জন্য hasOwnProperty()ফিরে আসে ।truefalse

বাস্তবিক দরখাস্তগুলো:

hasOwnProperty()for inলুপ ব্যবহার করে কোনও অবজেক্টের উপর লুপ করার সময় খুব কার্যকর হতে পারে । বৈশিষ্ট্যগুলি বস্তু থেকে না নিজেই প্রোটোটাইপ থেকে আসে কিনা আপনি এটি দিয়ে পরীক্ষা করতে পারেন। উদাহরণ স্বরূপ:

function Person(name, city) {
  this.name = name;
  this.city = city;
}

Person.prototype.age = 25;

const willem = new Person('Willem', 'Groningen');

for (let trait in willem) {
  console.log(trait, willem[trait]); // This loops through all properties, including the prototype
}

console.log('\n');

for (let trait in willem) {
  if (willem.hasOwnProperty(trait)) { // This loops only through 'own' properties of the object
    console.log(trait, willem[trait]);
  }
}


3

আপনি অবজেক্ট.হসনপ্রপার্টি ( পি ) ব্যবহার করে নির্ধারণ করতে কোনও বস্তুর একটি অগণনীয় সম্পত্তি আছে কিনা পি -

কোনও অবজেক্টের নিজস্ব প্রোটোটাইপ থাকতে পারে, যেখানে 'ডিফল্ট' পদ্ধতি এবং বৈশিষ্ট্যগুলি বস্তুর প্রতিটি ক্ষেত্রে নিযুক্ত করা হয়। hasOwnProperty কেবলমাত্র সেই বৈশিষ্ট্যগুলির জন্য সত্য প্রত্যাবর্তন করে যা নির্দিষ্টভাবে কনস্ট্রাক্টরে সেট করা হয়েছিল, বা পরে যুক্ত করা হয়েছে।

অবজেক্টের জন্য, কোথাও, পি- কে সংজ্ঞায়িত করা হয়েছে কিনা তা নির্ধারণ করতে , ( p উদাহরণof অবজেক্ট) ব্যবহার করুন, যেখানে p একটি সম্পত্তি-নামের স্ট্রিংয়ের মূল্যায়ন করে।

উদাহরণস্বরূপ, ডিফল্টরূপে সমস্ত অবজেক্টের একটি 'টু স্ট্রিং' পদ্ধতি রয়েছে তবে এটি হ'ল ওপেনপ্রটিতে প্রদর্শিত হবে না।


2

hasOwnProperty একটি সাধারণ জাভাস্ক্রিপ্ট ফাংশন যা একটি স্ট্রিং আর্গুমেন্ট নেয়।

আপনার ক্ষেত্রে, somevar.hasOwnProperty('someProperty')এটি somevarফাংশনটি আছে কিনা তা যাচাই করে somepropery- এটি সত্য এবং মিথ্যা প্রত্যাবর্তন করে।

বলুন

function somevar() {
    this.someProperty = "Generic";
}

function welcomeMessage()
{
    var somevar1 = new somevar();
    if(somevar1.hasOwnProperty("name"))
    {
        alert(somevar1.hasOwnProperty("name")); // It will return true
    }
}

2

hasOwnPropertyএকটি চেক একটি সঠিক উপায় বস্তুর টি সম্পত্তি বা না। someVar.somePropertyএই পরিস্থিতির বিকল্প হিসাবে ব্যবহার করা যাবে না। নিম্নলিখিত শর্তটি একটি ভাল পার্থক্য প্রদর্শন করবে:

const someVar = { isFirst: false };


// The condition is true, because 'someVar' has property 'isFirst'
if (someVar.hasOwnProperty('isFirst')) {
  // Code runs
}


// The condition is false, because 'isFirst' is false.
if (someVar.isFirst) {
  // Code does not runs here
}

তাই someVar.isFirstবিকল্প হিসাবে ব্যবহার করা যাবে না someVar.hasOwnProperty('isFirst')


-1

দৃশ্য এ:

const objA = { a: 1, b: 2 }
for (const key in objA) {
  if (objA.hasOwnProperty(key)) {
    console.log(objA[key])
  }
}

    Output

    1
    2

দৃশ্য বি:

const objB = {
  a: 1,
  b: 2,
  hasOwnProperty() {
    return false
  }
}

for (const key in objB) {
  if (objB.hasOwnProperty(key)) {
    console.log(objB[key])
  }
}

    Outputs nothing

কারণ জাভাস্ক্রিপ্ট হ'লআপনপ্রপার্টিটির সম্পত্তি রক্ষা করে না। সুতরাং আপনি এটি ব্যবহার করতে পারেন:

for (const key in objB) {
  if (Object.prototype.hasOwnProperty.call(obj, key)) {
    console.log(objB[key])
  }
}

-2

এটি কোনও বস্তুর সম্পত্তি আছে কিনা তা পরীক্ষা করে । এটি if(obj.prop)যতটা জানি আমি একইভাবে কাজ করে ।


7
obj.propপ্রোটোটাইপ চেইন অনুসরণ করে, hasOwnPropertyনা
ক্রিস্টোফার সল-স্টোরগার্ড

12
সমস্যাটি যখন propভুয়া মান হয়। if(obj.hasOwnProperty('prop'))হবে trueযখন if(obj.prop)হবে false
রদ্রিগো সলিং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.