অ্যারে এবং অবজেক্টগুলিতে চূড়ান্ত কমাগুলি কি অনুমানের অংশ?


215

জাভাস্ক্রিপ্টে কমা স্ট্যান্ডার্ডটি অনুসরণ করছেন, বা ক্রোম এবং ফায়ারফক্সের মতো বেশিরভাগ ব্রাউজারগুলি কি এগুলি সহ্য করে?

আমি ভেবেছিলাম সেগুলি স্ট্যান্ডার্ড, তবে আই 88 একটির মুখোমুখি হওয়ার পরে এলোমেলো course অবশ্যই আইই কোনও কিছুকেই সমর্থন করবেন না এর অর্থ এটি স্ট্যান্ডার্ড নয়।

আমি কী বোঝাতে চাইছি তার একটি উদাহরণ এখানে রয়েছে (বইগুলির অ্যারের শেষ উপাদানটির পরে):

var viewModel = {
    books: ko.observableArray([
        { title: "..", display: function() { return ".."; } },
        { title: "..", display: function() { return ".."; } },
        { title: "..", display: function() { return ".."; } }, // <--right there
    ]),
    currentTemplate: ko.observable("bookTemplate1"),
    displayTemplate: function() { return viewModel.currentTemplate(); }
};

এটি অন্য দিন খুঁজে পেয়েছি। একজন সি # প্রোগ্রামার হওয়ায় আমি তাদের এতটাই অনুমোদিত হতে পারি ...
ক্যাফজিক

5
আমি কয়েক সপ্তাহ আগে এটি মোকাবেলা করেছি। নতুন কোনও ডিবাগিং সরঞ্জাম ছাড়াই আই 7 এ এটির চেষ্টা করার কথা কল্পনা করুন ...
রায়ান মিলার

4
আমি যখন জেএস, রুবি, সি # সমর্থন মতো ভাষাগুলি আবিষ্কার করি তখন এটি আমাকে খুশি করে তোলে test পরীক্ষার ডেটা অনুলিপি করা সহজ করে দেয় ... যখন আমি বুঝতে পেরেছিলাম যে আমি এমনকি এই বিষয়ে
সফলতা পেয়েছি

আমি ভাবছি যদি কমাগুলির পরিবর্তে উল্লেখযোগ্য সাদা স্থান (কফিস্ক্রিপ্টের মতো) কোনও সিনট্যাক্টিক দ্বিধা সৃষ্টি করে?
অ্যান্ডি

উত্তর:


209

স্পেস: ECMAScript 5 এবং ECMAScript 3


ECMAScript 5 স্পেসিফিকেশনে বিভাগ 11.1.5 :

ObjectLiteral :
    { }
    { PropertyNameAndValueList }
    { PropertyNameAndValueList , }

হ্যাঁ, এটি নির্দিষ্টকরণের অংশ of

আপডেট: দৃশ্যত এটি ES5 এ নতুন new ES3 (পৃষ্ঠা 41) এ সংজ্ঞাটি কেবল ছিল:

ObjectLiteral :
    { }
    { PropertyNameAndValueList }

অ্যারে আক্ষরিক জন্য ( বিভাগ 11.1.4 ) এটি আরও আকর্ষণীয় ( আপডেট: এটি ইএস 3 এ ইতিমধ্যে বিদ্যমান):

ArrayLiteral :
    [ Elisionopt ]
    [ ElementList ]
    [ ElementList , Elision_opt ]

( Elision_optএলিজেন অপ্ট যেখানে অর্থ এলিজেন optionচ্ছিক)

Elision হিসাবে সংজ্ঞায়িত করা হয়

Elision :
    ,
    Elision ,

সুতরাং, একটি অ্যারে আক্ষরিক মত

var arr = [1,2,,,,];

পুরোপুরি আইনী। এটি দুটি উপাদান সহ একটি অ্যারে তৈরি করে তবে অ্যারের দৈর্ঘ্য সেট করে 2 + 3 = 5

আইই (আইই 9 এর আগে) থেকে খুব বেশি আশা করবেন না ...


1
আমি যেমন এন্ডোফেজকে জিজ্ঞাসা করেছি, আপনি কি জানবেন যে এটি ইএস 3-তেও স্ট্যান্ডার্ড ছিল কিনা? আমি এর জন্য
অনুমানটি খুঁজে পাচ্ছি


1
স্পষ্টতই, অবজেক্ট লিটারালগুলিতে চলমান কমাটি ইএস 3 টি অনুচ্ছেদে ছিল না। অ্যারেগুলির জন্য সংজ্ঞাটি একই রকম।
ফেলিক্স ক্লিং

ঠিক আছে এটি অ্যারে উপাদান ছিল যে আমি এটি নিয়ে ছুটে এসেছি, সুতরাং আমি অনুমান করি যে এমএসের জন্য কোনও অজুহাত নেই আপনি এটি কেটে ফেলুন তা বিবেচনা করুন না। আবারও ধন্যবাদ
অ্যাডাম র্যাকিস

মাইক্রো on
অফ

91

কেবলমাত্র একটি দ্রুত অনুস্মারক / সতর্কতা যে এটি এমন একটি ক্ষেত্র যেখানে জাভাস্ক্রিপ্ট / ইসমাএসক্রিপ স্ট্যান্ডার্ড এবং জেএসএন স্ট্যান্ডার্ড পৃথক; ট্রেলিং কমাগুলি জেএসে বৈধ তবে জেএসএনে বৈধ নয়


1
তবে আবার, সুপারস্টার যদি "হার্ট চেঞ্জ অফ" এর জন্য থাকে তবে যদি আপনি একবারের জন্য সামঞ্জস্য হন তবে "আপনার (এখনও) ভালোবাসা যায়"?
Lukas Bünger

52

এমনকি মজার কি, আই 7 দেয়

[1,].length  --> 2

যখন ফায়ারফক্স এবং ক্রোম

[1,].length  --> 1

16
কিন্তু [1,,].lengthদেয় 2সংবেদন : ব্রাউজারগুলি কোনও কিছুই করে না।
ডেভিড তিতেরেঙ্কো

84
নিখুঁত ধারণা তৈরি করে, অনুমানটি বলে যে একটি (দ্রষ্টব্য: একবচন) পিছনে থাকা কমা কোনও অ্যারের দৈর্ঘ্যে যোগ করে না। ক্রোম এবং ফায়ারফক্স ইএস 5 সঠিকভাবে প্রয়োগ করেছে।
JaredMcAteer

7
যখন 2 (বহুবচন) ট্রেলিং কমা রয়েছে, কেবলমাত্র একটি অ্যারের দৈর্ঘ্যে যোগ করে, তাই একথা বলার চেয়ে চূড়ান্ত ট্রেলিং কমা উপেক্ষা করা হয় বলে মনে হওয়া আরও সঠিক বলে মনে হয়।
আইকনোক্লাস্ট

4

আপনাকে জাভাস্ক্রিপ্ট জন্য স্পেসিফিকেসন (ECMA স্ক্রিপ্ট ওরফে) জানতে পারেন এখানে । আপনি পৃষ্ঠাতে অ্যারে সম্পর্কিত প্রাসঙ্গিক সন্ধান করতে পারেন এবং যেমন ফেলিক্স উল্লেখ করেছেন যে, অবজেক্টের সংজ্ঞাটি পরে পৃষ্ঠা 65 65 পৃষ্ঠায় দু'এক পৃষ্ঠাতে হবে।

যদিও এই স্পেসিফিকেশনটি বলে যে এটি অনুসরণ করা ঠিক আছে ,আমি জানি না যে এটি কয়েকটি সংস্করণ ফিরে দেখলে সত্য হবে। যেমন আপনি IE8 নোট করেছেন- আপনি যদি একটি ট্রিলিং কমা ছেড়ে যান তবে ক্রোম এবং এফএফ এটি ঠিকঠাকভাবে পরিচালনা করবে।


আপনার মাথার উপরের অংশটি, ES3 মানের এই অংশটি ছিল? আমি ES3 স্পেসটি খুঁজে পেতে পারি না
অ্যাডাম র্যাকিস

1
@ অ্যাডাম আমি এটি সন্ধান করার চেষ্টা করছি ... মুক্তির তারিখগুলি (ইএস 3 প্রকাশিত হয়েছিল 1999 এ, ES4 পরিত্যাগ করা হয়েছিল এবং ES5 কেবল ২০০৯ সালে প্রকাশিত হয়েছিল), এটি বোঝা যাবে যে এটি E3 স্ট্যান্ডার্ডে ছিল। অথবা এটি হতে পারে যে এমএস আরও একটি জিনিস স্ক্রু করেছে।
এন্ডোফেজ

দেখে মনে হচ্ছে ফেলিক্সের উত্তর দেওয়ার পরে এমএস আরও একটি জিনিস ভুল করেছে। আপনার জন্য আবার ধন্যবাদ
অ্যাডাম র্যাকিস

2

আসুন এটি ভেঙে দিন।

জাভাস্ক্রিপ্টে কি অনুগামী কমা স্ট্যান্ডার্ড?

হ্যাঁ. ECMAScript 5 স্পেসিফিকেশন হিসাবে (গুগল এবং এয়ারবিএনবি স্টাইল গাইডেরও একটি অংশ)

Chrome এবং ফায়ারফক্সের মতো বেশিরভাগ ব্রাউজারগুলি কি কেবল তাদের সহ্য করে?

এটি একটি ECMAScript 5 সমর্থন প্রশ্ন।

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

সুতরাং এর অর্থ:

var heroes = [
  'Batman',
  'Superman',
];
// heroes.length === 2 (not 3)

তাই সম্ভাবনাগুলি হ'ল যদি আপনি কিছু ES5 ব্যবহার করেন এবং আপ আপনার এটির চিন্তা করার দরকার নেই।

আমি ভেবেছিলাম সেগুলি স্ট্যান্ডার্ড, তবে আই 88 একটির মুখোমুখি হওয়ার পরে এলোমেলো course অবশ্যই আইই কোনও কিছুকেই সমর্থন করবেন না এর অর্থ এটি স্ট্যান্ডার্ড নয়।

আবার, এটি একটি ECMAScript 5 সমর্থন প্রশ্ন। IE8 ECMAScript 5 সমর্থন করে না (কেবলমাত্র আই 9 এবং তার বেশি)

আমি এয়ারবিএনবি'র ইএস 5 নষ্ট হওয়া ডকুমেন্টেশন https://github.com/airbnb/javascript/blob/es5-drecated/es5/README.md#commas এ একবার দেখার জন্য আমি সুপারিশ করব

আমি মোজিলার ডক্সও সুপারিশ করব: https://developer.mozilla.org/en-US/docs/Web/ জাভা স্ক্রিপ্ট / রেফারেন্স /
ট্রেলিং_কমাস


1

ক্রোমে 52:

[1,].length --> 1
[1,2,].length --> 2
[].length --> 0 
[,].length --> 1    <<<<=== OUHHHHH !!!!

আমি ঠিক কমা কমা পছন্দ করি না। লোকেরা এগুলি ওপেন সোর্স প্রকল্পগুলিতে অন্য কোনও প্রতিশ্রুতিবদ্ধ ব্যক্তির লেখা লাইনটি এড়াতে এড়ানোর জন্য ব্যবহার করে। পাইথনে একই প্রশ্নটি দেখুন: https://stackoverflow.com/a/11597911/968988


13
কেন 'OUHHHHH'? সেখানে 1 না থাকলে আপনি আর কী আশা করেছিলেন? [1,] (যা দৈর্ঘ্য: 1) এর মতো ঠিক সেই কমাটির আগে আপনার স্পষ্টতই একটি উপাদান রয়েছে '।
ফাইগো

কেন 'OUHHHHH'? কারণ আমি আরএফসি না পড়ে কোনও কোডই বুঝতে পারি না যা আমি বুঝতে পারি না। এবং হ্যাঁ, এটি ঠিক ঠিক [1,]এইভাবে কাজ করে: কমা আগে স্পষ্টতই কিছু আছে। কিন্তু [,]কমা আগে এবং পরে অনেক আছে। সুতরাং আমি [,]একা বুঝতে পারি না বলে আমি মনে করি না যে এটি ব্যবহার [1,]করা ভাল ধারণা।
নিকোলাস জোজল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.