একটি কমা কাজ সঙ্গে অ্যাসাইনমেন্ট কাজ করে?


108

কেন aaa = 1,2,3কাজ এবং মান সেট aaaকরতে 1?

কেন var bbb = 1,2,3কাজ করে না ?

কেন var bbb = (1,2,3)কাজ এবং মান সেট bbbকরতে 3?

কনসোল সেশনের উদাহরণ


9
আপনি সিনট্যাক্স ত্রুটি পান কারণ ভেরিয়েবলের নামগুলি একটি সংখ্যা দিয়ে শুরু করার অনুমতি নেই। var a1,a2,a3;কেবল তিনটি স্থানীয় ভেরিয়েবল ঘোষণা করবে।
জ্যারেড ফারিশ

উত্তর:


200

এখানে অনেক কিছু চলছে, তবে মূলত এটি কমা অপারেটরের কাছে নেমে আসে ।

কমা অপারেটর তার অপারেশনগুলির উভয়কে (বাম থেকে ডানে) মূল্যায়ন করে এবং দ্বিতীয় অপারেন্ডের মান প্রদান করে।


এই কোড:

aaa = 1,2,3

এর সমতুল্য:

aaa = 1;
2;
3;

সুতরাং aaaসুস্পষ্টভাবে ঘোষিত হয় এবং 1 এর মান নির্ধারিত হয় লক্ষ করুন যে কনসোলে আউটপুটটি শেষ বিবৃতি, 3 এর ফলাফল।


এই কোড:

var bbb = 1,2,3

একটি সিনট্যাক্স ত্রুটি কারণ ভ্যারিয়েবল ডিক্লেয়ারেশনে কমাগুলি একক লাইনে একাধিক ভেরিয়েবল ঘোষণার জন্য ব্যবহৃত হয়। এমডিএন নিবন্ধটি যেমন উল্লেখ করেছে,

নোট যে কমা varবিবৃতি হল না কমা অপারেটর, কারণ এটি একটি অভিব্যক্তি মধ্যে বিদ্যমান নেই। বরং সেগুলির মধ্যে varএকাধিককে একত্রিত করা বিবৃতিগুলির একটি বিশেষ চরিত্র ।

সুতরাং এই কোডটি মোটামুটি সমান:

var bbb = 1;
var 2;
var 3;

অবশ্যই, 2কোনও বৈধ শনাক্তকারী নয়, সুতরাং এটি সেই সময়ে ব্যর্থ হয়।


এই কোড:

var bbb = (1,2,3)

প্রথমটির সাথে খুব সমান, কারণ সংখ্যাসূচক মানগুলি একটি বন্ধনীতে আবৃত হয়, সেগুলি প্রথমে মূল্যায়ন করা হয়। সুতরাং এটি রুগলি সমান:

1;
2;
var bbb = 3;

17
আরও বেশি, =ইন- var bbb = 1;এর =মতো একই নয় aaa = 1;- এগুলি ব্যাকরণে বিভিন্ন প্রযোজনা (ইনিশিয়ালাইজার বনাম অ্যাসাইনমেন্টএক্সপ্রেশন) থেকে আসে এবং কেবল একই টোকেনটি ব্যবহার করতে ঘটে।
রায়ান কাভানহো

7
খুব সুন্দর ব্যাখ্যা। যা সম্পূর্ণরূপে সুস্পষ্ট ছিল না তা হ'ল a = 1, 2, 3বন্ধনী হিসাবে চিহ্নিত করা যেতে পারে (a = 1), 2, 3যা হিসাবে মূল্যায়ন করে a = 1; 2; 3(এবং 3 টি প্রত্যাবর্তন করে, যেমন b = (a = 1, 2, 3)3 থেকে খ নির্ধারণ করবে)। বিপরীতভাবে, a = (1, 2, 3)যেমন মূল্যায়ন 1; 2; a = 3এবং আয় 3.
CompuChip

চলক কার্যভারে প্যারেন্স সম্পর্কে এমডিএন কী বলে এবং এটি বিপরীতে কেন? আমি দস্তাবেজটি খুঁজে পাইনি
ব্রায়ান

@ স্ট্যাটিক্স আসলে 'বিপরীতে' কিছুই করা হয় না। প্রথম বন্ধনী মূল্যায়ন করা হয়। ঠিক যখন আপনার কাছে রয়েছে (1 + 2) * 3, 1 + 2প্রথমে মূল্যায়ন করা হয় এবং সেই অভিব্যক্তির ফলাফলটি বাকী মূল্যায়নের জন্য বাইরের অভিব্যক্তিতে ফিরে আসে।
PSWg

9

জাভাস্ক্রিপ্টে কমাটির একাধিক ব্যবহার রয়েছে। অভিব্যক্তিতে:

a = 1, 2, 3;

এটি এমন একটি অপারেটর যা কেবল তার ডান হাতের যুক্তি ফিরিয়ে দেয়। তবে এটি varঘোষণার বাক্য গঠনেরও একটি অংশ , যা হ'ল:

var var1 [ = val1 ], var2 [ = val2 ], var3 [ = val3 ], ...;

(যেখানে এর [...]অর্থটি partচ্ছিক)। আপনার varঘোষণায় কমাগুলির পরে পরিবর্তনশীল নামগুলি অনুপস্থিত, সুতরাং এটি বিশ্লেষণ করে না। আপনি যে প্রভাবটি চেয়েছিলেন তা পেতে পারেন:

var a = (1, 2, 3);

প্রথম বন্ধনী কমাগুলিকে পরিবর্তনশীল ঘোষণার মধ্যে ডিলিমিটারের পরিবর্তে অপারেটর হিসাবে বিবেচনা করতে বাধ্য করে।


7

আপনার উদাহরণগুলিতে, কমা দুটি প্রসঙ্গে ব্যবহার করা হয়েছে:

var বিবৃতি

varবিবৃতিটির বাক্য গঠনটি হ'ল:

var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];

এখানে, কমাটি পরিবর্তনশীল নাম-মান জোড়া পৃথক করতে ব্যবহৃত হয়। নিম্নলিখিতটি কাজ করবে না কারণ একটি চলক নাম একটি অঙ্ক দিয়ে শুরু করতে পারে না ( সনাক্তকারী নাম দেখুন ):

var bbb = 1, 2, 3;
// SyntaxError: Unexpected number

কমা অপারেটর

কমা অপারেটর তার অপারেশনগুলির উভয়কে (বাম থেকে ডানে) মূল্যায়ন করে এবং দ্বিতীয় অপারেন্ডের মান প্রদান করে। নিম্নলিখিত এক্সপ্রেশন নিম্নলিখিত হিসাবে কাজ করে:

aaa = 1, 2, 3;
  • aaa = 1, 2 ফলন 2
    • নোট যা aaa = 1প্রথমে মূল্যায়ন করা হয় কারণ =এর চেয়ে বেশি অগ্রাধিকার রয়েছে,
  • 2, 3 ফলন 3
var bbb = (1, 2, 3);
  • উপরে বর্ণিত হিসাবে এক্সপ্রেশন (1, 2, 3)ফলন দেয়3
  • ভেরিয়েবলের bbbমান নির্ধারিত হয়3

2
aaa = 1, 2, 3=> কমা অপারেটর আলাদা করতে নিম্নলিখিত 3 বিবৃতি ব্যবহার করা হয়: aaa=1, 2এবং 3। কমা অপারেটরের ফলাফলটি সর্বশেষ বিবৃতিটির মান 3 However তবে, আআআ 1 এর মান নির্ধারিত হয়, এটি স্পষ্টভাবে ওপির স্ক্রিনশট থেকে দেখা যায়। এর কারণ হ'ল অপারেটর অগ্রাধিকার, কমা অপারেটরটির সাথে সর্বনিম্ন নজরে রয়েছে।
টিবোস

1

প্রথম ক্ষেত্রে:

আআ = 1,2,3

কমাগুলি এক্সপ্রেশন বিভাজক হিসাবে কাজ করে। এটি একটি কার্য সম্পাদন করে aaa, তারপরে এটি গণনা করে 2এবং তা বাতিল করে দেয়, তারপরে এটি গণনা করে 3এবং তা বাতিল করে দেয়।

দ্বিতীয়টিতে:

var bbb = 1,2,3

varশব্দ জাভাস্ক্রিপ্ট কম্পাইলার একটি পর পরবর্তী জিনিস বলে ,অন্য পরিবর্তনশীল নাম হওয়া উচিত। এটি সন্ধান করছে না, তাই এটি মারা যায় এবং দমড়ে যায়।

var bbb = (1,2,3)

এখানে, সংকলকটি প্রথমে এটি মূল্যায়ন করে 1এবং উপেক্ষা করে। তারপরে এটি মূল্যায়ন করে 2এবং উপেক্ষা করে। তারপরে এটি মূল্যায়ন করে 3এবং এটি স্ট্যাকের উপর ছেড়ে যায় তাই এটি নির্ধারিত হয়bbb

স্বতন্ত্র ভাব প্রকাশের জন্য কমা ব্যবহার করা সাধারণ না হলেও forচেহারাগুলির মতো জিনিসগুলিতে এটি কখনও কখনও কার্যকর ।

for (i = 0, l = 10; i < l; i++) {
  console.log(i);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.