জাভাস্ক্রিপ্টে empty} বা নতুন অবজেক্ট () দিয়ে একটি ফাঁকা অবজেক্ট তৈরি করবেন?


370

জাভাস্ক্রিপ্টে একটি খালি অবজেক্ট তৈরির জন্য দুটি ভিন্ন উপায় রয়েছে:

var objectA = {}
var objectB = new Object()

স্ক্রিপ্ট ইঞ্জিন কীভাবে তাদের পরিচালনা করে তাতে কোনও পার্থক্য রয়েছে? একে অপরকে ব্যবহার করার কোনও কারণ আছে কি?

একইভাবে বিভিন্ন সিনট্যাক্স ব্যবহার করে খালি অ্যারে তৈরি করাও সম্ভব:

var arrayA = []
var arrayB = new Array()

6
সতর্কতা: একটি সামান্য পার্থক্য রয়েছে যা খুব বিরক্তিকর বাগের কারণ হতে পারে! কোনও অবজেক্ট প্রোটোটাইপে এটিকে "{}" বরাদ্দকারী একটি খালি অবজেক্ট তৈরি করা "নতুন" অপারেটর দ্বারা তৈরি প্রতিটি অবজেক্ট ইভেন্টে একই অবজেক্ট উদাহরণ হতে পারে। আপনি যখন "নতুন অবজেক্ট ({})" ব্যবহার করবেন তখন আপনার বিভিন্ন উদাহরণ থাকবে।
পিটারহ - মনিকা পুনরায় ইনস্টল করুন

উল্লেখ করার মতো যে var objectA = {} var objectB = new Object()এখানে তৃতীয় একটি var objectC = Object.create(Object.prototype);
নির্মাণও রয়েছে

{}এবং এর পরিবর্তে [] ব্যবহার করুন । পরিবর্তে ব্যবহার করুন । সদস্যের নামগুলি অনুক্রমিক পূর্ণসংখ্যা হলে অ্যারে ব্যবহার করুন। সদস্যের নামগুলি যথেচ্ছ স্ট্রিং বা নাম থাকলে অবজেক্টগুলি ব্যবহার করুন। উত্স{}new Object()[]new Array()
ইলগার

new Object()এবং {}একেবারে খালি অবজেক্ট নয়, এগুলি অবজেক্ট.প্রোটোটাইপযুক্ত বস্তু objects আপনি Object.create(null)সত্যিকারের ফাঁকা বস্তুর জন্য ব্যবহার করতে পারেন (অন্তত মোজিলা ডক্স অনুসারে: বিকাশকারী.মোজিলা.আর.ইন-

উত্তর:


459

অবজেক্টস

ব্যবহার করে কোনও লাভ নেই new Object();- যেখানে {};আপনার কোডটি আরও কমপ্যাক্ট এবং আরও পাঠযোগ্য।

খালি বস্তুগুলি সংজ্ঞায়িত করার জন্য তারা প্রযুক্তিগতভাবে একই। {}সিনট্যাক্স খাটো, neater (কম জাভা পর), এবং আপনি অবিলম্বে বস্তুর ইনলাইন পূরণ করতে দেয় - যেমন:

var myObject = {
        title:  'Frog',
        url:    '/img/picture.jpg',
        width:  300,
        height: 200
      };

অ্যারেগুলির

অ্যারেগুলির জন্য, একইভাবে কখনও new Array();ওভার ব্যবহার করে প্রায় কোনও লাভ নেই [];- একটি ছোটখাট ব্যতিক্রম সহ:

var emptyArray = new Array(100);

সমস্ত স্লট সমন্বিত একটি 100 আইটেম দীর্ঘ অ্যারে তৈরি করে undefined- যা নির্দিষ্ট পরিস্থিতিতে (যেমন (new Array(9)).join('Na-Na ') + 'Batman!') চমৎকার / দরকারী হতে পারে ।

আমার সুপারিশ

  1. কখনই ব্যবহার করবেন না new Object();- এটি তুলনামূলক বেশি {};এবং নির্বোধ দেখাচ্ছে।
  2. সর্বদা ব্যবহার করুন [];- আপনি যখন পূর্বনির্ধারিত দৈর্ঘ্যের সাথে দ্রুত "খালি" অ্যারে তৈরি করতে চান তখন ব্যতীত use

22
এমনকি যদি আপনি অ্যারে (100) বাক্য গঠন ব্যবহার করেন তবে একই অ্যারেটি 101 ম পজিশনে এটি অপরিবর্তিত রয়েছে; সংখ্যাটিই কেবলমাত্র জিনিসটি দৈর্ঘ্যের সম্পত্তির মান পরিবর্তন করে।
জেসন বুটিং

6
@ পাবলো সম্পর্কে অবৈধ কিছুই নেই new Array(100)। সাহিত্য পড়ুন: বিকাশকারী.মোজিলা.আর.ইন
জাভা স্ক্রিপ্ট

9
@ পাবলো আপনার যুক্তি কী তা আমার কোনও ধারণা নেই। ডগলাস ক্রকফোর্ডের মতো আমিও এটি ব্যবহার করার পরামর্শ দিই []। কোন যুক্তি নেই। আপনি তবে যুক্তি দিয়েছেন যে new Array(100)এটি কোনওভাবে "অবৈধ", যা অসত্য।
মার আর্লিগসন

10
এছাড়াও, সচেতন যে হতে new Array(1,2,3)ফলাফল [1,2,3]কিন্তু new Array(1)নেই না করার ফল [1]; সুতরাং, এর শব্দার্থবিজ্ঞানগুলি Arrayবেমানান এবং অহেতুক বিভ্রান্তিকর।
ড্যানক্রাম্ব

3
আমি যুক্ত করব যা Object.create(null)একটি ফাঁকা অবজেক্ট তৈরির জন্য কার্যকর হতে পারে, তবে { }অবজেক্ট প্রোটোটাইপ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত।
মিও

90

হ্যাঁ, একটি পার্থক্য আছে, তারা এক নয়। এটি সত্য যে আপনি একই ফলাফল পাবেন তবে ইঞ্জিন উভয়ের জন্য আলাদা উপায়ে কাজ করে। এর মধ্যে একটি হ'ল একটি অবজেক্ট আক্ষরিক, এবং অন্যটি একটি নির্মাণকারী, জাভাস্ক্রিপ্টে কোনও বস্তু তৈরির দুটি ভিন্ন উপায়।

var objectA = {} //This is an object literal

var objectB = new Object() //This is the object constructor

জেএসে সমস্ত কিছুই একটি অবজেক্ট, তবে আপনাকে নতুন অবজেক্ট () সহ নিম্নলিখিত জিনিসটি সম্পর্কে সচেতন হওয়া উচিত: এটি একটি প্যারামিটার গ্রহণ করতে পারে এবং সেই পরামিতির উপর নির্ভর করে এটি একটি স্ট্রিং, একটি সংখ্যা বা কেবল একটি খালি অবজেক্ট তৈরি করবে।

উদাহরণস্বরূপ:, new Object(1)একটি নম্বর প্রদান করবে। new Object("hello")একটি স্ট্রিং ফিরিয়ে দেবে, এর অর্থ হ'ল অবজেক্ট কনস্ট্রাক্টর প্যারামিটারের উপর নির্ভর করে-স্ট্রিং, নাম্বার ইত্যাদির মতো অন্য কনস্ট্রাক্টরকে অবজেক্ট ক্রিয়েশন অর্পণ করতে পারে ... আপনি যখন গতিশীল ডেটা পরিচালনা করছেন তখন এটি মাথায় রাখা অত্যন্ত গুরুত্বপূর্ণ important বস্তু তৈরি ..

অনেক লেখক যখন আপনি পরিবর্তে একটি নির্দিষ্ট আক্ষরিক স্বরলিপি ব্যবহার করতে পারেন তখন অবজেক্ট কনস্ট্রাক্টরটি ব্যবহার না করার পরামর্শ দিয়েছেন, যেখানে আপনি নিশ্চিত হয়ে যাবেন যে আপনি যা তৈরি করছেন তা আপনার কোডে থাকা প্রত্যাশা করছেন।

আমি আপনাকে আরও বিশদ অনুসন্ধানের জন্য জাভাস্ক্রিপ্টে আক্ষরিক স্বরলিপি এবং নির্মাণকারীর মধ্যে পার্থক্য সম্পর্কে আরও পড়ার পরামর্শ দিচ্ছি।


আক্ষরিক স্বরলিপি প্রকৃতপক্ষে গতিশীল ডেটা অবজেক্ট তৈরির জন্য আরও পাঠযোগ্য এবং সংক্ষিপ্ত।
সিড

12

এগুলির একই পরিণতি রয়েছে, তবে আমি কেবল যুক্ত করব যে আক্ষরিক বাক্য গঠন ব্যবহার করে একজনকে জেএসওএন (জাভাস্ক্রিপ্ট লিটারেল অবজেক্ট সিনট্যাক্সের একটি স্ট্রিং-আইয়েড সাবসেট) এর সিনট্যাক্সের অভ্যস্ত হয়ে উঠতে সাহায্য করতে পারে, সুতরাং এটি প্রবেশ করা ভাল অভ্যাস হতে পারে ।

অন্য একটি জিনিস: আপনি newঅপারেটরটি ব্যবহার করতে ভুলে গেলে আপনার সূক্ষ্ম ত্রুটি থাকতে পারে । সুতরাং, আক্ষরিক ব্যবহার আপনাকে সেই সমস্যা এড়াতে সহায়তা করবে।

শেষ পর্যন্ত, এটি পরিস্থিতিটির পাশাপাশি অগ্রাধিকারের উপরও নির্ভর করবে।


8

অবজেক্ট এবং অ্যারে আক্ষরিক সিনট্যাক্স {} / [] জাভাস্ক্রিপ্ট ১.২ এ প্রবর্তিত হয়েছিল, সুতরাং 4.0-এর পূর্বে নেটস্কেপ নেভিগেটরের সংস্করণগুলিতে পাওয়া যায় না (এবং একটি সিনট্যাক্স ত্রুটি উত্পন্ন করবে)।

আমার আঙ্গুলগুলি এখনও নতুন অ্যারে () বলতে ডিফল্ট, তবে আমি খুব বৃদ্ধ। ধন্যবাদ, নেটস্কেপ 3 কোনও ব্রাউজার নয় যা অনেক লোককে আজকের দিনে বিবেচনা করতে হবে ...


11
নেটস্কেপ 3? মানুষ, সে আগের শতাব্দীতে ! :-D
21

8
var objectA = {}

অনেক দ্রুত এবং আমার অভিজ্ঞতায় আরও বেশি ব্যবহৃত হয়, তাই সম্ভবত 'স্ট্যান্ডার্ড' অবলম্বন করা এবং কিছু টাইপিং সংরক্ষণ করা ভাল save


1
দ্রুত চালানো বা টাইপ করতে কেবল দ্রুত?
হিপ্পিট্রেইল

ঠিক আছে, সত্যই, আমি "টাইপ করা" বলতে চাইছিলাম কিন্তু অতিরিক্ত পার্সিংয়ের সময় দিয়েছি, সম্ভবত খুব সামান্য দ্রুত কার্যকর কার্যকর হবে :-)
ববি জ্যাক

2
তদুপরি, আক্ষরিক সাধারণত পার্স সময়ে তৈরি করা হয়, তবে new Objectরানটাইম সময়ে কার্যকর করা উচিত।
ফ্রোগজ

8

আমি বিশ্বাস করি একটি ভাল কোডিং কনভেনশন হিসাবে এখানে{} জাভাস্ক্রিপ্টের একটি ভিডির প্রস্তাব দেওয়া হয়েছিল । সিউডোক্ল্যাসিকাল উত্তরাধিকার জন্য প্রয়োজনীয়। পথ আপনাকে স্মরণ করিয়ে যে এই একটি শাস্ত্রীয় অবজেক্ট ওরিয়েন্টেড ভাষা কিন্তু একটি প্রটোটাইপ এক নয় সাহায্য করে। আপনি কেবল কনস্ট্রাক্টর ফাংশন ব্যবহার করছেন আপনি কেবল তখনই সত্যই প্রয়োজন হয়। উদাহরণ স্বরূপ:newvar obj = {};new

var Mammal = function (name) {
  this.name = name;
};

Mammal.prototype.get_name = function () {
  return this.name;
}

Mammal.prototype.says = function() {
  return this.saying || '';
}

তারপরে এটি এর মতো ব্যবহৃত হয়:

var aMammal = new Mammal('Me warm-blooded');
var name = aMammal.get_name();

{}বিরোধী হিসাবে ব্যবহার করার আরেকটি সুবিধা new Objectহ'ল আপনি এটি JSON- স্টাইলের অবজেক্ট ল্যাটারাল করতে ব্যবহার করতে পারেন।


7

অ্যারে তাত্ক্ষণিক কর্মক্ষমতা

আপনি যদি কোনও দৈর্ঘ্য ছাড়াই একটি অ্যারে তৈরি করতে চান:

var arr = []; তুলনায় দ্রুত var arr = new Array();

আপনি যদি একটি নির্দিষ্ট দৈর্ঘ্য সহ খালি অ্যারে তৈরি করতে চান:

var arr = new Array(x);তুলনায় দ্রুত var arr = []; arr[x-1] = undefined;

মাপদণ্ডের জন্য নিম্নলিখিতগুলিতে ক্লিক করুন: https://jsfiddle.net/basickarl/ktbbry5b/

আমি তবে উভয়ের মেমরির পদচিহ্ন জানি না, আমি কল্পনা করতে পারি যে new Array()এটি আরও বেশি জায়গা নেয়।


arr = new Array(x)সমান arr = []; arr.length = x;, এর x-1সাথে সূচকটি বরাদ্দ করা নয় undefined
বার্গি

2

এটি মূলত একই জিনিস। আপনি যাকে আরও সুবিধাজনক মনে করেন তা ব্যবহার করুন।


সম্ভবত আমি এখানে জাভাস্ক্রিপ্টের খুব গভীরভাবে আবিষ্কার করছি, তবে তারা কি একই রকম? এর {প্রোটোটি Objectকি শূন্য নয়, তবে {প্রোটো {}'' অবজেক্ট.প্রোটোটাইপ '?
ইজাকি

@ ইজাকি প্রোটোটাইপটি Objectবাতিল, এটি সঠিক। Objectপ্রোটোটাইপ চেইনটি সমাপ্ত করার কারণ এটি। অবজেক্টের উদাহরণগুলির মধ্যে প্রোটোটাইপ নেই, কেবল কনস্ট্রাক্টরগুলির একটি রয়েছে। এবং (new Object()).constructor === ({}).constructor->true
টমলাক

তাহলে এটি কি ভুল?
ইজাকি

আমার বক্তব্যটি এখানে: new Object()একটি ফাঁকা বস্তুর উদাহরণ দেয়। {}একটি ফাঁকা অবজেক্ট উদাহরণ দেয়। এই উভয় দৃষ্টান্ত একেবারে পৃথক পৃথক। আপনি যে উদাহরণটির সাথে লিঙ্ক করেন সেটি অন্য কিছু করে (এটি প্রোটোটাইপ শৃঙ্খলা সংশোধন করে) এবং সত্যিকার অর্থে এখানে প্রয়োগ হয় না - বা আমি আপনার যুক্তি বুঝতে পারি না।
টমলাক

1

ঠিক আছে , একই জিনিসটি করার জন্য কেবল দুটি ভিন্ন উপায় রয়েছে! একটি বলা হয় object literalএবং অন্যটি একটি ফাংশন constructor!

তবে পড়ুন, আমি ভাগ করতে চাই এমন দুটি জিনিস রয়েছে:

ব্যবহারগুলি {}আপনার কোডটিকে আরও পঠনযোগ্য করে তোলে, যখন উদাহরণস্বরূপ Objectবা অন্যান্য বিল্ট-ইন ফাংশনগুলি তৈরি করার প্রস্তাব দেওয়া হয় না ...

এছাড়াও, অবজেক্ট ফাংশনটি যেমন একটি ফাংশন হিসাবে প্যারামিটারগুলি পায়, যেমন Object(params)... তবে {}জাভাস্ক্রিপ্টে কোনও অবজেক্ট শুরু করার খাঁটি উপায় ...

বস্তুর আক্ষরিক ব্যবহার আপনার কোডটিকে আরও পরিস্কার এবং অন্যান্য বিকাশকারীদের পক্ষে পড়তে সহজ দেখায় এবং এটি জাভাস্ক্রিপ্টের সেরা অনুশীলনের সাথে ইনলাইন ...

জাভাস্ক্রিপ্টে অবজেক্ট প্রায় যে কোনও কিছু হতে {}পারে তবে জাভাস্ক্রিপ্ট অবজেক্টগুলিকে কেবল এটি কীভাবে কাজ করে তা পরীক্ষার জন্য নির্দেশ করে, আপনার জাভাস্ক্রিপ্ট কোড বা কনসোলটিতে নীচে করুন:

var n = new Object(1); //Number {[[PrimitiveValue]]: 1}

আশ্চর্যজনকভাবে, এটি একটি সংখ্যা তৈরি করছে!

var a = new Object([1,2,3]); //[1, 2, 3]

এবং এটি একটি অ্যারে তৈরি করছে!

var s = new Object('alireza'); //String {0: "a", 1: "l", 2: "i", 3: "r", 4: "e", 5: "z", 6: "a", length: 7, [[PrimitiveValue]]: "alireza"}

এবং এই অদ্ভুত ফলাফল String!

সুতরাং যদি আপনি কোনও অবজেক্ট তৈরি করছেন তবে এটি অবজেক্ট আক্ষরিক ব্যবহার করার জন্য, একটি স্ট্যান্ডার্ড কোড রাখার এবং উপরের মতো কোনও কোড দুর্ঘটনা এড়ানোর জন্য প্রস্তাবিত, এছাড়াও {}অভিজ্ঞতার ভিত্তিতে ব্যবহার করা আমার অভিজ্ঞতাতে আরও ভাল!


তুমি কি ডেজফুলি? ইরানে?
এহসান

হাই এহসান, হ্যাঁ, তবে আমি ইরান সাথীতে বাস করছি না, আপনার এখানে দুর্দান্ত প্রোফাইল রয়েছে! আপনার সাথে দেখা হয়ে ভাল
আলিরিজা

আমি কি আপনার নম্বর ফোনটি সংরক্ষণ করতে এবং প্রোগ্রামিং সম্পর্কে আপনার কাছ থেকে সহায়তা পেতে পারি?
এহসান

আমি দেখছি আপনি টেলিগ্রাম ব্যবহার করেছেন
এহসান

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