javascript - জাভাস্ক্রিপ্ট বই pdf




কিভাবে একটি জাভাস্ক্রিপ্ট বস্তুর বৈশিষ্ট্য তালিকাভুক্ত করা? (11)

বলুন আমি এইভাবে একটি বস্তু তৈরি করি:

var myObject =
        {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};

সম্পত্তি নাম একটি তালিকা পুনরুদ্ধার করার সেরা উপায় কি? অর্থাৎ আমি কিছু পরিবর্তনশীল 'কী' দিয়ে শেষ করতে চাই, যেমন:

keys == ["ircEvent", "method", "regex"]

IE স্থানীয় বৈশিষ্ট্যের জন্য (i obj মধ্যে) সমর্থন করে না। এখানে আমি খুঁজে পেতে পারে সব props একটি তালিকা।

এটা কিছু মূঢ় ফিল্টারিং মনে হয়।

তালিকা এই গুগল গ্রুপ পোস্টের নীচে উপলব্ধ: - https://groups.google.com/group/hackvertor/browse_thread/thread/a9ba81ca642a63e0


আধুনিক ব্রাউজারগুলিতে (IE9 +, FF4 +, Chrome5 +, অপেরা 1২ +, Safari5 +) আপনি Object.keys . Object.keys পদ্ধতিতে নির্মিত ব্যবহার করতে পারেন:

var keys = Object.keys(myObject);

উপরে একটি পূর্ণ polyfill আছে কিন্তু একটি সরলীকৃত সংস্করণ:

var getKeys = function(obj){
   var keys = [];
   for(var key in obj){
      keys.push(key);
   }
   return keys;
}

অন্যথায় var getKeys সহ var getKeys প্রতিস্থাপন করার জন্য আপনাকে কোনও বস্তুতে .keys() কে কল করার অনুমতি দেয়। প্রোটোটাইপ প্রসারিত কিছু পার্শ্ব প্রতিক্রিয়া আছে এবং আমি এটা করার সুপারিশ করবে না।



উল্লেখ্য যে Object.keys এবং অন্যান্য ECMAScript 5 পদ্ধতিগুলি ফায়ারফক্স 4, ক্রোম 6, সাফারি 5, IE 9 এবং এর উপরে সমর্থিত।

উদাহরণ স্বরূপ:

var o = {"foo": 1, "bar": 2}; 
alert(Object.keys(o));

ECMAScript 5 সামঞ্জস্যপূর্ণ টেবিল: kangax.github.com/es5-compat-table

নতুন পদ্ধতির বর্ণনা: http://markcaudill.com/index.php/2009/04/javascript-new-features-ecma5/ new- http://markcaudill.com/index.php/2009/04/javascript-new-features-ecma5/


গৃহীত উত্তর বিল্ডিং।

যদি বস্তুর এমন বৈশিষ্ট্য থাকে যা আপনি কল করতে চান তবে .properties () চেষ্টা করুন!

var keys = Object.keys(myJSONObject);

for (var j=0; j < keys.length; j++) {
  Object[keys[j]].properties();
}

জেএস 1.8 সমর্থন ব্রাউজারের অধীনে:

[i for(i in obj)]

মজিলার এমন কোনও ব্রাউজারে কীভাবে এটি করা যায় সে সম্পর্কে সম্পূর্ণ বাস্তবায়ন বিবরণ রয়েছে যেখানে এটি সমর্থিত নয়, যদি এটি সহায়তা করে:

if (!Object.keys) {
  Object.keys = (function () {
    var hasOwnProperty = Object.prototype.hasOwnProperty,
        hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
        dontEnums = [
          'toString',
          'toLocaleString',
          'valueOf',
          'hasOwnProperty',
          'isPrototypeOf',
          'propertyIsEnumerable',
          'constructor'
        ],
        dontEnumsLength = dontEnums.length;

    return function (obj) {
      if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object');

      var result = [];

      for (var prop in obj) {
        if (hasOwnProperty.call(obj, prop)) result.push(prop);
      }

      if (hasDontEnumBug) {
        for (var i=0; i < dontEnumsLength; i++) {
          if (hasOwnProperty.call(obj, dontEnums[i])) result.push(dontEnums[i]);
        }
      }
      return result;
    };
  })();
}

আপনি চাইলে এটি অন্তর্ভুক্ত করতে পারেন তবে সম্ভবত আপনার স্ক্রিপ্ট স্ট্যাকের উপরে extensions.js কোনও ফাইলের মধ্যে।


যদি আপনি শুধুমাত্র উপাদানগুলি পেতে চেষ্টা করেন তবে ফাংশন না করেন তবে এই কোডটি আপনাকে সাহায্য করতে পারে

this.getKeys = function() {

    var keys = new Array();
    for(var key in this) {

        if( typeof this[key] !== 'function') {

            keys.push(key);
        }
    }
    return keys;
}

এটি হ্যাসম্যাপের আমার বাস্তবায়ন অংশ এবং আমি শুধুমাত্র কীগুলি চাই, "এই" হাশম্যাপ বস্তু যার মধ্যে রয়েছে কী


স্যাম ডুটন উত্তর দিয়েছিলেন, ইসিএমএসস্ক্রিপ্ট 5 ম সংস্করণে এই একই উদ্দেশ্যে নতুন পদ্ধতি চালু করা হয়েছে। Object.keys() আপনি যা চান তা করবেন এবং Object.keys , Chrome 6, Safari 5 এবং IE 9 এ সমর্থিত।

আপনি ব্রাউজারগুলিতে এমন পদ্ধতিটি খুব সহজেই প্রয়োগ করতে পারেন যা এটি সমর্থন করে না। যাইহোক, সেখানে কিছু বাস্তবায়ন ইন্টারনেট এক্সপ্লোরার সঙ্গে সম্পূর্ণরূপে সামঞ্জস্যপূর্ণ হয় না। এখানে একটি আরও সামঞ্জস্যপূর্ণ সমাধান:

Object.keys = Object.keys || (function () {
    var hasOwnProperty = Object.prototype.hasOwnProperty,
        hasDontEnumBug = !{toString:null}.propertyIsEnumerable("toString"),
        DontEnums = [ 
            'toString', 'toLocaleString', 'valueOf', 'hasOwnProperty',
            'isPrototypeOf', 'propertyIsEnumerable', 'constructor'
        ],
        DontEnumsLength = DontEnums.length;

    return function (o) {
        if (typeof o != "object" && typeof o != "function" || o === null)
            throw new TypeError("Object.keys called on a non-object");

        var result = [];
        for (var name in o) {
            if (hasOwnProperty.call(o, name))
                result.push(name);
        }

        if (hasDontEnumBug) {
            for (var i = 0; i < DontEnumsLength; i++) {
                if (hasOwnProperty.call(o, DontEnums[i]))
                    result.push(DontEnums[i]);
            }   
        }

        return result;
    };
})();

উল্লেখ্য, বর্তমানে গৃহীত উত্তরটিতে hasOwnProperty () এর জন্য একটি চেক অন্তর্ভুক্ত করা নেই এবং প্রোটোটাইপ শৃঙ্খলের মাধ্যমে উত্তরাধিকারীকৃত বৈশিষ্ট্যগুলি ফিরিয়ে দেবে। এটি ইন্টারনেট এক্সপ্লোরারের বিখ্যাত ডন্টেএনমের বাগের জন্যও হিসাব করে না যেখানে প্রোটোটাইপ শৃঙ্খলে অ-সংখ্যাসূচক বৈশিষ্ট্যগুলি স্থানীয়ভাবে ঘোষিত বৈশিষ্ট্যগুলিকে একই নাম দিয়ে তাদের DontEnum বৈশিষ্ট্যটির উত্তরাধিকারী করে।

Object.keys প্রয়োগ করা () আপনাকে আরও শক্তিশালী সমাধান দেবে।

সম্পাদন করুন: প্রোটোটাইপের একজন সুপরিচিত অবদানকারী কঙ্গ্যাক্সের সাথে সাম্প্রতিক আলোচনা অনুসরণ করে, আমি here পাওয়া তার Object.forIn() ফাংশনের কোডের উপর ভিত্তি করে DontEnum বাগের কার্যকারিতা বাস্তবায়ন করেছি।


slashnick হিসাবে উল্লেখ করা হয়েছে, আপনি তার বৈশিষ্ট্যের নামের জন্য একটি বস্তুর উপর পুনরাবৃত্তি করার জন্য "জন্য" slashnick ব্যবহার করতে পারেন। তবে আপনি বস্তুর প্রোটোটাইপ শৃঙ্খলে সমস্ত গুণাবলী নামের উপর পুনরাবৃত্তি করা হবে। যদি আপনি কেবলমাত্র বস্তুর নিজস্ব বৈশিষ্ট্যগুলিতে পুনরাবৃত্তি করতে চান তবে আপনি Object#hasOwnProperty() পদ্ধতিটি ব্যবহার করতে পারেন। সুতরাং নিম্নলিখিত হচ্ছে।

for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
        /* useful code here */
    }
}

Object.getOwnPropertyNames(obj)

এই ফাংশনটি Object.keys(obj) দ্বারা দেখানো ছাড়াও অ-সংখ্যাসূচক বৈশিষ্ট্যগুলি দেখায়।

জেসে, প্রতিটি সম্পত্তিটিতে কয়েকটি বৈশিষ্ট্য রয়েছে, যার মধ্যে একটি বুলিয়ান enumerable

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

উদাহরণ:

var o = Object.create({base:0})
Object.defineProperty(o, 'yes', {enumerable: true})
Object.defineProperty(o, 'not', {enumerable: false})

console.log(Object.getOwnPropertyNames(o))
// [ 'yes', 'not' ]

console.log(Object.keys(o))
// [ 'yes' ]

for (var x in o)
    console.log(x)
// yes, base

এছাড়াও কিভাবে নোট করুন:

  • Object.getOwnPropertyNames এবং Object.keys base খুঁজে পেতে প্রোটোটাইপ চেইনটি আপ না
  • for in কি

প্রোটোটাইপ শৃঙ্খলা সম্পর্কে আরো এখানে: https://.com/a/23877420/895245






javascript