আপনি যখন করবেন 0[0], জেএস ইন্টারপ্রেটার প্রথমটিকে 0একটি Numberবস্তুতে পরিণত করবে এবং তারপরে [0]সেই বস্তুর সম্পত্তিটি অ্যাক্সেস করার চেষ্টা করবে undefined।
কোনও সিনট্যাক্স ত্রুটি নেই কারণ 0[0]এই প্রসঙ্গে ভাষা ব্যাকরণ দ্বারা সম্পত্তি অ্যাক্সেস সিনট্যাক্সের অনুমতি দেওয়া হয়েছে। এই কাঠামো (জাভাস্ক্রিপ্ট ব্যাকরণে পদ ব্যবহার করে) হয় NumericLiteral[NumericLiteral]।
ES5 ECMAScript বিশেষের বিভাগ A.3 বিভাগ থেকে ভাষা ব্যাকরণের সম্পর্কিত অংশটি হ'ল:
Literal ::
NullLiteral
BooleanLiteral
NumericLiteral
StringLiteral
RegularExpressionLiteral
PrimaryExpression :
this
Identifier
Literal
ArrayLiteral
ObjectLiteral
( Expression )
MemberExpression :
PrimaryExpression
FunctionExpression
MemberExpression [ Expression ]
MemberExpression . IdentifierName
new MemberExpression Arguments
সুতরাং, কেউ এই অগ্রগতির মাধ্যমে ব্যাকরণ অনুসরণ করতে পারে:
MemberExpression [ Expression ]
PrimaryExpression [ Expression ]
Literal [ Expression ]
NumericLiteral [ Expression ]
এবং, একইভাবে ব্যাকরণ অনুসরণ করার পরে Expressionঅবশেষে NumericLiteralতাই হতে পারে , আমরা দেখতে যে এটি অনুমোদিত:
NumericLiteral [ NumericLiteral ]
যার অর্থ 0[0]এটি ব্যাকরণের একটি অনুমোদিত অংশ এবং সুতরাং কোনও সিনট্যাক্সেরর নেই।
তারপরে, রান-টাইমে আপনাকে এমন একটি সম্পত্তি পড়ার অনুমতি দেওয়া হবে যা অস্তিত্বহীন (এটি কেবল তখনই পড়া হবে undefined) যতক্ষণ না আপনি যে উত্স থেকে পড়ছেন তা কোনও বস্তু বা কোনও অবজেক্টে অন্তর্নিহিত রূপান্তর রয়েছে। এবং, একটি সংখ্যাসূচক আক্ষরিক সত্যই একটি অবজেক্টের (একটি সংখ্যার অবজেক্ট) সাথে অন্তর্নিহিত রূপান্তর রয়েছে।
এটি জাভাস্ক্রিপ্টের প্রায়শই অজানা বৈশিষ্টগুলির মধ্যে একটি। ধরনের Number, Booleanএবং Stringজাভাস্ক্রিপ্ট সাধারণত প্রিমিটিভের (না পূর্ণবিকশিত বস্তু) হিসেবে অভ্যন্তরীণভাবে সংরক্ষণ করা হয়। এগুলি একটি কমপ্যাক্ট, অপরিবর্তনীয় স্টোরেজ উপস্থাপনা (সম্ভবত বাস্তবায়নের দক্ষতার জন্য এইভাবে করা হয়েছে)। তবে, জাভাস্ক্রিপ্ট চায় আপনি এই আদিম জিনিসগুলির মতো বৈশিষ্ট্য এবং পদ্ধতি সহ চিকিত্সা করতে সক্ষম হন। সুতরাং, আপনি যদি এমন কোনও সম্পত্তি বা পদ্ধতি অ্যাক্সেস করার চেষ্টা করেন যা সরাসরি আদিমকে সমর্থন করে না, তবে জাভাস্ক্রিপ্ট সাময়িকভাবে আদিমকে মানচিত্রের সাথে মান হিসাবে সেট করা একটি উপযুক্ত ধরণের বস্তুতে বাধ্য করবে।
আপনি যখন কোনও আদিম যেমন কোনও বস্তুর মতো সিনট্যাক্স ব্যবহার করেন 0[0], দোভাষী তাকে আদিম কোনও সম্পত্তি অ্যাক্সেস হিসাবে স্বীকৃতি দেয়। এটির প্রতিক্রিয়া হ'ল প্রথম 0সংখ্যাগত আদিম গ্রহণ করা এবং এটিকে বাধ্যতামূলকভাবে একটি পূর্ণ-বিকশিত Numberবস্তুতে পরিণত করা হয় যা এটির পরে [0]সম্পত্তিটি অ্যাক্সেস করতে পারে । এই নির্দিষ্ট ক্ষেত্রে, [0]একটি সংখ্যা অবজেক্টের সম্পত্তি undefinedহ'ল এজন্য আপনার কাছ থেকে পাওয়া মূল্য 0[0]।
সম্পত্তি নিয়ে কাজ করার উদ্দেশ্যে কোনও বস্তুর কাছে আদিমকে স্বয়ংক্রিয় রূপান্তর সম্পর্কিত একটি নিবন্ধ এখানে:
জাভাস্ক্রিপ্ট পুরষ্কারের গোপন জীবন
এখানে ECMAScript 5.1 নির্দিষ্টকরণের সম্পর্কিত অংশ রয়েছে:
9.10 চেকঅবজেক্টকোর্সিবল
যদি মান হয় undefinedবা nullঅন্যথায় প্রত্যাবর্তন হয় তবে প্রকারের ত্রুটি ছুড়ে দেয় true।

11.2.1 সম্পত্তি অ্যাক্সেসর
- বেসএরফারেন্সকে মেম্বার এক্সপ্রেসনের মূল্যায়নের ফলাফল হতে দিন।
- বেসভ্যালুটি getValue (বেসরাইফারেন্স) হতে দিন।
- সম্পত্তির নাম রেফারেন্সটিকে এক্সপ্রেশন মূল্যায়নের ফলাফল হিসাবে দেখা যাক।
- প্রোপার্টি নেমভ্যালুটি getValue (সম্পত্তি নাম রেফারেন্স) হতে দিন Let
- চেকঅবজেক্টকোসরসিবল (বেসভ্যালু) কল করুন।
- প্রোপার্টিনেমস্ট্রিং টুস্ট্রিং (প্রপার্টি নেমভ্যালু) হতে দিন।
- যদি সিনট্যাকটিক উত্পাদনের মূল্যায়ন করা হয় তবে যদি তা কঠোর মোড কোডের মধ্যে থাকে তবে কঠোরভাবে সত্য হওয়া উচিত, অন্যথায় কঠোরভাবে মিথ্যা হোক।
- টাইপ রেফারেন্সের একটি মান ফেরান যার মূল মানটি বেসভ্যালু এবং যার রেফারেন্সকৃত নাম প্রপার্টি নেমস্ট্রিং, এবং যার কঠোর মোড পতাকাটি কঠোর।
এই প্রশ্নের জন্য অপারেটিভ অংশটি উপরের # 5 ধাপ।
8.7.1 গেটভ্যালু (ভ)
এটি বর্ণনা করে যে কীভাবে যখন অ্যাক্সেস করা মানটি কোনও সম্পত্তি রেফারেন্স হয়, এটি ToObject(base)কোনও আদিমটির অবজেক্ট সংস্করণ পেতে কল করে।
9.9 টোবজেক্ট
এভাবেই বর্ণনা করে Boolean, Numberএবং Stringপ্রিমিটিভের সঙ্গে [[PrimitiveValue]] অভ্যন্তরীণ সম্পত্তি সেট তদনুসারে একটি বস্তু ফর্মে রূপান্তরিত হয়।
একটি আকর্ষণীয় পরীক্ষা হিসাবে, কোডটি যদি এটির মতো হয়:
var x = null;
var a = x[0];
এটি প্রযুক্তিগতভাবে আইনী বাক্য গঠন হিসাবে বিশ্লেষণের সময় এখনও সিন্ট্যাক্সেরর ফেলে দিতে পারে না, আপনি কোডটি চালনার সময় রান টাইমের সময় এটি টাইপআরার নিক্ষেপ করবে কারণ যখন উপরের সম্পত্তি অ্যাকসেসর যুক্তি যুক্ত xহবে তখন এটি কল করবে CheckObjectCoercible(x)বা কল করবে ToObject(x)যা কল করবে উভয় একটি TypeError নিক্ষেপ করা হবে যদি xহয় nullবা undefined।
true[0]বা""[0]