গণনার অর্থ কী?


151

আমাকে এমডিএন'র জন্য..ইন পৃষ্ঠায় পরিচালিত হয়েছিল যখন এটি বলা হয়েছিল, "কারণ..অন্য কোনও বস্তুর অগণনীয় গুণাবলী নিয়ে Iterates"।

তারপরে আমি বৈশিষ্ট্য পৃষ্ঠার এনিউমেরেবিলিটি এবং মালিকানাতে গিয়েছিলাম যেখানে এটি বলেছিল "অগণিত বৈশিষ্ট্যগুলি হ'ল ফিন ইন লুপ দ্বারা পুনরাবৃত্তি করা যায়" "

অভিধান গণনাযোগ্য হিসাবে গণ্য হিসাবে সংজ্ঞায়িত করা, কিন্তু আমি সত্যিই এর অর্থ কী তা কল্পনা করতে পারি না। আমি কি অনুমিত কিছু হওয়ার উদাহরণ পেতে পারি?


বুঝতে for-inপারছ কি করে?

উত্তরগুলি থেকে আমি পেয়েছি যে জন্য..ইতে কোনও বস্তুর সমস্ত সংখ্যাগরিষ্ঠ বৈশিষ্ট্য বিবৃতি দিয়ে ব্যবহারের জন্য উপলব্ধ হতে পারে
প্যাট্রিক

6
সরল অর্থটি হ'ল: কোনও সম্পত্তি একটি for inলুপ দ্বারা উত্পাদিত হবে বা না (যারা বিশদ জানতে চান না বা কেবল যত্ন করছেন না তাদের জন্য))
টমাসজ রসিয়া

উত্তর:


158

একটি অগণনীয় সম্পত্তি হ'ল for..inলুপগুলির মধ্যে অন্তর্ভুক্ত এবং পরিদর্শন করা যেতে পারে (বা বৈশিষ্ট্যের অনুরূপ পুনরাবৃত্তি, যেমন Object.keys())।

যদি কোনও সম্পত্তি অনুমিত হিসাবে চিহ্নিত না করা হয় তবে লুপটি এটিকে বিষয়টির মধ্যে থাকা উপেক্ষা করবে।

var obj = { key: 'val' };

console.log('toString' in obj); // true
console.log(typeof obj.toString); // "function"

for (var key in obj)
    console.log(key); // "key"

একটি সম্পত্তি তার নিজস্ব [[Enumerable]]গুণাবলী দ্বারা গণ্যযোগ্য বা না হিসাবে চিহ্নিত করা হয় । আপনি সম্পত্তির বর্ণনাকারীর অংশ হিসাবে এটি দেখতে পারেন :

var descriptor = Object.getOwnPropertyDescriptor({ bar: 1 }, 'bar');

console.log(descriptor.enumerable); // true
console.log(descriptor.value);      // 1

console.log(descriptor);
// { value: 1, writable: true, enumerable: true, configurable: true }

একটি for..inলুপ তারপরে বস্তুর সম্পত্তির নামগুলির মাধ্যমে পুনরাবৃত্তি করে।

var foo = { bar: 1, baz: 2};

for (var prop in foo)
    console.log(prop); // outputs 'bar' and 'baz'

তবে, কেবলমাত্র তার বিবৃতি মূল্যায়ন করে - console.log(prop);এই ক্ষেত্রে - সেই বৈশিষ্ট্যগুলির জন্য যাদের [[Enumerable]]বৈশিষ্ট্যযুক্ত true

এই শর্তটি যথাযথভাবে রয়েছে কারণ অবজেক্টগুলির আরও অনেক সম্পত্তি রয়েছে , বিশেষত উত্তরাধিকার থেকে :

console.log(Object.getOwnPropertyNames(Object.prototype));
// ["constructor", "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", /* etc. */]

এই বৈশিষ্ট্যগুলির প্রত্যেকটি এখনও অবজেক্টটিতে বিদ্যমান :

console.log('constructor' in foo); // true
console.log('toString' in foo);    // true
// etc.

তবে, তারা for..inলুপটি এড়িয়ে গেছে কারণ তারা অগণনীয় নয়।

var descriptor = Object.getOwnPropertyDescriptor(Object.prototype, 'constructor');

console.log(descriptor.enumerable); // false

সুতরাং কন্সট্রাক্টর সম্পত্তি অগণনীয় কারণ এটি..ওন লুপে প্রদর্শিত হয় না। যদিও বার বা বাজের মতো বৈশিষ্ট্যের নামগুলি অগণিত কারণ আপনি অবজেক্ট থেকে প্রত্যেককে কনসোল.লগ করতে পেরেছিলেন?
প্যাট্রিক

5
এই সম্পূর্ণভাবে সঠিক নয়: But, they are skipped (or not counted) by the for..in loop because they are not enumerableObject.prototypeপ্রকৃত বৈশিষ্ট্যগুলি প্রকৃতপক্ষে উপেক্ষা করা হয়েছে কারণ তারা প্রোটোটাইপ চেইনটি আরও উপরে রেখেছিল, কারণ তারা অগণনীয় নয়। কোনও বস্তুর নিজস্ব নয় এমন বৈশিষ্ট্যগুলিও দেখাবেন না getOwnPropertyNames()বা keys()দেখান। পার্শ্ব নোট হিসাবে, এটি সত্য যে অনেকগুলি অন্তর্নির্মিত বৈশিষ্ট্যগুলি অগণিত নয় এবং সুতরাং এটি প্রদর্শিত হবে না keys(), তবে আপনি প্রোটোটাইপ চেইনটি অতিক্রম করতে চাইলে আপনাকে অতিরিক্ত কোড লিখতে হবে।
ম্যাগনাস

আক্ষরিক অর্থে, গণনার অর্থ গণনাযোগ্য
ক্রিশ্চিয়ান ম্যাথু

49

আপনি যদি কোনও বস্তু myObj = {foo: 'bar'}বা এর আশেপাশের কিছু তৈরি করেন তবে সমস্ত বৈশিষ্ট্য গণনাযোগ্য। সুতরাং জিজ্ঞাসা করা সহজ প্রশ্নটি, গণনাযোগ্য কী নয়? কিছু বস্তুর কিছু অ-গণনাযোগ্য বৈশিষ্ট্য থাকে, উদাহরণস্বরূপ আপনি যদি কল করেন Object.getOwnPropertyNames([])(যা সমস্ত বৈশিষ্ট্যের একটি অ্যারে প্রদান করে, [[]] তে অনুমানযোগ্য বা না, তবে]] এটি ফিরে আসবে ['length'], যার মধ্যে একটি অ্যারের অগণনীয় সম্পত্তি রয়েছে, 'দৈর্ঘ্য' ।

আপনি কল করে নিজের অ-গণ্য সম্পত্তি তৈরি করতে পারেন Object.defineProperty:

var person = { age: 18 };
Object.defineProperty(person, 'name', { value: 'Joshua', enumerable: false });

person.name; // 'Joshua'
for (prop in person) {
  console.log(prop);
}; // 'age'

এই উদাহরণটি জাভাস্ক্রিপ্টে অ-গণনাযোগ্য বৈশিষ্ট্যগুলি থেকে প্রচুর orrowণ নিয়েছে , তবে কোনও বস্তুর উপরে অঙ্কিত হচ্ছে তা দেখায়। বৈশিষ্ট্যগুলি হয় হয় লিখনযোগ্য, কনফিগারযোগ্য, বা গণনাযোগ্য। জন রেসিগ এটি ECMAScript 5 অবজেক্ট এবং প্রোপার্টিগুলির স্কোপে আলোচনা করে ।

এবং আপনি কেন সম্পত্তিটিকে অ-গণনাযোগ্য করতে চান তা সম্পর্কে একটি স্ট্যাক ওভারফ্লো প্রশ্ন রয়েছে ।


এইচএম, উভয় উপভোগ এবং ডাউনভোটস। অবশ্যই, এই উত্তরটি হ্রাস করার মতো মূল্য সম্পর্কে যদি কিছু থাকে তবে দয়া করে এখানে একটি মন্তব্য যুক্ত করুন।
কার্পেলিয়াম

1
অন্য উত্তর এটি লিখেছিল: var o = {}; o ['foo'] = 0; // গণনাযোগ্য, সাধারণ অবজেক্ট.ডিফাইনপোপার্টি (ও, 'বার', {মান: 1}); // অগণিত, অদ্ভুত কেন স্পষ্টরূপে গণনাযোগ্য: মিথ্যা?
প্যাট্রিক

5
@ পেট্রিক, আমি এটিকে এখানে কিছু অংশে অন্তর্ভুক্ত করেছি যাতে এটি একটি বিকল্পের উদাহরণ থেকে স্পষ্ট, তবে আপনার শ্রোতার উপর নির্ভর করে সুস্পষ্ট হওয়া একটি দৃ decision় সিদ্ধান্ত হতে পারে যাতে আপনার কোডটি যে পড়ছে তার পক্ষে এটি স্পষ্ট।
carpeliam

@ কার্পেলিয়াম এই সংক্ষিপ্ত এবং খুব স্পষ্ট ব্যাখ্যার জন্য ধন্যবাদ, আমি আপনার কাছে না যাওয়া পর্যন্ত আমি গ্রহণযোগ্য উত্তর পেতে পারিনি: ডি
সন্দীপকুমার

37

এটি কল্পনা করা উচিত যে কিছু চেয়ে অনেক বেশি বিরক্তিকর।

আক্ষরিক অর্থে সমস্ত গুণাবলীর উপর একটি গুণ রয়েছে যার নাম "গণনাযোগ্য" রয়েছে। যখন এটি মিথ্যাতে সেট করা হয় for..inপদ্ধতিটি সেই সম্পত্তিটি এড়িয়ে যাবে, ভান করে এটির অস্তিত্ব নেই।

"ভ্যালুঅফ" এবং "হ্যাশঅনপ্রোপার্টি" এর মতো "গণনাযোগ্য" মিথ্যা হিসাবে সেট থাকা "বস্তুগুলির অনেকগুলি বৈশিষ্ট্য রয়েছে কারণ এটি ধারণা করা হয় যে আপনি জাভাস্ক্রিপ্ট ইঞ্জিনটি পুনরায় ঘুরাতে চান না।

আপনি এই Object.definePropertyপদ্ধতিটি ব্যবহার করে নিজের অ-গুণযোগ্য বৈশিষ্ট্য তৈরি করতে পারেন :

  var car = {
    make: 'Honda',
    model: 'Civic',
    year: '2008',
    condition: 'bad',
    mileage: 36000
  };

  Object.defineProperty(car, 'mySecretAboutTheCar', {
    value: 'cat pee in back seat',
    enumerable: false
  });

এখন, গাড়ি সম্পর্কে এমনকি গোপনীয়তা লুকিয়ে রয়েছে। অবশ্যই তারা এখনও সম্পত্তি সরাসরি অ্যাক্সেস করতে পারে এবং উত্তর পেতে পারে:

console.log(car.mySecretAboutTheCar); // prints 'cat pee in back seat'

তবে, তাদের জানতে হবে সম্পত্তিটি প্রথমে বিদ্যমান, কারণ যদি তারা এটির মাধ্যমে অ্যাক্সেস করার চেষ্টা করছেন for..inবা Object.keysএটি সম্পূর্ণ গোপন থাকবে:

console.log(Object.keys(car)); //prints ['make', 'model', 'year', 'condition', 'mileage']

তাদের কেবল এটি বলা উচিত ছিল, "forInAble।"


5
শেষ পংক্তির জন্য উত্সাহিত - আমি মনে করি এটি যদি সত্যই বলা হত যদি সক্ষম হয়ে থাকে তবে কেউ এ সম্পর্কে মোটেই জিজ্ঞাসা করবে না। যা আমার প্রশ্ন দেখাবে - কেন হবে আপনি গণনীয় না হতে একটি সম্পত্তি সেট (অথবা তুমি কেন করতে হবে)? একটি অ্যারের দৈর্ঘ্য সম্পত্তি একটি অ-গণনাযোগ্য সম্পত্তি উদাহরণ হিসাবে প্রায়ই ব্যবহৃত হয়, তবে কেন আপনি কেবল এটি গণনাকারী হিসাবে সেট করতে পারেন নি (জাভাস্ক্রিপ্টের বিধিনিষেধ নয়, মানে কেন জাভাস্ক্রিপ্টে এটি গণনাযোগ্য নয়? প্রথম স্থান)?
ক্রিস

আমার প্রশ্নটি স্পষ্ট করার জন্য, কেন সিদ্ধান্ত নেওয়া হয়েছিল যে নিম্নলিখিতগুলি কোনও বিকল্প ছিল না: তৈরি করুন: হোন্ডা মডেল: নাগরিক গোপন: বিড়ালের প্রস্রাবির দৈর্ঘ্য: 12
ক্রিস

হুম ... আমি নিজের প্রশ্নের উত্তর খুঁজে পেয়েছি। "গণনা করা ডেটা ধরণের মাধ্যমে আপনি কী বোঝাতে চান?" এর জন্য গুগল অনুসন্ধান থেকে? গণিত ডেটাতে একটি সীমাবদ্ধ মান রয়েছে। একটি গণিত ডেটা টাইপ এমন মানগুলির সমন্বয়ে থাকে যা আপনি সেই ধরণের জন্য অনুমোদিত করেন বা মানক মানগুলি। পূর্ণসংখ্যার উপর ভিত্তি করে গণিতের ধরণের জন্য, প্রতিটি গণনা করা মানটিতে একটি নাম এবং অন্তর্নিহিত সংখ্যাসূচক মান থাকে o সুতরাং, যদি আমি সঠিকভাবে বুঝতে পারি, যেহেতু সম্ভাব্য দৈর্ঘ্যের অসীম সংখ্যা রয়েছে, আপনাকে একটি নাম, অসীম নাম নির্ধারণ করতে হবে প্রতিটি দৈর্ঘ্য। এটা কি ঠিক?
ক্রিস

ঠিক আছে, আপনার প্রথম প্রশ্নে সম্বোধন করা, কোনও বস্তুর উপর অ-গুণযোগ্য সম্পত্তি নির্ধারণ করা কিছুটা হ্যাকি, যেহেতু আপনি কেবলমাত্র সেই উপায়টি আবিষ্কার করতে সক্ষম হবেন সেই কোডটির দিকে এবং একটি কোড বেস হিসাবে এটি সমাধিস্থ হতে পারে বিকাশ। সুতরাং, সাধারণত, আপনি এটি ব্যবহার করতে চাইবেন না। 'দৈর্ঘ্য' সম্পর্কিত যা একটি স্ট্রিতে অক্ষরের সংখ্যা দেয় বা অ্যারেতে উপাদানগুলি দেয় কেবলমাত্র এমন কিছু যা আমরা অনুমান করি যে আমরা 'ইন ... ইন' ব্যবহার করতে চাইলে অন্তর্ভুক্ত চাই না। জেসের দেবতারা কেন প্রয়োজনীয়ভাবে সেভাবে তৈরি করেছিলেন তার উত্তর দিতে পারছে না। আমাদের বোধগম্যতার বাইরে তাদের কারণ ( আহেম ) মতামত রয়েছে।
গ্যাব্রিয়েল কঙ্কেল 0

... এবং আমি মনে করি না যে আমি গণনা করা ডেটা ধরণের সম্পর্কে আপনার দ্বিতীয় প্রশ্নের জবাব দিতে পারি, যদিও মনে হয় এমন কিছু সময় ছিল যদি আমি সময় পেলে বেশ কিছুক্ষণ চিবিয়ে নিতে পারি। :-)
গ্যাব্রিয়েল কঙ্কেল

9

আপনার যদি "কল্পনা করার অর্থ কী?" কেন নিজেকে জিজ্ঞাসা করবেন না, এর অর্থহীন হওয়ার অর্থ কী ?

আমি এটিকে কিছুটা মনে করি, একটি অগণিত সম্পত্তি বিদ্যমান তবে আংশিকভাবে লুকানো আছে ; যার অর্থ nonenumerable অদ্ভুত এক। এখন আপনি কী পরিমাণ বাকী রয়েছে তা হিসাবে আপনি অগণনীয় কল্পনা করতে পারেন - আমরা অবজেক্টগুলি আবিষ্কার করার পর থেকে আমরা যত বেশি প্রাকৃতিক সম্পত্তি মুখোমুখি হয়েছি । বিবেচনা

var o = {};
o['foo'] =  0;                               // enumerable, normal
Object.defineProperty(o, 'bar', {value: 1}); // nonenumerable, weird

এখন একটি মধ্যে for..in, এটি সিউডোকোড মত কল্পনা

for property in o:
    if not property enumerable continue // skip non-enumerable, "bar"
    else do /* whatever */              // act upon enumerable, "foo"

যেখানে আপনি জাভাস্ক্রিপ্টে টাইপ করেছেন সেই লুপের বডিটি সেই জায়গায়/* whatever */


8

আমি ENUMERABLE এর এক লাইন সংজ্ঞা লিখব

Enumerable: লুপের জন্য / ইন লুপে সম্পত্তিটি ফেরানো যাবে কিনা তা সুনির্দিষ্ট করে।

var obj = {};
Object.defineProperties(obj, {
    set1: {enumerable: true},
    set2: {enumerable: false},
});
Object.keys(obj); // ["set1"]
Object.getOwnPropertyNames(obj); // ["set1", "set2"]

0

পদ্ধতিগুলি গণনাযোগ্য নয়; বা বরং পদ্ধতিগুলিতে নির্মিত হয় না .. জাভা স্ক্রিপ্টের সংখ্যার অর্থ কী তা অনুসন্ধান করার পরে ; এটি কেবল একটি সম্পত্তির বৈশিষ্ট্যকে বোঝায় .. ইকমা 3-এ নির্মিত সমস্ত বস্তুগুলি অগণনীয়, এবং ইকমা 5 আপনি এখন এটি সংজ্ঞায়িত করতে পারেন .... এটাই ..: উত্তরটি খুঁজে পেতে আমাকে কিছুটা সময় লাগল; তবে আমি বিশ্বাস করি যে এটির বিষয়ে ডেভিড ফ্লানাগনের বইটিতে আলোচনা হয়েছে .. সুতরাং আমি অনুমান করি যে এটির অর্থ "লুকানো" বা "লুকানো" নয় সেই পদ্ধতিগুলিতে ইন লুপটিতে প্রদর্শিত হয়নি এবং এভাবে "লুকানো" রয়েছে


0

এনাম তথ্য প্রকারের কথা চিন্তা করুন, বিভিন্ন সংখ্যার সাথে সামঞ্জস্যপূর্ণ অবজেক্টগুলির কেবল একটি কাঠামো। কিছুকে একটি পরিগণিত হিসাবে ঘোষণা করা হ'ল ঘোষণা করা হয় যে এটি একটি নির্দিষ্ট সংখ্যার সাথে মিলে যায়, এটি অভিধানে একটি স্থান দেওয়ার অনুমতি দেয় যা কোনও বস্তুর গণ্য উপাদানকে উপস্থাপন করে। এটিকে সহজভাবে বলতে গেলে, কোনও বস্তুকে umeণযোগ্য করে তোলা সমীকরণকারীকে বলা সমান, "আরে, এই সম্পত্তিটি গণনা করা হয়, যখন আমি এই বস্তুর ডেটা পরীক্ষা করি তখন আমি এটি দেখতে চাই।"


0

অবজেক্টগুলির উত্তরাধিকারসূত্রে প্রাপ্ত অন্তর্নির্মিত পদ্ধতিগুলি অগণনীয় নয় তবে স্পষ্টভাবে বর্ণিত না হলে আপনার কোড বস্তুগুলিতে যে বৈশিষ্ট্যগুলি যুক্ত করে তা গণনাযোগ্য are

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