জাভাস্ক্রিপ্ট একটি লাইনে একাধিক ভেরিয়েবল কীভাবে সংজ্ঞায়িত করবেন?


109

অনলাইনে ডকুমেন্টেশন পড়া, আমি কীভাবে একক লাইনে একাধিক জাভাস্ক্রিপ্ট ভেরিয়েবলকে সঠিকভাবে সংজ্ঞা দিতে পারি তা নিয়ে আমি বিভ্রান্ত হয়ে পড়ছি।

আমি যদি নিম্নলিখিত কোডটি ঘনীভূত করতে চাই তবে একক লাইনে একাধিক জাভাস্ক্রিপ্ট ভেরিয়েবল সংজ্ঞায়নের সঠিক জাভাস্ক্রিপ্ট "কঠোর" উপায় কী?

var a = 0;
var b = 0;

তাই কি:

var a = b = 0;

বা

var a = var b = 0; 

ইত্যাদি ...


4
একাধিক কার্যভারে আরও: জাভাস্ক্রিপ্টে ভেরিয়েবল অ্যাসাইনমেন্ট কীভাবে কাজ করে? । কনস্ট্রাক্টর ফাংশন প্রকাশ করার জন্য এই প্যাটার্নটি বন্ধের অভ্যন্তরে দরকারী বলে মনে করি:var $cls = my.namespace.Foo = function(args){ ... }
ব্লু

আমি অবাক হয়েছি কেন আপনি প্রথমে এটি ঘনীভূত করতে চান। আইএমএইচও একের পর এক ভেরিয়েবলার ঘোষণা এবং বরাদ্দ করা কারও পক্ষে বোঝা আরও পরিষ্কার এবং সহজ।
হেনিং

উত্তর:


76

আপনি কমাতে নির্ভর করতে চান কারণ আপনি যদি একাধিক অ্যাসাইনমেন্ট কনস্ট্রাক্টের উপর নির্ভর করেন তবে আপনি নিজেকে এক পয়েন্টে বা অন্য একটি জায়গায় পাতে গুলি করতে পারবেন।

একটি উদাহরণ হবে:

>>> var a = b = c = [];
>>> c.push(1)
[1]
>>> a
[1]

তারা সকলেই মেমোরিতে একই বস্তুর উল্লেখ করে, তারা "অনন্য" নয় যেহেতু আপনি যখন কোনও বস্তুর (অ্যারে, অবজেক্ট ল্যাটারাল, ফাংশন) এটি রেফারেন্স দ্বারা পাস করেছেন তবে মানটি নয় to সুতরাং যদি আপনি এই ভেরিয়েবলগুলির মধ্যে কেবল একটি পরিবর্তন করেন এবং তাদের পৃথকভাবে কাজ করতে চেয়েছিলেন তবে আপনি যা চান তা পাবেন না কারণ সেগুলি পৃথক বস্তু নয়।

একাধিক অ্যাসাইনমেন্টের একটি নেতিবাচক দিক রয়েছে, যাতে গৌণ পরিবর্তনশীলগুলি গ্লোবাল হয়ে যায় এবং আপনি বিশ্বব্যাপী নেমস্পেসে ফাঁস করতে চান না।

(function() {  var a = global = 5 })();
alert(window.global) // 5

কেবলমাত্র কমা ব্যবহার করা ভাল এবং বেশিরভাগ শ্বেত স্পেসের সাথে ব্যবহার করা ভাল তাই এটি পাঠযোগ্য:

var a = 5
  , b = 2
  , c = 3
  , d = {}
  , e = [];

4
সাধারণভাবে অ্যারে রেফারেন্স নির্ধারণের ক্ষেত্রে এটি সত্যিই একটি সমস্যা, কেবল মূল্য হিসাবে অ্যাসাইনমেন্টের বিবৃতি দিয়ে নয়।
ম্যাথু ফ্ল্যাশেন

"সুতরাং আপনি সংখ্যাসূচক
অক্ষরের

4
@ মিডার, এটি কোনও অ্যাসাইনমেন্ট সহ একটি সমস্যা। ডান হাত সম্পর্কে বিশেষ কিছুই নেই।
ম্যাথু ফ্ল্যাশেন

আমি সাধারণভাবে অ্যাসাইনমেন্ট বলতে চাইছি। কথ্য সম্পাদিত
মধ্যস্থতা ওমুরিলিভ

4
এই একাধিক অ্যাসাইনমেন্ট প্যাটার্নটি মনে রাখার মতো কিছু হ'ল ES5 স্ট্রিক্ট মোডের অধীনে যে কোনও অঘোষিত অ্যাসাইনমেন্ট একটি ReferenceErrorব্যতিক্রম ঘটায় ... আইএমও, সেগুলি এড়ানো উচিত ...
খ্রিস্টান সি সালভাদ

72

জাভাস্ক্রিপ্ট এর এস 6 বা নোড ব্যবহার করে আপনি নিম্নলিখিতটি করতে পারেন:

var [a,b,c,d] = [0,1,2,3]

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

console.log(a, b, c, d)

0 1 2 3

এটি এখানে @ আলেক্স ধূসর জবাবের মতো, তবে এই উদাহরণটি কফিস্ক্রিপ্টের পরিবর্তে জাভাস্ক্রিপ্টে রয়েছে।

নোট করুন যে এটি জাভাস্ক্রিপ্টের অ্যারে ডেস্ট্রাকচারিং অ্যাসাইনমেন্ট ব্যবহার করে


4
console.log(a,b,c,d)পরিবর্তে এই ক্ষেত্রে ব্যবহার করবেন না কেন ? এটি সংক্ষিপ্ত এবং একই আউটপুট দেয়
জোশ ব্রডহর্স্ট

46

মূল্য হিসাবে অ্যাসাইনমেন্ট সহ এক লাইনে এটি করার কোনও উপায় নেই।

var a = b = 0;

বি বিশ্বব্যাপী করে তোলে। একটি সঠিক উপায় (ভেরিয়েবল ফাঁস ছাড়াই) সামান্য দীর্ঘ হয়:

var a = 0, b = a;

যা ক্ষেত্রে দরকারী:

var a = <someLargeExpressionHere>, b = a, c = a, d = a;

4
"অ্যাসাইনমেন্টটি 0 হিসাবে পুনরাবৃত্তি না করে মান হিসাবে ব্যবহার করার কোনও উপায় নেই।" - আপনি কি বোঝাতে চেয়েছেন?
পালসুইম

29

দুই লাইনে কেন করছেন না?

var a, b, c, d;    // All in the same scope
a = b = c = d = 1; // Set value to all.

ভেরিয়েবল ঘোষণার উপর স্থানীয় সুযোগটি সংরক্ষণের কারণ হ'ল:

var a = b = c = d = 1;

অন্তর্নিহিত ঘোষণা হতে হবে b, cএবং dজানালা সুযোগ হয়েছে।


এটি আমার জন্য দরকারী কারণ আমি আমার প্রোগ্রামে অনেকগুলি ভেরিয়েবলকে সামনে ঘোষণা করি। এখন, 30+ লাইন নেওয়ার পরিবর্তে আমি পঠনযোগ্যতার ত্যাগ ছাড়াই কয়েকটি লাইন ব্যবহার করতে পারি।
কালিফ ভন

11

এখানে এক লাইনে একাধিক ভেরিয়েবল ঘোষণার নতুন ES6 পদ্ধতিটি রয়েছে:

const person = { name: 'Prince', age: 22, id: 1 };

let {name, age, id} = person;

console.log(name);
console.log(age);
console.log(id);

* আপনার পরিবর্তনশীল নাম এবং অবজেক্ট সূচক একই হতে হবে


4
এটি ওপি-র প্রশ্নের চেয়ে দীর্ঘ, কারণ এটি সমান let { a, b } = { a: 0, b: 0 }
ড্যান ড্যাসক্লেস্কু

5

বিশেষত ওপি যা জিজ্ঞাসা করেছে, আপনি যদি একই মান (উদাহরণস্বরূপ 0) দ্বারা এন ভেরিয়েবলগুলি সূচনা করতে চান তবে আপনি ভেরিয়েবলগুলিকে এন এস এর অ্যারে নির্ধারণ করতে অ্যারে ডিস্ট্রাকচারিং এবং অ্যারে ব্যবহার করতে পারেন 0:

let [a, b, c, d] = Array(4).fill(0);

console.log(a, b, c, d);


0

নোট করুন আপনি এটি কেবল সংখ্যা এবং স্ট্রিংয়ের সাহায্যে করতে পারেন

আপনি করতে পারেন ...

var a, b, c; a = b = c = 0; //but why?

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