কীভাবে জাভাস্ক্রিপ্ট / jQuery এ কোনও সামগ্রীর সম্পত্তি পাবেন?


99

জাভাস্ক্রিপ্ট / jQuery এ, আমার যদি alertকিছু আপত্তি থাকে তবে আমি হয় [object]বা পাই[object Object]

জানার কোনও উপায় আছে কি:

  1. এই দুটি বস্তুর মধ্যে পার্থক্য কি

  2. এটি কোন ধরণের অবজেক্ট

  3. এই বস্তুতে সমস্ত সম্পত্তি কী এবং প্রতিটি সম্পত্তির মান রয়েছে

?


আমি কী জাভাস্ক্রিপ্ট অবজেক্টটি প্রিন্ট করতে পারি! stackoverflow.com/questions/957537/...
zod

আমি একটি সহায়ক ডকুমেন্টেশনও খুঁজে পেয়েছি ডকস.জেকুয়ারি
সাইফুল

উত্তর:


142

আপনি জাভাস্ক্রিপ্টের নেটিভ for inলুপকে অনুরোধ করে কোনও সামগ্রীর কী এবং মানগুলি সন্ধান করতে পারেন :

var obj = {
    foo:    'bar',
    base:   'ball'
};

for(var key in obj) {
    alert('key: ' + key + '\n' + 'value: ' + obj[key]);
}

বা jQuery এর .each()পদ্ধতি ব্যবহার করে :

$.each(obj, function(key, element) {
    alert('key: ' + key + '\n' + 'value: ' + element);
});

ছয় আদিম ধরনের ব্যতিক্রম সঙ্গে , সবকিছু ECMA- / জাভাস্ক্রিপ্ট মধ্যে একটি বস্তুর হয়। অ্যারে; ফাংশন; সবই একটা জিনিস। এমনকি সেই আদিমগুলির বেশিরভাগই পদ্ধতিগুলির সীমিত নির্বাচন সহ বস্তুগত। এগুলি হুডের নীচে বস্তুগুলিতে নিক্ষেপ করা হয়, যখন প্রয়োজন হয়। বেস শ্রেণীর নাম জানতে, আপনি Object.prototype.toStringকোনও বস্তুর উপর পদ্ধতিটি অনুরোধ করতে পারেন :

alert(Object.prototype.toString.call([]));

উপরের আউটপুট হবে [object Array]

অনান্য অনেক কিছু বর্গ নাম, মত [object Object], [object Function], [object Date], [object String], [object Number], [object Array], এবং [object Regex]


31
"সবকিছুই একটি অবজেক্ট", এটি সত্য নয় এবং এটি ভাষার অন্যতম বড় ভুল ধারণা। এখানে আমরা আদিম ধরণেরগুলি বলি: সংখ্যা, স্ট্রিং, বুলিয়ান, অপরিজ্ঞাত এবং নাল। এগুলি প্রায়শই আদিম মোড়কের সাথে বিভ্রান্ত হতে পারে, অন্তর্নির্মিত কন্সট্রাক্টরগুলির সাথে তৈরি বস্তুগুলি, যেমন: typeof new String("foo");"বস্তু" উত্পাদন করে, এটি একটি মোড়ানো আদিম মান, যখন typeof "foo";"স্ট্রিং" উত্পাদন করে। আরও দেখুন
খ্রিস্টান সি সালভাদে

আমি সিএমএসের সাথে একমত এবং একবার আপনি আদিম স্ট্রিং এবং স্ট্রিং অবজেক্টের মধ্যে পার্থক্যটি সরিয়ে ফেললে আপনি আপনার ক্ষমতাগুলি উপলব্ধি করতে পারবেন - বিশেষত কোডটি ছোট করার চেষ্টা করার সময়।
ভোলআরন

7
@ সিএমএস এটি একদম সত্য নয়। "আদিম" স্ট্রিং হয় তার নিজের অধিকার একটি বস্তু; এটির পদ্ধতিগুলির একটি পৃথক নির্বাচন রয়েছে। একইভাবে সংখ্যা এবং বুলিয়ান সঙ্গে। তবে অপরিবর্তিত এবং নাল পদ্ধতি ছাড়াই আদিম।
ইজকাটা

@ ইজকাটা সত্য নয়। var str = 'primitive'; str.foo = 'bar'; /*wouldn't work*/যদিও var oStr = new String('string object'); oStr.foo = 'bar'; /*works*/ আপনি যদি এটি বিমূর্ত করতে চলেছেন এবং তাদেরকে সমস্ত বস্তু বলছেন তবে আপনি আদিম পদার্থ হিসাবে আদিম চিন্তায় দূরে সরে যেতে পারেন, তবে এটি সত্য জাভাস্ক্রিপ্ট অবজেক্টের সুপারক্লাসের সমতুল্য নয়।
ভোলআরন

কেবল console.logঅবজেক্টগুলি পরিদর্শন করতে ব্যবহার করুন
জন স্মিথ

13

বস্তুর বৈশিষ্ট্য / মানগুলির তালিকা পেতে:

  1. ফায়ারফক্সে - ফায়ারব্যাগ:

    console.dir(<object>);
    
  2. স্ল্যাশনিক থেকে ধার করা অবজেক্ট কীগুলি পেতে স্ট্যান্ডার্ড জেএস :

       var fGetKeys = function(obj){
          var keys = [];
          for(var key in obj){
             keys.push(key);
          }
          return keys;
       }
    
    // Example to call it:
    
       var arrKeys = fGetKeys(document);
    
       for (var i=0, n=arrKeys.length; i<n; i++){
          console.log(i+1 + " - " + arrKeys[i] + document[arrKeys[i]] + "\n");
       }
    

সম্পাদনা:

  1. <object> উপরেরটি অবজেক্টের ভেরিয়েবল রেফারেন্স দিয়ে প্রতিস্থাপন করতে হবে
  2. console.log() কনসোল ব্যবহার করা হয়, আপনি যদি তা নিশ্চিত না হন তবে আপনি এটিটি একটি দ্বারা প্রতিস্থাপন করতে পারেন alert()

7

i) এই দুটি বস্তুর মধ্যে পার্থক্য কী?

সহজ উত্তরটি হ'ল [object]একটি হোস্ট অবজেক্টের ইঙ্গিত দেয় যা কোনও অভ্যন্তরীণ শ্রেণি নেই। একটি হোস্ট অবজেক্ট এমন একটি বস্তু যা আপনার সাথে কাজ করা ECMAScript প্রয়োগের অংশ নয়, তবে হোস্ট দ্বারা এক্সটেনশন হিসাবে সরবরাহ করা হয়। DOM হোস্ট অবজেক্টের একটি সাধারণ উদাহরণ, যদিও বেশিরভাগ নতুন বাস্তবায়নে DOM অবজেক্টগুলি দেশীয় অবজেক্ট থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় এবং অভ্যন্তরীণ শ্রেণীর নাম থাকে (যেমন HTMLElement , উইন্ডো ইত্যাদি)। আইআই এর স্বত্বাধিকারী অ্যাক্টিভক্সবজেক্ট একটি হোস্ট অবজেক্টের আরেকটি উদাহরণ।

[object] ইন্টারনেট এক্সপ্লোরার 7 এবং এর নিম্নের ডোম অবজেক্টগুলিকে সতর্ক করার সময় সর্বাধিক দেখা যায়, যেহেতু তারা হোস্ট অবজেক্ট যার কোনও অভ্যন্তরীণ শ্রেণীর নাম নেই।

ii) এটি কোন ধরণের অবজেক্ট

আপনি অবজেক্টের "ধরণ" (অভ্যন্তরীণ শ্রেণি) ব্যবহার করে পেতে পারেন Object.prototype.toString। স্পেসিফিকেশনটির প্রয়োজন হয় যে এটি সর্বদা বিন্যাসে একটি স্ট্রিং দেয় [object [[Class]]], যেখানে [[Class]]অভ্যন্তরীণ শ্রেণীর নাম যেমন অবজেক্ট , অ্যারে , তারিখ , রেজিএক্সপ ইত্যাদি আপনি ব্যবহার করে কোনও পদ্ধতিতে (হোস্ট অবজেক্ট সহ) এই পদ্ধতি প্রয়োগ করতে পারেন using

Object.prototype.toString.apply(obj);

অনেকগুলি isArrayবাস্তবায়ন এই কৌশলটি ব্যবহার করে কোনও বস্তু আসলে একটি অ্যারে কিনা তা আবিষ্কার করতে ব্যবহার করে (যদিও এটি অন্য ব্রাউজারগুলির মতো এটি আইয়ের মতো মজবুত নয় )।


iii) এই অবজেক্টটিতে সমস্ত বৈশিষ্ট্য কী এবং প্রতিটি সম্পত্তির মান রাখে

ECMAScript 3 এ, আপনি for...inলুপ ব্যবহার করে অসংখ্য গুণাবলীর উপরে পুনরাবৃত্তি করতে পারেন । মনে রাখবেন যে সর্বাধিক অন্তর্নির্মিত বৈশিষ্ট্যগুলি অগণনীয়। কিছু হোস্ট অবজেক্টের ক্ষেত্রেও একই কথা। ECMAScript 5 এ, আপনি ব্যবহার করে সমস্ত অ-উত্তরাধিকারসূত্রে প্রাপ্ত বৈশিষ্ট্যের নাম সম্বলিত একটি অ্যারে পেতে পারেন Object.getOwnPropertyNames(obj)। এই অ্যারেটিতে অ-গণনাযোগ্য এবং গণনাযোগ্য সম্পত্তির নাম থাকবে।


4

আমি আশা করি এটি স্প্যাম হিসাবে গণনা করা হবে না। অন্তহীন ডিবাগ সেশনগুলির পরে আমি বিনীতভাবে একটি ফাংশন লিখে শেষ করেছি: http://github.com/halilim/ জাভাস্ক্রিপ্ট- সরল- অবজেক্ট- ইনস্পেক্ট

function simpleObjInspect(oObj, key, tabLvl)
{
    key = key || "";
    tabLvl = tabLvl || 1;
    var tabs = "";
    for(var i = 1; i < tabLvl; i++){
        tabs += "\t";
    }
    var keyTypeStr = " (" + typeof key + ")";
    if (tabLvl == 1) {
        keyTypeStr = "(self)";
    }
    var s = tabs + key + keyTypeStr + " : ";
    if (typeof oObj == "object" && oObj !== null) {
        s += typeof oObj + "\n";
        for (var k in oObj) {
            if (oObj.hasOwnProperty(k)) {
                s += simpleObjInspect(oObj[k], k, tabLvl + 1);
            }
        }
    } else {
        s += "" + oObj + " (" + typeof oObj + ") \n";
    }
    return s;
}

ব্যবহার

alert(simpleObjInspect(anyObject));

বা

console.log(simpleObjInspect(anyObject));

2

মজিলা ফায়ারফক্সের জন্য ফায়ারব্যাগ পান ।

ব্যবহার console.log(obj);


4
আপনার ফায়ারব্যাগটি আমার থেকে কীভাবে আলাদা তা দেখতে আমি ব্যর্থ হয়েছি, তবে আমি অবজেক্টটি
তালিকাবদ্ধ

console.logঠিক তেমন কার্যকর, আপনি যেভাবেই "দির" পেতে লগের অবজেক্টটিতে ক্লিক করতে পারেন ...
gnarf

1

উইন্ডো অবজেক্ট এবং নির্দিষ্ট কিছু জিনিস খুঁজছেন এমন অন্যান্য হোস্ট অবজেক্টগুলির উপর পুনরাবৃত্তি করার জন্য স্পটলাইট.জেএস একটি দুর্দান্ত গ্রন্থাগার।

// find all "length" properties
spotlight.byName('length');

// or find all "map" properties on jQuery
spotlight.byName('map', { 'object': jQuery, 'path': '$' });

// or all properties with `RegExp` values
spotlight.byKind('RegExp');

// or all properties containing "oo" in their name
spotlight.custom(function(value, key) { return key.indexOf('oo') > -1; });

আপনি এটির জন্য এটি পছন্দ করবেন।


0

একটি নির্ধারিত প্রপ এর প্রথম ইন্টেনেন্সের জন্য স্ক্যান করা অবজেক্ট:

var obj = {a:'Saludos',
            b:{b_1:{b_1_1:'Como estas?',b_1_2:'Un gusto conocerte'}},
           d:'Hasta luego'
            }
function scan (element,list){
    var res;
    if (typeof(list) != 'undefined'){
        if (typeof(list) == 'object'){
            for(key in list){
               if (typeof(res) == 'undefined'){
                res = (key == element)?list[key]:scan(element,list[key]);
               }
            });
        }
    }
    return res;
}
console.log(scan('a',obj));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.