কোন অংশটি কার্যকর করা হয় তা দেখার জন্য যখন আপনি বন্ধনী স্বরলিপিটির ভিতরে কমা অপারেটরটি ব্যবহার করেন তখন অপারেশনের ক্রম আরও স্পষ্ট হয়:
var a = {}
var b = {}
try{
// Uncaught TypeError: Cannot set property 'y' of undefined
a
[console.log('x'), 'x']
[console.log('y'), 'y']
= (console.log('right hand side'), b.e = 1);
} catch(err) {
console.error(err);
}
console.log(b.e) // 1
var a = {}
var b = {}
try {
// Uncaught TypeError: Cannot read property 'y' of undefined
a
[console.log('x'), 'x']
[console.log('y'), 'y']
[console.log('z'), 'z']
= (console.log('right hand side'), b.e = 1);
} catch(err) {
console.error(err);
}
console.log(b.e) // undefined
এ খুঁজছি বৈশিষ্ট :
উত্পাদন AssignmentExpression : LeftHandSideExpression = AssignmentExpression
নিম্নলিখিত হিসাবে মূল্যায়ন করা হয়:
বামহ্যান্ডসাইডএক্সপ্রেসেশনকে মূল্যায়নের ফলাফল হিসাবে lref হওয়া যাক।
আসুন AssignmentExpression মূল্যায়নের ফলাফল হতে দিন।
চলুন GetValue(rref)
।
সিন্ট্যাক্সেরর ব্যতিক্রম নিক্ষেপ করুন যদি ... (অপ্রাসঙ্গিক)
কল করুন PutValue(lref, rval)
।
PutValue
যা নিক্ষেপ করে TypeError
:
ও হোক ToObject(base)
।
[[CanPut]]
আর্গুমেন্ট পি দিয়ে ও এর অভ্যন্তরীণ পদ্ধতি কল করার ফলাফলটি যদি ভুল হয় তবে তা ঠিক
ক। যদি থ্রোটি সত্য হয় তবে টাইপআরর ব্যতিক্রম নিক্ষেপ করুন।
এর সম্পত্তি হিসাবে কিছুই বরাদ্দ করা যায় না undefined
- এর [[CanPut]]
অভ্যন্তরীণ পদ্ধতি undefined
সর্বদা ফিরে আসবে false
।
অন্য কথায়: ব্যাখ্যাকারী বাম দিকে parses ডানদিকে parses তারপর, তারপর একটি ত্রুটি নিক্ষেপ করে যদি বাম-হাতের সম্পত্তিটি বরাদ্দ করা না যায়।
যখন তুমি কর
a.x.y = b.e = 1
বাম হাতটি সফলভাবে পার্স করা হয় যতক্ষণ না PutValue
বলা হয়; .x
সম্পত্তি যে মূল্যায়িত করে undefined
তা ডান-হাত পার্স হওয়ার পরে বিবেচনা করা হয় না। দোভাষী এটিকে "অপরিজ্ঞাপিত" y "এর সম্পত্তিটির জন্য কিছু মূল্য নির্ধারণ করুন এবং undefined
কেবল ভিতরে rows ুকিয়ে দেওয়ার সম্পত্তি হিসাবে বরাদ্দ করেন PutValue
।
বিপরীতে:
a.x.y.z = b.e = 1
দোভাষী কখনই সেই z
সম্পত্তিটিতে অর্পণ করার চেষ্টা করে না এমন স্থানে পৌঁছায় না কারণ এটি প্রথমে a.x.y
একটি মানকে সমাধান করতে হবে । যদি a.x.y
কোনও মান থেকে সমাধান করা হয় (এমনকি undefined
) তবে এটি ঠিক হবে - PutValue
উপরের মতো একটি ত্রুটি ভিতরে ফেলে দেওয়া হবে । কিন্তু অ্যাক্সেস a.x.y
একটি ত্রুটি ছুড়ে ফেলে, কারণ সম্পত্তি y
অ্যাক্সেস করা যায় না undefined
।
b.z = 1
এবংb.e = 1
প্রথমে চালিত করব (উপর ভিত্তি করে ডান-অ্যাসোসিয়েটিভিটি দেওয়া হবে=
), তারপরেa.x.y.z = ...
মৃত্যুদন্ড কার্যকর এবং ব্যর্থ হবে; কেনb
এক ক্ষেত্রে অ্যাসাইনমেন্ট পাস হয় কিন্তু অন্য ক্ষেত্রে হয় না?