[वस्तु वस्तु] का क्या अर्थ है?


122

मैं किसी फ़ंक्शन से लौटाए गए मान को अलर्ट करने का प्रयास कर रहा हूं और मुझे यह अलर्ट में मिलता है:

[object Object]  

यहाँ जावास्क्रिप्ट कोड है:

<script type="text/javascript">
$(function ()
{
var $main = $('#main'),
    $1 = $('#1'),
    $2 = $('#2');

$2.hide(); // hide div#2 when the page is loaded

$main.click(function ()
{
    $1.toggle();
    $2.toggle();
});

 $('#senddvd').click(function ()
{
   alert('hello');
   var a=whichIsVisible();
   alert(whichIsVisible());
});

function whichIsVisible()
{
    if (!$1.is(':hidden')) return $1;
    if (!$2.is(':hidden')) return $2;
}

 });

 </script>

whichIsVisible वह फंक्शन है जिस पर मैं जांच करने की कोशिश कर रहा हूं।


3
इसका मतलब है कि आप जो वापस लौट रहे हैं उसका डेटा टाइप है।

ब्याज से बाहर: क्या आप इसे वापस करने की उम्मीद कर रहे हैं?
Dancrumb

1
आपको उन वस्तुओं को आत्मसात करने के लिए एक जावास्क्रिप्ट कंसोल का उपयोग करना चाहिए जिसमें आप रुचि रखते हैं (जैसे फायरबग)।
ब्रायन डोनोवन


उत्तर 2 अधिक स्पष्ट उत्तर है, क्या आप इस पर एक नज़र डाल सकते हैं, और इसे स्वीकार किए गए उत्तर के रूप में चुन सकते हैं यदि आपको ऐसा लगता है।
सूरज जैन

जवाबों:


53

किसी ऑब्जेक्ट से स्ट्रिंग में डिफ़ॉल्ट रूपांतरण है "[object Object]"

जैसा कि आप jQuery वस्तुओं के साथ काम कर रहे हैं, आप करना चाह सकते हैं

alert(whichIsVisible()[0].id);

एलिमेंट की आईडी प्रिंट करने के लिए।

जैसा कि टिप्पणियों में बताया गया है, आपको फ़ायरफ़ॉक्स या क्रोम जैसे ब्राउज़रों में शामिल उपकरणों का उपयोग वस्तुओं के console.log(whichIsVisible())बजाय आत्मनिरीक्षण करने के लिए करना चाहिए alert

सिडेनोट : आईडी अंकों से शुरू नहीं होनी चाहिए।


3
[में एचटीएमएल 5, आईडी अंकों के साथ शुरू कर सकते हैं।] ( Whatwg.org/specs/web-apps/current-work/multipage/... )
मैट गेंद

आम तौर पर मुझे इस बात की चिंता होगी कि वस्तुएं एक आईडी विशेषता नहीं हो सकती हैं; उदाहरण के लिए, यदि आपको $ ('। someStyleClass') जैसे सीएसएस चयनकर्ता का उपयोग करके एक वस्तु सूची मिली है। आप जिस भी वस्तु के साथ काम कर रहे हैं, उसकी पहचान पर स्पष्ट होने के लिए, jquery
.data

135

जैसा कि अन्य ने उल्लेख किया है, यह किसी वस्तु का डिफ़ॉल्ट क्रमांकन है। लेकिन ऐसा क्यों है [object Object]और बस नहीं है [object]

ऐसा इसलिए है क्योंकि जावास्क्रिप्ट में विभिन्न प्रकार की वस्तुएं हैं!

  • फंक्शन ऑब्जेक्ट्स :
    stringify(function (){})->[object Function]
  • ऐरे ऑब्जेक्ट्स :
    stringify([])->[object Array]
  • RegExp ऑब्जेक्ट
    stringify(/x/) ->[object RegExp]
  • दिनांक ऑब्जेक्ट्स
    stringify(new Date) ->[object Date]
  • कई और
  • और ऑब्जेक्ट्स !
    stringify({})->[object Object]

ऐसा इसलिए है क्योंकि कंस्ट्रक्टर फ़ंक्शन को Object(एक राजधानी "ओ" के साथ) कहा जाता है , और शब्द "ऑब्जेक्ट" (छोटे "ओ" के साथ) चीज़ की संरचनात्मक प्रकृति को संदर्भित करता है।

आमतौर पर, जब आप जावास्क्रिप्ट में "ऑब्जेक्ट्स" के बारे में बात कर रहे होते हैं, तो आप वास्तव में " ऑब्जेक्ट ऑब्जेक्ट्स " का अर्थ करते हैं , न कि अन्य प्रकारों का।

stringifyइस तरह कहाँ दिखना चाहिए:

function stringify (x) {
    console.log(Object.prototype.toString.call(x));
}


यदि toString () को कस्टम ऑब्जेक्ट में ओवरराइड नहीं किया जाता है: प्रति प्रलेखन 15.2.4.2 Object.prototype.toString () # Ⓣ) St जब स्ट्रस्टिंग विधि को कॉल किया जाता है, तो निम्न चरण उठाए जाते हैं: यदि यह मान अपरिभाषित है, तो वापस लौटें " [ऑब्जेक्ट अपरिभाषित]। यदि यह मान शून्य है, तो "[ऑब्जेक्ट नल]" लौटें। आज्ञा देना ओ परिणाम हो सकता है ToObject इस तर्क के रूप में इस मान से गुजर रहा है। कक्षा को [[वर्ग]] O की आंतरिक संपत्ति मान दें। स्ट्रिंग मूल्य जो तीन स्ट्रिंग्स "[वस्तु", वर्ग और "]" को समेटने का परिणाम है।
ट्रीफिश झांग

7
प्लस की शब्दावली के लिए एकthingy
जय विक

2
अच्छे खर्च! BTW, JSON.stringify यहां इस्तेमाल होने वाला कोई नहीं है।
थीमफील्ड

क्या आप इसे और अधिक स्पष्ट कर सकते हैं कि आपका स्ट्रिंग क्या कार्य करता है, कि यह नहीं है JSON.stringify, कोई गलत प्रभाव डाल सकता है।
सूरज जैन

क्यों Object.prototype.toString.call(undefined)देता है [object Undefined]?
सूरज जैन

21

[object Object] जावास्क्रिप्ट में किसी वस्तु का डिफ़ॉल्ट स्ट्रींग प्रतिनिधित्व है।

यदि आप अपनी वस्तु के गुणों को जानना चाहते हैं, तो इस तरह से इस पर ध्यान दें:

for(var property in obj) {
    alert(property + "=" + obj[property]);
}

आपके विशेष मामले में, आपको एक jQuery ऑब्जेक्ट मिल रहा है। इसके बजाय यह करने की कोशिश करें:

$('#senddvd').click(function ()
{
   alert('hello');
   var a=whichIsVisible();
   alert(whichIsVisible().attr("id"));
});

यह दृश्य तत्व की आईडी को सचेत करना चाहिए।


> [ऑब्जेक्ट ऑब्जेक्ट] जावास्क्रिप्ट में किसी ऑब्जेक्ट के प्रतिनिधित्व को स्थिर करने के लिए डिफ़ॉल्ट है। - यह अभी भी नहीं समझाता है कि यह कहाँ से आता है।
दिमित्री ज़ैतसेव

11

यह उस वस्तु के toString()कार्य द्वारा लौटाया गया मान है ।


मैं समझता हूं कि आप क्या करने की कोशिश कर रहे हैं, क्योंकि मैंने कल आपके प्रश्न का उत्तर दिया था कि यह निर्धारित करने के लिए कि कौन सा div है। :) समारोह एक वास्तविक jQuery वस्तु देता है, क्योंकि मैंने सोचा कि अधिक होगा प्रोग्राम के रूप में उपयोगी है। यदि आप डिबगिंग उद्देश्यों के लिए इस फ़ंक्शन का उपयोग करना चाहते हैं, तो आप बस कुछ ऐसा कर सकते हैं:
whichIsVisible()

function whichIsVisible_v2()
{
    if (!$1.is(':hidden')) return '#1';
    if (!$2.is(':hidden')) return '#2';
}

उस ने कहा, तुम सच में एक उचित डिबगर का उपयोग करना चाहिए बजाय alert()अगर आप एक समस्या डिबग करने की कोशिश कर रहे हैं। यदि आप फ़ायरफ़ॉक्स का उपयोग कर रहे हैं, तो फायरबग उत्कृष्ट है। यदि आप IE8, Safari, या Chrome का उपयोग कर रहे हैं, तो उनके पास अंतर्निहित डीबगर हैं।


इस सवाल का जवाब नहीं लगता है।
दिमित्री ज़ैतसेव

9

आप इस तरह से [वस्तु वस्तु] के अंदर मूल्य देख सकते हैं

Alert.alert(  JSON.stringify(userDate)  );

ऐसे में कोशिश करें

    realm.write(() => {
       const userFormData = realm.create('User',{
       user_email: value.username,
       user_password: value.password,
      });
     });

      const userDate = realm.objects('User').filtered('user_email == $0', value.username.toString(), );
      Alert.alert(  JSON.stringify(userDate)  );

संदर्भ

https://off.tokyo/blog/react-native-object-object/


आप उदाहरण के लिए, userDate.timezone, या उपयोगकर्ता.नाम आदि का उपयोग कैसे करेंगे? मेरे कार्यक्रम में, अगर मैं JSON.stringify (ऑब्जेक्ट) करता हूं, तो जाहिर है मैं सब कुछ देख सकता हूं। जब मैं कंसोल.लॉग (ऑब्जेक्ट) की कोशिश करता हूं, तो मुझे [ऑब्जेक्ट ऑब्जेक्ट] मिलता है ... लेकिन जब मैं कंसोल.लॉग (ऑब्जेक्ट.नाम) की कोशिश करता हूं, तो मैं अपरिभाषित हो जाता हूं। (JSON.stringify (object.name) काम नहीं करता है; मैं भी अपरिभाषित हो जाता हूं :()
5

9

मूल बातें

आप इसे नहीं जानते होंगे, लेकिन जावास्क्रिप्ट में, जब भी हम स्ट्रिंग, नंबर या बूलियन प्राइमेट के साथ बातचीत करते हैं, तो हम ऑब्जेक्ट शैडो और कॉर्शन की एक छिपी दुनिया में प्रवेश करते हैं।

स्ट्रिंग, संख्या, बूलियन, अशक्त, अपरिभाषित और प्रतीक।

जावास्क्रिप्ट में 7 आदिम प्रकार के होते हैं: undefined, null, boolean, string, number, bigintऔर symbol। बाकी सब एक वस्तु है। आदिम प्रकार boolean, stringऔर numberउनके वस्तु समकक्षों द्वारा लिपटे जा सकते हैं। इन वस्तुओं के उदाहरण हैं Boolean, Stringऔर Numberक्रमशः कंस्ट्रक्टर्स।

typeof true; //"boolean"
typeof new Boolean(true); //"object"

typeof "this is a string"; //"string"
typeof new String("this is a string"); //"object"

typeof 123; //"number"
typeof new Number(123); //"object"

यदि आदिमों के पास कोई गुण नहीं है, तो "this is a string".lengthमान क्यों लौटाता है?

क्योंकि जावास्क्रिप्ट आसानी से आदिम और वस्तुओं के बीच तालमेल बैठाएगा। इस मामले में संपत्ति की लंबाई तक पहुंचने के लिए स्ट्रिंग मान को एक स्ट्रिंग ऑब्जेक्ट के लिए मजबूर किया जाता है। स्ट्रिंग ऑब्जेक्ट केवल दूसरे के एक अंश के लिए उपयोग किया जाता है जिसके बाद इसे कचरा संग्रह के देवताओं को बलिदान किया जाता है - लेकिन टीवी खोज की भावना से पता चलता है, हम मायावी प्राणी को फँसाएंगे और इसे आगे के विश्लेषण के लिए संरक्षित करेंगे ...

इसे प्रदर्शित करने के लिए आगे के उदाहरण पर विचार करें जिसमें हम स्ट्रिंग कंस्ट्रक्टर प्रोटोटाइप में एक नई संपत्ति जोड़ रहे हैं।

String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty;            // 5

इसके द्वारा आदिमों के पास उनके संबंधित ऑब्जेक्ट कंस्ट्रक्टर्स द्वारा परिभाषित सभी गुणों (विधियों सहित) तक पहुंच होती है।

इसलिए हमने देखा कि जब आवश्यक हो तो आदिम प्रकार उनके संबंधित वस्तु समकक्ष के लिए उचित रूप से मोटे होंगे।

toString()विधि का विश्लेषण

निम्नलिखित कोड पर विचार करें

var myObj    = {lhs: 3, rhs: 2};
var myFunc   = function(){}
var myString = "This is a sample String";
var myNumber = 4;
var myArray  = [2, 3, 5];

myObj.toString();     // "[object Object]"
myFunc.toString();    // "function(){}"
myString.toString();  // "This is a sample String"
myNumber.toString();  // "4"
myArray.toString();   // "2,3,5"

जैसा कि ऊपर चर्चा की गई है, वास्तव में क्या हो रहा है जब हम toString()एक आदिम प्रकार पर विधि कहते हैं , तो विधि को लागू करने से पहले इसे अपने ऑब्जेक्ट समकक्ष में समेटना पड़ता है।
यानी myNumber.toString()के बराबर है Number.prototype.toString.call(myNumber)और इसी तरह अन्य आदिम प्रकार के लिए।

लेकिन क्या होगा यदि आदिम प्रकार के बजाय toString()इसके संबंधित ऑब्जेक्ट निर्माता फ़ंक्शन समकक्ष की विधि में पारित किया जाए , तो हम toString()ऑब्जेक्ट फ़ंक्शन कंस्ट्रक्टर ( Object.prototype.toString.call(x)) की पद्धति पर आदिम प्रकार को पैरामीटर के रूप में पारित करने के लिए मजबूर करते हैं ?

Object.prototyp.toString () पर करीब से देखें

दस्तावेज़ीकरण के अनुसार , जब toString विधि कहा जाता है, तो निम्न कदम उठाए जाते हैं:

  1. यदि thisमान है undefined, तो वापस लौटें "[object Undefined]"
  2. यदि thisमान है null, तो वापस लौटें "[object Null]"
  3. यदि यह मान उपरोक्त में से कोई नहीं है, तो मान के रूप Oमें कॉलिंग का परिणाम तर्क के रूप में दें।toObjectthis
  4. कक्षा को [[Class]]आंतरिक संपत्ति का मान होने दें O
  5. स्ट्रिंग मान तीन तार श्रृंखलाबद्ध का परिणाम है कि लौटें "[object ", classऔर "]"

इसे निम्नलिखित उदाहरण से समझें

var myObj       = {lhs: 3, rhs: 2};
var myFunc      = function(){}
var myString    = "This is a sample String";
var myNumber    = 4;
var myArray     = [2, 3, 5];
var myUndefined = undefined;
var myNull      = null;

Object.prototype.toString.call(myObj);        // "[object Object]"
Object.prototype.toString.call(myFunc);       // "[object Function]"
Object.prototype.toString.call(myString);     // "[object String]"
Object.prototype.toString.call(myNumber);     // "[object Number]"
Object.prototype.toString.call(myArray);      // "[object Array]"
Object.prototype.toString.call(myUndefined);  // "[object Undefined]"
Object.prototype.toString.call(myNull);       // "[object Null]"

संदर्भ: https://es5.github.io/x15.2.html#x15.2.4.2 https://es5.github.io/x9.html#x9.9 https://javascriptweblog.wordpress.com/ 2010/09/27 /-गुप्त जीवन के- जावास्क्रिप्ट-पुरातन /


4

[object Object]एक जावास्क्रिप्ट का डिफ़ॉल्ट स्ट्रिंग प्रतिनिधित्व है Object। यदि आप इस कोड को चलाते हैं तो यह आपको मिलेगा:

alert({}); // [object Object]

आप इस toStringतरह से विधि को ओवरराइड करके डिफ़ॉल्ट प्रतिनिधित्व को बदल सकते हैं :

var o = {toString: function(){ return "foo" }};
alert(o); // foo

4
जो लगभग निश्चित रूप से नहीं है कि वह क्या करना चाहता है।
हल्बी की दौड़ ऑर्बिट

1
सच है, सिर्फ सचित्र जहां [object Object]स्ट्रिंग से आया था।
ब्रायन डोनोवन

आप बता रहे हैं कि डिफ़ॉल्ट प्रतिनिधित्व को कैसे बदला जाए, न कि यह कि मूल कहां से आता है।
दिमित्री ज़ैतसेव

2

आपके पास एक जावास्क्रिप्ट ऑब्जेक्ट है

$1और $2jquery ऑब्जेक्ट हैं, शायद alert($1.text());टेक्स्ट या alert($1.attr('id');आदि प्राप्त करने के लिए ...

आपको jQuery ऑब्जेक्ट का इलाज करना $1और $2पसंद करना है।


0

आप किसी ऑब्जेक्ट को वापस करने का प्रयास कर रहे हैं। क्योंकि एक स्ट्रिंग के रूप में किसी वस्तु का प्रतिनिधित्व करने का कोई अच्छा तरीका नहीं है, ऑब्जेक्ट का .toString()मान स्वचालित रूप से सेट किया गया है "[object Object]"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.