জাভাস্ক্রিপ্ট এক্সপ্রেশনে কমা কী করবে?


89

যদি আমি ব্যবহার করি:

1.09 * 1; // returns "1.09"

তবে আমি যদি ব্যবহার করি:

1,09 * 1; // returns "9"

আমি জানি যে 1,09 একটি সংখ্যা নয়।

কোডের শেষ অংশে কমাটি কী করবে?

আরও উদাহরণ

if (0,9) alert("ok"); // alert
if (9,0) alert("ok"); // don't alert

alert(1); alert(2); alert(3); // 3 alerts
alert(1), alert(2), alert(3); // 3 alerts too

alert("2",
    foo = function (param) {
        alert(param)
    },
    foo('1')
)
foo('3'); // alerts 1, 2 and 3

4
আমি অবাক হয়েছি যে 09 টি অক্টাল আক্ষরিক অবৈধ '9' এর জন্য ব্যর্থ হচ্ছে না।
পুনরাবৃত্ত করুন

7
@ রিসার্সিভ - অষ্টাল উপস্থাপনায় যে কোনও 9 টি দশমিকের ফলব্যাকের ফলস্বরূপ।
যুবাল আদম

যুক্তি তালিকায় কমা বিভ্রান্ত করবেন না। alertশুধুমাত্র একটি যুক্তি লাগে। এর পরে যে কোনও কিছু ফেলে দেওয়া হয়।
অ্যান্ড্রু

@ অ্যান্ড্রু: হ্যাঁ, সতর্কতা () দ্বারা বাতিল করা হয়েছে, এটি কেবল একটি যুক্তিই নেয়, তবে এটি চালানো হবে! এটা বিরক্তিকর. ধন্যবাদ
তোপেরা

4
@ তোপেরা: আপনি যদি জেএসের দৃষ্টিকোণ থেকে এটি নিয়ে ভাবেন তবে সত্যই অদ্ভুত নয়। জেএসে আপনাকে আপনার ফাংশন ঘোষণায় আপনার যুক্তি তালিকাটি নির্দিষ্ট করতে হবে না (আপনি তার argumentsপরিবর্তে অবজেক্টটি ব্যবহার করতে পারেন , যা কোনও দৈর্ঘ্যের হতে পারে)। এমনকি আধুনিক সংকলিত জেএস সহ, কোনও ফাংশন কতটা যুক্তি গ্রহণ করবে তা আগেই বলার উপায় নেই। এটি বিবেচনা করুন: function test() { args=[]; for (var i = 0; i < arguments.length; i++) { args.push(arguments[i] + 1); } ;দোভাষীকে জানতে হবে যে ফাংশনটি কীভাবে ব্যবহৃত হচ্ছে তা জানার জন্য এটি কতটা আর্গ গ্রহণ করবে। পরিবর্তে, এটি সবকিছু মূল্যায়ন করে।
অ্যান্ড্রু

উত্তর:


95

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

সূত্র: https://developer.mozilla.org/en/ জাভা স্ক্রিপ্ট / রেফারেন্স / অপারেটর / স্পেশিয়াল_অপারেটর / কমমা_অপ্রেটার

উদাহরণস্বরূপ, অভিব্যক্তিটি 1,2,3,4,5মূল্যায়ন করে 5। স্পষ্টতই কমা অপারেটর শুধুমাত্র পার্শ্ব-প্রতিক্রিয়াযুক্ত ক্রিয়াকলাপের জন্য দরকারী।

console.log(1,2,3,4,5);
console.log((1,2,3,4,5));


4
তারা এটি সি থেকে নিয়েছে বলে আমি মনে করি এটি কেবলমাত্র অভিব্যক্তির জন্য কার্যকর যা পার্শ্ব প্রতিক্রিয়া রয়েছে।
রডোমির ডপিরালস্কি

4
আমি এমন অনেকগুলি ক্ষেত্রে ভাবতে পারি না যেখানে কমা অপারেটর কোনও প্রভাবিত কিন্তু অক্ষর সংরক্ষণের (মাইনাইফিং) বা অবলম্বন কোড ব্যবহার করে।
ব্যবহারকারী 17753

4
@ ব্যবহারকারী 17753 এটি কোনও লুপের অর্ধবৃত্ত-বিচ্ছিন্ন অংশে বৈধভাবে ব্যবহার করা যেতে পারে for
সাইয়েস

4
@ কিয়েস: এটি সত্য হলেও লুপের শরীরে সাধারণত এ জাতীয় যুক্তি আরও স্পষ্টভাবে সম্পাদিত হয়। কিছু লোক তখন দাবি করবে যে তাদের উপায় continueনকল ছাড়াই একাধিক পয়েন্টের জন্য মঞ্জুরি দেয় , তবে তারপরে আপনার একাধিক continueপয়েন্ট থাকা উচিত নয় ।
অরবিট

@ ব্যবহারকারী 17753 আপনি অর্থের উপর; মিনিফাইড কোডটির একটি ছোট স্নিপেট বোঝার চেষ্টা করা হচ্ছে কেন আমি এখানে রয়েছি
সিলডম '

6

আরও কিছু বিবেচনা করুন:

console.log((0, 9));
console.log((9, 0));
console.log(("foo", "bar"));


7
লোল, এটি মজাদার:alert("1", alert("2", alert("3")))
টোপেরা

4
@ অ্যান্ড্রু: ওফ, আমি আমার উত্তরটি কী ব্যবহার করতে চাইছিলাম তা দিয়ে আপডেট করেছি।
25:44

কমা অপারেটর এর প্রতিটি অপারেশনকে (বাম থেকে ডানে) মূল্যায়ন করে এবং অপারেন্ডের মান প্রদান করে last
xgqfrms

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

https://stackoverflow.com/a/3561056/5934465

এমন হওয়া উচিত!

কমা অপারেটর এর প্রতিটি অপারেশনকে (বাম থেকে ডানে) মূল্যায়ন করে এবং অপারেন্ডের মান প্রদান করে last

https://developer.mozilla.org/en-US/docs/Web/JavaScript/ উল্লেখ / অপারেটর / কমমা_অপ্রেটার


4
কমা অপারেটর দুটি অপারেন্ড নেয় , তাই মূল উক্তিটি সঠিক ছিল। আপনি যে বিষয়ে কথা বলছেন তা হ'ল এই জাতীয় অভিব্যক্তি বাসা বাঁধার শেষ ফলাফল, তবে এর অর্থ আপনার প্রতিস্থাপনের উদ্ধৃতিটি মোটামুটিভাবে ভুল করে দেওয়া হয়েছে। a,b,c,dহল((((a),b),c),d)
অরবিট

1

এখানে একবার দেখুন - কমাটি একাধিক অভিব্যক্তি / বিবৃতি বোঝায়। উদাহরণস্বরূপ আপনার কোডে আপনি একটি লাইন ব্যবহার করতে পারেন:

var a=0, b=0, c=0;

এটি লিখে না রেখেই তিনটি ভেরিয়েবল ঘোষণা করবে:

var a=0;
var b=0;
var c=0;

আশা করি এইটি কাজ করবে.


23
এটি কিছুটা পুরাতন, তবে লক্ষণীয় গুরুত্বপূর্ণ: (1) আপনি যে উদাহরণ সরবরাহ করেছেন তা কমা অপারেটর ব্যবহার করে না ( varঘোষণাগুলি কমা অপারেটর ব্যবহার করে না , যদিও এটি কমা হয়েছে) এবং (২) আপনি আলাদা করতে পারবেন না কমা অপারেটরগুলি ব্যবহার করে স্ট্যাটাস; শুধুমাত্র এক্সপ্রেশন অনুমোদিত।
কোয়ান্টাস 94 ভারী

0

কোনও বস্তুর সাথে বৈশিষ্ট্য যুক্ত করা বা সংশোধন করা এবং একই লাইনে এটি ফিরিয়ে দেওয়া সম্ভাব্য ব্যবহারের ক্ষেত্রে:

console.log(
  ((x) => (o = {biggerCond: r => r >= x},
           o.r5 = Array.from(window.crypto.getRandomValues(new Uint16Array(5))),
           o.isAnyBigger = o.r5.some(o.biggerCond),
           o.bigger = o.isAnyBigger ? o.r5.filter(o.biggerCond) : [x], o )
  )(5e4)
);
// Example
// {
//   bigger: [58414, 56500, 63397],
//   isAnyBigger: true,
//   isBiggerCond: r => r >= x,
//   r5: [58414, 12015, 56500, 63397, 43861]
// }

উপরের বেনামে ফাংশনটি ইনপুট মানের চেয়ে বড় এলোমেলো মান সহ কোনও বস্তু প্রদান করে বা যদি কোনও না থাকে তবে ইনপুট মানটি biggerসম্পত্তিতে থাকা একটি অ্যারেতে থাকে ।

এটি এখনও সিনট্যাকটিক চিনি ( তীরের ফাংশনগুলির মতো ), তবে এটি লাইনের সংখ্যা সংক্ষিপ্ত করে তোলে ... আমি আশ্চর্য হই যে কিছু জেএস মিনিফায়ারগুলি স্বয়ংক্রিয়ভাবে অনুরূপভাবে কোডটি সনাক্ত করে সামঞ্জস্য করে কিনা। এটি আপনার কনসোলটিতে চালান:

((x)=>(o={biggerCond:r=>r>=x},o.r5=Array.from(window.crypto.getRandomValues(new Uint16Array(5))),o.isAnyBigger=o.r5.some(o.biggerCond),o.bigger=o.isAnyBigger?o.r5.filter(o.biggerCond):[x],o))(5e4)

4
তবে অবশ্যই আপনি প্রোডাক্ট কোডে এই জাতীয় ক্রিপ্টিক প্রবণতা রাখবেন না, তাই না?
অরবিটে মার্চীনতা রেস

@ লাইটনেসেসেসিনআরবিট ভালভাবে, আমি বলব এটি উদ্দেশ্যটির উপর নির্ভর করে (উদাহরণস্বরূপ শিক্ষাদান, সংক্ষিপ্তকরণ কোড, কোনও ভেরিয়েবল / ফাংশন ঘোষণা ইত্যাদি)। যদি আপনি এটি উপরের মতো ইন্ডেন্ট করেন তবে এটি পুরোপুরি পঠনযোগ্য ... আপনি "ক্রিপ্টিক" শব্দটি ব্যবহার করেছেন তা লক্ষ্য করে থামাতে পারবেন না :)
সিপিএইচপিথন

4
হেই, এটি এমনকি ইচ্ছা করেও করা হয়নি
Or
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.