Array.fromপ্রথমে আর্গুমেন্টটির পুনরুক্তি করার চেষ্টা করে যদি এটির একটি থাকে এবং স্ট্রিংগুলিতে পুনরাবৃত্ত থাকে, সুতরাং এটি আহ্বান জানায় String.prototype[Symbol.iterator], তাই প্রোটোটাইপ পদ্ধতিটি কীভাবে কাজ করে তা দেখা যাক। এটি এখানে স্পেসিফিকেশন বর্ণিত :
- ওকে থাকতে দাও? প্রয়োজনীয়ObjectCoercible (এই মান)।
- চল করি ? ToString (O) টি।
- ক্রিয়েটস্ট্রিংটাইটার (এস) ফিরুন।
CreateStringIteratorঅবশেষে সন্ধান করা আপনাকে নিয়ে যায় 21.1.5.2.1 %StringIteratorPrototype%.next ( ), যা করে:
- সিপি হতে দিন! CodePointAt (গুলি, অবস্থান)
- ফলাফল স্ট্রিং সিপি যুক্ত স্ট্রিং মান হতে দিন। [[CodeUnitCount]] সূচি পজিশনে কোড ইউনিট দিয়ে শুরু থেকে পরপর কোড ইউনিট।
- ওকে [[স্ট্রিংনেেক্সটেক্স ইনডেক্স]] + সিপি পজিশনে সেট করুন [[[কোডউনিটকাউন্ট]]।
- CreateIterResultObject (ফলাফল স্ট্রিং, মিথ্যা) রিটার্ন করুন।
CodeUnitCountকি আপনি আগ্রহী করছি এই সংখ্যা থেকে আসে। CodePointAt :
- প্রথমে স্ট্রিংয়ের মধ্যে সূচী অবস্থানে কোড ইউনিট হওয়া যাক।
- সিপিকে সেই কোড পয়েন্ট হতে দেওয়া যাক এর সংখ্যার মানটি প্রথমে that
প্রথমে যদি অগ্রণী সার্গেট বা ট্রেলিং সারোগেট না হয়, তবে
ক। রেকর্ডটি ফিরিয়ে দিন { [[CodePoint]]: cp, [[CodeUnitCount]]: 1, [[IsUnpairedSurrogate]]: false }।
প্রথমটি যদি পিছনের সারোগেট বা অবস্থান + 1 = আকার হয়, তবে
এ { [[CodePoint]]: cp, [[CodeUnitCount]]: 1, [[IsUnpairedSurrogate]]: true }। দ্য রেকর্ড ।
দ্বিতীয় স্ট্রিংয়ের মধ্যে সূচি পজিশনে কোড ইউনিট হতে দিন।
যদি দ্বিতীয়টি কোনও পিছনের সারোগেট না হয় তবে
ক। রেকর্ডটি ফিরিয়ে দিন { [[CodePoint]]: cp, [[CodeUnitCount]]: 1, [[IsUnpairedSurrogate]]: true }।
সিপি সেট করুন! ইউটিএফ 16 ডিকোডসুরোগেট পেয়ার (প্রথম, দ্বিতীয়)।
রেকর্ডটি ফিরিয়ে দিন { [[CodePoint]]: cp, [[CodeUnitCount]]: 2, [[IsUnpairedSurrogate]]: false }।
সুতরাং, যখন কোনও স্ট্রিং দিয়ে পুনরাবৃত্তি হয়, তখন Array.fromকেবল 2 এর কোডইউনিটকাউন্ট ফেরত দেয় যখন প্রশ্নে থাকা অক্ষরটি একটি সারোগেট জুটির সূচনা হয়। চরিত্রগুলি যা সারোগেট জোড়া হিসাবে ব্যাখ্যা করা হয় এখানে বর্ণিত হয়েছে :
এই ধরনের ক্রিয়াকলাপ 0xD800 থেকে 0xDBFF (ইউনিকোড স্ট্যান্ডার্ড দ্বারা নেতৃস্থানীয় সারোগেট হিসাবে সংজ্ঞায়িত বা আরও আনুষ্ঠানিকভাবে একটি উচ্চ-সারোগেট কোড ইউনিট হিসাবে সংজ্ঞায়িত) এবং সংখ্যার মান সহ প্রতিটি কোড ইউনিট সহ প্রতিটি কোড ইউনিটে বিশেষ চিকিত্সা প্রয়োগ করে নিম্নলিখিত বিধিগুলি ব্যবহার করে 0xD0000 থেকে 0xDFFF (একটি পিছনের সারোগেট হিসাবে সংজ্ঞায়িত বা আরও আনুষ্ঠানিকভাবে নিম্ন-সারোগেট কোড ইউনিট হিসাবে সংজ্ঞায়িত) অন্তর্ভুক্ত রয়েছে::
षि কোনও সারোগেট জুটি নয়:
console.log('षि'.charCodeAt()); // First character code: 2359, or 0x937
console.log('षि'.charCodeAt(1)); // Second character code: 2367, or 0x93F
তবে 👍এর চরিত্রগুলি হ'ল:
console.log('👍'.charCodeAt()); // 55357, or 0xD83D
console.log('👍'.charCodeAt(1)); // 56397, or 0xDC4D
প্রথম চরিত্রের কোড '👍'হেক্সে, ডি 83 ডি, যা 0xD800 to 0xDBFFনেতৃস্থানীয় সারোগেটের সীমার মধ্যে । বিপরীতে, প্রথম অক্ষরের কোডটি 'षि'অনেক কম, এবং হয় না। সুতরাং 'षि'পৃথক পৃথক হয়ে যায়, কিন্তু '👍'না।
षिদুটি পৃথক অক্ষর দ্বারা গঠিত হয়: ष, দেবনাগরী পত্র SSA , এবং ि, দেবনাগরী স্বরবর্ণ আমি সাইন ইন করুন । এই ক্রমে একে অপরের পাশে থাকাকালীন, তারা দুটি পৃথক অক্ষরের সমন্বয়ে সজ্জিতভাবে গ্রাফিকভাবে একক অক্ষরে একত্রিত হয়।
বিপরীতে, 👍 কেবলমাত্র একক গ্লাইফ হিসাবে একসাথে যখন অক্ষর কোডগুলি বোঝায়। আপনি যদি অন্যটি ছাড়া কোড পয়েন্টের সাথে একটি স্ট্রিং ব্যবহার করার চেষ্টা করেন তবে আপনি একটি বাজে প্রতীক পাবেন:
console.log('👍'[0]);
console.log('👍'[1]);