জাভাস্ক্রিপ্ট অবজেক্ট আক্ষরিক: {এ, বি, সি exactly ঠিক কী?


88

আমার কাছে প্রশ্নটি সবচেয়ে ভালভাবে এই জিসফিলের মাধ্যমে দেওয়া হয়েছে , যার কোডটি নীচে রয়েছে:

var a = 1, b = 'x', c = true;

var d = {a: a, b: b, c: c}; // <--- object literal
var e = [a, b, c];          // <--- array
var f = {a, b, c};          // <--- what exactly is this??

// these all give the same output:
alert(d.a  + ', ' + d.b +  ', ' + d.c );
alert(e[0] + ', ' + e[1] + ', ' + e[2]);
alert(f.a  + ', ' + f.b +  ', ' + f.c );

ডেটা স্ট্রাকচার কী ধরণের f? এটি কি কেবল একটি সংক্ষিপ্ত হাতের জন্য d?


25
প্রথমটি আসলে জেএসএন নয়।
গোলেজট্রোল


4
ঠিক আছে @ গোলেজট্রোল এটি জেএসএন কঠোরভাবে নয় কারণ কীগুলি ডাবল উদ্ধৃতিতে নেই। তাই ঠিক কি হবে আপনাকে কল dআমার পোস্টে ডাটা স্ট্রাকচার?
11-15 এ ড্রামব্রুয়ের ওয়েল

6
এটি বুঝতে গুরুত্বপূর্ণ যে কোনও সংস্করণই বৈধ জেএসএন নয়। JSON স্ট্রিং হিসাবে উপাত্ত উপস্থাপনের {"a" : 1, "b" : "x", "c" : true }
উপায়টি হ'ল

14
@drmrbrewer এটি একটি হল বস্তুর আক্ষরিক । এটি JSON নয় কারণ এটি জাভাস্ক্রিপ্ট কোড , যদিও জেএসএন একটি সিরিয়ালাইজেশন ফর্ম্যাট। উদাহরণস্বরূপ var a = '{ "a" : "value"}'-> aএকটি স্ট্রিং ধারণ করে যা মাধ্যমে কোনও অবজেক্টের deserialised করা যেতে পারে JSON.parse
মুনউইভ 99

উত্তর:


71

এটি ES6 এ একটি অবজেক্ট ইনিশিয়ালাইজার প্রপার্টি শর্টহ্যান্ড

var f = {a, b, c, d:1}; // Will be equal to {a:a, b:b, c:c, d:1}

এটি কাজ করে কারণ সম্পত্তি মানটির পরিচয় সনাক্তকারী হিসাবে একই নাম রয়েছে। এটি অবজেক্ট ইনিশিয়ালাইজারের সিনট্যাক্সে একটি নতুন সংযোজন (সর্বশেষ ECMAScript 6 খসড়া রেভ 13 এ বিভাগ 11.1.5 ) গঠনতে । এবং অবশ্যই ECMAScript 3 থেকে নির্ধারিত সীমাবদ্ধতার মতো আপনি নিজের সম্পত্তির নাম হিসাবে কোনও সংরক্ষিত শব্দ ব্যবহার করতে পারবেন না।

এইরকম একটি শর্টহ্যান্ড নাটকীয়ভাবে আপনার কোড পরিবর্তন করবে না, এটি কেবল সবকিছুকে কিছুটা মিষ্টি করে তোলে!

function createCar(name, brand, speed) {
  return { type: 'Car', name: name, brand: brand, speed: speed };
}

// With the new shorthand form
function createSweetCar(name, brand, speed) {
  return { type: 'Car', name, brand, speed }; // Yes it looks sweet.
}

এই স্বরলিপিগুলির জন্য সমর্থন করার জন্য দয়া করে সামঞ্জস্যতা সারণীটি দেখুন। অসমর্থিত পরিবেশে, এই স্বরলিপিগুলি সিনট্যাক্স ত্রুটির দিকে পরিচালিত করবে।

এই শর্টহ্যান্ড স্বরলিপিটি খুব সুন্দরভাবে অবজেক্টের মিলের প্রস্তাব দেয়:

ইন ECMAScript5 আমরা কি করতে ব্যবহৃত কি:

var tmp = getData();
var op  = tmp.op;
var lhs = tmp.lhs;
var rhs = tmp.rhs;

কোডের একক লাইনের সাথে ECMAScript6 এ করা যেতে পারে :

var { op, lhs, rhs } = getData();

10
ভাষার বৈশিষ্ট্য হয়ে উঠতে কেন এটি এত কার্যকর হবে? দেখে মনে হচ্ছে এটি লোকেরা সরাসরি আক্ষরিক, প্রত্যাবর্তনের মান এবং এই জাতীয় দ্বারা অবজেক্টটি সূচনা করতে বা কেবল প্রথমে অবজেক্টটি তৈরি করা, তারপরে বৈশিষ্ট্যগুলি সরাসরি সেট করার পক্ষে আরও সাধারণ। একই নামগুলির সাথে ভেরিয়েবল তৈরি করা, তাত্ক্ষণিকভাবে এবং তারপরে অবশেষে এইভাবে অবজেক্টটি আরম্ভ করা কেবল অস্বাভাবিক মনে হয় ... বা এটি হয়?
Panzercrisis

4
@ পানজারিক্রিসিস দেখে মনে হচ্ছে এটি ব্যক্তিগতভাবে ব্যক্তিগতভাবে প্রচুর অযৌক্তিক এবং বাগ খুঁজে পেতে পারে। if(a = 1) {...}বৈধ সিনট্যাক্স হিসাবে অনুমতি দেয় একইভাবে ।
অ্যান্থনি গ্রিস্ট

4
@ পাঞ্জেরিক্রিসিস আমি মনে করি এটি কমপক্ষে অর্থপূর্ণ হবে যদি আপনি কল্পনা করেন যে এ, বি, এবং সি আরও জটিল ডেটা স্ট্রাকচার হিসাবে এবং এফ অন্যান্য জটিল বৈশিষ্ট্যযুক্ত। এটি নিশ্চিত যে এটি একটি দুর্দান্ত ধারণা, তবে আমি দেখতে পেলাম যে এটি কার্যকর।
জোশ রুম্বট

4
@ পানজারক্রিসিস একটি ল্যাম্বডা ফাংশন থেকে একটি টিপল ফিরিয়ে দেওয়া খুব দরকারী হতে পারে, এরকম কিছু (a, b) => {a, b}। এটি অন্তত আমি একই বৈশিষ্ট্যটি কীভাবে ব্যবহার করেছি C#
ভিনসেন্ট ভ্যান ডের ওয়েল

4
@ অ্যালেক্স কীভাবে এটি "উদ্দীপনা" বা "জটিল"? একটি সাধারণ বিষয় যা আপনি সাধারণত অনেক কোডবেসে দেখতে পাই তা কোনও এমন কোনও বস্তুর সূচনা হয় যেখানে কীটি মান হিসাবে দেওয়া ভেরিয়েবলের সাথে মেলে {id: id, data: data, isSelected: isSelected}। বেশিরভাগ ক্ষেত্রে আপনি নিজের স্টাফের নাম কিছুটা আলাদাভাবে রাখতে চান না {identifier: id, viewData: data, isElementSelected: isSelected }ঠিক তা হ'ল "quirky", "জটিল" এবং "বিভ্রান্তিকর" আপনি যেটির বিষয়ে কথা বলছেন।
ভিএলএজেড

77
var f = {a, b, c};

এটি ES6 (ECMAScript 2015) নিয়ে এসেছে এবং এর অর্থ হ'ল:

var f = {a: a, b: b, c: c};

এটিকে অবজেক্ট লিটারাল প্রপার্টি মান শর্টহ্যান্ডস (বা কেবল সম্পত্তি মূল্য শর্টহ্যান্ড, শর্টহ্যান্ড বৈশিষ্ট্য) বলা হয়।

আপনি ক্লাসিকাল আরম্ভের সাথে শর্টহ্যান্ডগুলি একত্রিত করতে পারেন:

var f = {a: 1, b, c};

আরও তথ্যের জন্য অবজেক্ট ইনিশিয়ালাইজারটি দেখুন


12
var f = {a, b, c};          // <--- what exactly is this??

এটি জাভা স্ক্রিপ্টে একটি নতুন ইসিএমএসক্রিপ্ট 2015 স্বরলিপি ব্যবহার করে সংজ্ঞা দেয়:

অনুযায়ী মোজিলা ডেভেলপার নেটওয়ার্ক :

"অবজেক্টগুলি নতুন অবজেক্ট (), অবজেক্ট.ক্রিয়েট () ব্যবহার করে বা আক্ষরিক স্বরলিপি (ইনিশিয়ালার নোটেশন) ব্যবহার করে আরম্ভ করা যেতে পারে An কোঁকড়া ধনুর্বন্ধনী ({})। "

var a = "foo", 
    b = 42, 
    c = {};

// Shorthand property names (ES6)
var o = { a, b, c }; 

সমান:

var a = "foo", 
    b = 42,
    c = {};

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