বস্তু

অবজেক্টগুলি একটি পৃথক ডেটা টাইপ একইভাবে প্রতিটি আদিম একটি ডেটা টাইপ, একটি জটিল পার্থক্য সহ: আদিম থেকে ভিন্ন, বস্তুগুলি পরিবর্তনযোগ্য । একটি অবজেক্টে একটি ভেরিয়েবলের মতো শনাক্তকারীর সাথে যুক্ত ডেটা থাকতে পারে, তবে এটি তার object ডেটা টাইপ রাখে তা যাই হোক না কেন ডেটা ধারণ করে।

আদিম ব্যতীত, সমস্ত জাভাস্ক্রিপ্ট মানগুলি বস্তু, যদিও এমনকি আদিম আক্ষরিকগুলিও প্রোটোটাইপাল উত্তরাধিকারের কারণে বস্তুর মতো আচরণ প্রদর্শন করে, এটি প্রায়শই বলা হয় যে জাভাস্ক্রিপ্ট কার্যকরভাবে বস্তু দ্বারা গঠিত।

একটি বস্তুর আক্ষরিক হল শূন্য বা তার বেশি কী-মানের জোড়ার চারপাশে কোঁকড়ানো বন্ধনীর জোড়া যাকে "প্রপার্টি" বলা হয়, যেটিতে যেকোনো জাভাস্ক্রিপ্ট মান থাকতে পারে।

{
   
"myProperty" : true
}

প্রপার্টি কী যেকোনো প্রতীক বা স্ট্রিং হতে পারে। একটি ভেরিয়েবলে একটি শনাক্তকারী বরাদ্দ করার সময়, সম্পত্তি কী হিসাবে ব্যবহৃত স্ট্রিংগুলি অনুমানযোগ্য এবং বর্ণনামূলক হওয়া উচিত:

let carAttributes = {
   
"color" : "red"
};

carAttributes
> Object { color: "red" }

প্রপার্টি কীগুলির জন্য একটি একক ( ' ) বা দ্বিগুণ উদ্ধৃত ( " ) স্ট্রিং আক্ষরিক প্রয়োজন, একটি টেমপ্লেট আক্ষরিক নয় :

let carAttributes = {
   
`keyString` : false
};
> Uncaught SyntaxError: expected property name, got template literal

সম্পত্তির মান যেকোন ডেটা টাইপ হতে পারে। একটি বস্তুর বৈশিষ্ট্যগুলি তাদের নিজস্ব বৈশিষ্ট্য সহ বস্তু ধারণ করতে পারে:

let myObject = {
   
'key' : {
       
'subkey' : true,
       
'othersubkey' : false
   
}
};

myObject
;
> Object { key: Object { subkey: true, othersubkey: false } }

যখন একটি সম্পত্তির মান একটি ফাংশন হয়, তখন সেই সম্পত্তিটিকে "পদ্ধতি" বলা হয়।

const myObject = {
   
"myProperty" : true,
    myMethod
() {
        console
.log( "This is a method." );
   
}
}

myObject
.myProperty;
> true

myObject
.myMethod();
> "This is a method."

আপনি new কীওয়ার্ড ব্যবহার করে একটি বস্তু তৈরি করতে পারেন:

let myObject = new Object();

পূর্ববর্তী উদাহরণগুলিতে, সদ্য তৈরি অবজেক্ট লিটারেলগুলি ভেরিয়েবলগুলিতে বরাদ্দ করা হয়েছে। এটির প্রয়োজন নেই, কারণ অন্য যেকোন ডেটা টাইপের মতো, আপনি যেখানে কোনও বস্তুর প্রত্যাশিত কোনও শনাক্তকারী ছাড়াই কোনও বস্তু ব্যবহার করতে পারেন। যাইহোক, একটি বস্তুর আক্ষরিক যেকোন প্রেক্ষাপটে বন্ধনীর প্রয়োজন হয় যেখানে এটি একটি ব্লক স্টেটমেন্টের জন্য বিভ্রান্ত হতে পারে, কারণ দুটি ভাগ কোঁকড়া বন্ধনী সিনট্যাক্স ( {} )। একটি ভেরিয়েবল শুরু করার জন্য এটির প্রয়োজন হয় না।

{ "value" : 2 }
> Uncaught SyntaxError: unexpected token: ':'

({ "value" : 2 })
> Object { value: 2 }

let valObj
= { "value" : 2 };

valObj
;
> Object { value: 2 }

আদিম থেকে ভিন্ন, new Object() ব্যবহার করে একটি অবজেক্ট তৈরি করা এবং আক্ষরিক বস্তু তৈরি করার ফলাফলের মধ্যে কোন অর্থপূর্ণ পার্থক্য নেই, কারণ উভয় ক্ষেত্রেই ফলাফলটি Object প্রোটোটাইপ থেকে উত্তরাধিকারসূত্রে প্রাপ্ত বৈশিষ্ট্য সহ একটি বস্তু হবে। যাইহোক, দুটি বাক্য গঠনের মধ্যে একটি ব্যবহারিক পার্থক্য রয়েছে।

new কীওয়ার্ডটি অবশ্যই একটি খালি বস্তুকে সংজ্ঞায়িত করবে যা পরে ডেটা দিয়ে পূর্ণ হবে:

let myObject = new Object();

myObject
.booleanValue = true;
myObject
.stringValue = "My string.";

একটি বস্তু আক্ষরিক ডেটা দিয়ে তৈরি করা যেতে পারে যখন এটি তৈরি করা হয়:

let myObject = {
   
'booleanValue' : true,
   
'stringValue' : "My string."
};

যদিও এর ব্যবহারিক ব্যবহার খুব কম, new Object() ব্যবহার করা যেতে পারে আদিম ডেটা মানকে তাদের নিজ নিজ ধরণের অবজেক্টে পরিণত করতে, যেমনটি তাদের কনস্ট্রাক্টর ফাংশন সহ new কীওয়ার্ড ব্যবহার করে ফেরত দেওয়া হয়। উদাহরণস্বরূপ, নিম্নলিখিতটি কার্যকরীভাবে new Number( 10 ) এর সমতুল্য:

let myObject = new Object( 10 );

myObject
;
> Number { 10 }

null এবং undefined মানগুলির ফলে একটি খালি অবজেক্ট দেখা যায়, একটি যুক্তি সরবরাহ না করেই new Object() আহ্বান করার মতো কার্যকরীভাবে অভিন্ন।

একটি আর্গুমেন্ট হিসাবে একটি বস্তুকে new Object() এ আক্ষরিকভাবে পাস করা বস্তুটিকে আক্ষরিকভাবে পরিবর্তন না করে পাস করে:

let myObject = new Object( { myValue : 10 } );

myObject
;
> Object { myValue: 10 }

আদিম মানের জন্য কনস্ট্রাক্টর ব্যবহার করার মতো, অবজেক্টের জন্য কনস্ট্রাক্টর ব্যবহার করার ক্ষেত্রে অবজেক্টের আক্ষরিক স্বরলিপি ব্যবহার করার চেয়ে খুব কমই কোনো সুবিধা পাওয়া যায়। এমনকি খালি অবজেক্ট তৈরি করার সময় যখন মানগুলি পরে ভরপুর হবে, বিকাশকারীরা সরলতার জন্য বস্তুর আক্ষরিক স্বরলিপির পক্ষে থাকে।

আপনার উপলব্ধি পরীক্ষা করুন

একটি বস্তুর বৈশিষ্ট্য সেট করতে আপনি কি ধরনের স্বরলিপি ব্যবহার করতে পারেন?

পিরিয়ড নোটেশন
বন্ধনী স্বরলিপি
লাইন স্বরলিপি
ডট নোটেশন

myProp এর মান পাওয়ার জন্য নিচের কোনটি সঠিক সিনট্যাক্স

myObj["myProp"];
myObj("myProp");
myObj{"myProp"};