[অবজেক্ট অবজেক্ট] এর অর্থ কী?


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
এর অর্থ আপনি যা ফিরিয়ে দিচ্ছেন তার ডেটাটাইপ হ'ল একটি অবজেক্ট।

আগ্রহের বাইরে: আপনি এটি প্রত্যাশা করছেন কী?
ড্যানক্রাম্ব

1
আপনার আগ্রহী অবজেক্টগুলি (যেমন ফায়ারব্যাগ) অন্তর্ভুক্ত করার জন্য আপনার একটি জাভাস্ক্রিপ্ট কনসোল ব্যবহার করা উচিত।
ব্রায়ান ডোনভান


উত্তর 2 আরও সুস্পষ্ট উত্তর, আপনি কি এটি একবার দেখে নিতে পারেন এবং যদি আপনি একইরকম মনে করেন তবে এটি গ্রহণযোগ্য উত্তর হিসাবে বেছে নিতে পারেন।
সুরজ জৈন

উত্তর:


53

কোনও বস্তু থেকে স্ট্রিংয়ের ডিফল্ট রূপান্তরটি "[object Object]"

আপনি jQuery অবজেক্টের সাথে কাজ করছেন, আপনি এটি করতে চাইবেন

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

উপাদান আইডি মুদ্রণ করতে।

মন্তব্যে উল্লিখিত হিসাবে, আপনার ফায়ারফক্স বা ক্রোমের মতো ব্রাউজারগুলিতে অন্তর্ভুক্ত করা সরঞ্জামগুলি console.log(whichIsVisible())পরিবর্তে বস্তুর অন্তর্মুখী করতে ব্যবহার করা উচিত alert

সিডনোট : আইডিগুলির সংখ্যাগুলি দিয়ে শুরু করা উচিত নয়।


3
[এইচটিএমএল 5 এ, আইডিগুলি অঙ্কগুলি দিয়ে শুরু করতে পারে]] ( whatswg.org/specs/web-apps/current-work/m মাল্টিপেজ/… )
ম্যাট বল

আরও সাধারণভাবে আমি উদ্বিগ্ন যে অবজেক্টগুলি কোনও আইডি বৈশিষ্ট্য নাও থাকতে পারে; উদাহরণস্বরূপ, যদি আপনি কেবলমাত্র $ ('। someStyleClass') এর মতো সিএসএস নির্বাচক ব্যবহার করে কোনও বস্তুর তালিকা পেয়ে থাকেন। আপনি যে কোনও বস্তুর সাথে কী আচরণ করছেন তার পরিচয় স্পষ্ট করার জন্য, jquery .data () ফাংশন, api.jquery.com/data
jsh

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(মূলধন "O" সহ), এবং "অবজেক্ট" (ছোট "ও" সহ) শব্দটি জিনিসটির কাঠামোগত প্রকৃতি বোঝায়।

সাধারণত, আপনি যখন জাভাস্ক্রিপ্টে "অবজেক্টস" সম্পর্কে কথা বলছেন, আপনি আসলে " অবজেক্ট অবজেক্টস " অর্থ অন্যরকম নয়।

কোথায় দেখতে stringifyহবে:

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


যদি টাস্টস্ট্রিং () কোনও কাস্টম অবজেক্টে ওভাররাইড করা না হয়: প্রতি ডকুমেন্টেশন 15.2.4.2 অবজেক্ট.প্রোটোটাইপ.টোস্ট্রিং () # Ⓣ Ⓔ to যখন টসস্ট্রিং পদ্ধতিটি বলা হয়, নিম্নলিখিত পদক্ষেপ নেওয়া হয়: যদি এই মানটি অপরিবর্তিত থাকে তবে ফিরে যান " [অবজ্ঞায়িত] "। যদি এই মানটি নাল হয়, তবে "[বস্তু নাল]" ফিরে আসুন। এই মানটিকে আর্গুমেন্ট হিসাবে পাস করার জন্য টোবজেক্টকে কল করার ফলাফল ও হোক। ক্লাসটিকে ও এর [[শ্রেণি]] অভ্যন্তরীণ সম্পত্তির মান হতে দিন three স্ট্রিংয়ের মানটি তিনটি স্ট্রিং "[অবজেক্ট", শ্রেণি এবং "]" কে একত্রিত করার ফলাফল হিসাবে প্রত্যাবর্তন করুন।
ট্রিফিশ ঝাং

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()ফাংশন দ্বারা ফিরে আসা মান ।


আপনি কী করতে চাইছেন তা আমি বুঝতে পেরেছি, কারণ কোন ডিভ দৃশ্যমান তা নির্ধারণের বিষয়ে গতকাল আমি আপনার প্রশ্নের উত্তর দিয়েছি । :) ফাংশন প্রকৃত jQuery এর অবজেক্ট ফেরৎ, কারণ আমি ভেবেছিলাম যে আরো হবে প্রোগ্রামেটিক্যালি দরকারী। আপনি যদি ডিবাগিং উদ্দেশ্যে এই ফাংশনটি ব্যবহার করতে চান তবে আপনি ঠিক এর মতো কিছু করতে পারেন:
whichIsVisible()

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

এটি বলেছে, আপনি যদি কোনও সমস্যার ডিবাগ করার চেষ্টা করছেন তার চেয়ে আপনার সত্যিকারের একটি সঠিক ডিবাগার ব্যবহার করা উচিতalert() । আপনি যদি ফায়ারফক্স ব্যবহার করেন তবে ফায়ারব্যাগটি দুর্দান্ত। আপনি যদি আই 8, সাফারি বা ক্রোম ব্যবহার করছেন তবে তাদের বিল্ট-ইন ডিবাগার রয়েছে।


এটি প্রশ্নের উত্তর বলে মনে হচ্ছে না।
দিমিত্রি জইতসেভ

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/


উদাহরণস্বরূপ, ব্যবহারকারীর তারিখ.টাইমজোন, অথবা ইউজারআরনাম ইত্যাদি কীভাবে আপনি অ্যাক্সেস করবেন? আমার প্রোগ্রামে, আমি যদি JSON.stringify (অবজেক্ট) করি তবে স্পষ্টতই আমি সবকিছু দেখতে পারি। আমি যখন কনসোল.লগ (অবজেক্ট) চেষ্টা করি তখন আমি [অবজেক্ট অবজেক্ট] পাই ... তবে যখন আমি কনসোল.লগ (অবজেক্ট.নেম) চেষ্টা করি তখন আমি অপরিজ্ঞাত হয়ে যাই। (JSON.stringify (অবজেক্ট.নেম) কাজ করে না; আমি পাশাপাশি সংজ্ঞায়িতও হয়ে যাই :()
ডকোদা

8

বুনিয়াদি

আপনি এটি জানেন না তবে জাভাস্ক্রিপ্টে যখনই আমরা স্ট্রিং, সংখ্যা বা বুলিয়ান আদিমগুলির সাথে যোগাযোগ করি আমরা বস্তুর ছায়া এবং জবরদস্তির একটি লুকানো জগতে প্রবেশ করি।

স্ট্রিং, সংখ্যা, বুলিয়ান, নাল, অপরিজ্ঞাত এবং প্রতীক।

জাভাস্ক্রিপ্টে 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মান ফেরত দেয় ?

কারণ জাভাস্ক্রিপ্ট সহজেই আদিম এবং বস্তুর মধ্যে জোর করে দেবে। এক্ষেত্রে সম্পত্তির দৈর্ঘ্য অ্যাক্সেসের জন্য স্ট্রিংয়ের মান স্ট্রিং অবজেক্টে জোর করা হয়। স্ট্রিং অবজেক্টটি কেবলমাত্র দ্বিতীয় ভাগের জন্য ব্যবহৃত হয় যার পরে এটি আবর্জনা সংগ্রহের sশ্বরের কাছে উত্সর্গ করা হয় - তবে টিভি আবিষ্কারের শোতে আমরা অধরা প্রাণীটিকে ফাঁদে ফেলে আরও বিশ্লেষণের জন্য সংরক্ষণ করব…

এটি আরও প্রদর্শন করতে নিম্নলিখিত উদাহরণটি বিবেচনা করুন যেখানে আমরা স্ট্রিং কনস্ট্রাক্টর প্রোটোটাইপে একটি নতুন সম্পত্তি যুক্ত করছি।

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)) এর পদ্ধতিতে প্যারামিটার হিসাবে পাস করতে বাধ্য করি ?

অবজেক্ট.প্রোটোটাইপ.টো স্ট্রিং () এর আরও কাছাকাছি চেহারা

অনুযায়ী ডকুমেন্টেশন , যখন toString পদ্ধতি বলা হয়, নিম্নলিখিত পদক্ষেপ গ্রহণ করা হয়:

  1. যদি thisমান হয় তবে undefinedফিরে আসুন "[object Undefined]"
  2. যদি thisমান হয় তবে nullফিরে আসুন "[object Null]"
  3. এই মানটি যদি উপরের কোনওটি Oনা হয়, তবে পাসিংকে কল toObjectকরার ফলাফল হোকthis আর্গুমেন্ট হিসাবে মানটি পারে।
  4. শ্রেণীর [[Class]]অভ্যন্তরীণ সম্পত্তিটির মান হতে দিন O
  5. স্ট্রিং মান তিন স্ট্রিংস concatenating ফল যে ফিরুন "[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]"

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