تعريف
السلسلة هي صفر أو أكثر مرتبة معًا ، موضوعة في عروض أسعار واحدة أو مزدوجة.
"ABC" "ABC"عروض الأسعار المزدوجة يمكن استخدامها داخل سلسلة اقتباس واحدة. داخل سلسلة اقتباس مزدوج ، يمكن استخدام عروض أسعار واحدة.
"key =" value "" "إنها رحلة طويلة"
كلاهما أعلاه سلاسل قانونية.
إذا كنت ترغب في استخدام عروض أسعار مفردة داخل سلسلة اقتباس واحدة (أو عروض أسعار مزدوجة داخل سلسلة اقتباس مزدوجة) ، فيجب عليك بادئة الاقتباس المفرد (أو عروض أسعار مزدوجة) في الداخل للهروب.
"هل قالت/" مرحبًا/"؟" // "هل قالت" مرحبًا "؟" "هل قالت/" مرحبًا/"؟" // "هل قالت" مرحبًا "؟"
نظرًا لأن قيم السمات الخاصة بلغة HTML تستخدم عروض أسعار مزدوجة ، فإن العديد من المشاريع تتفق على أن سلاسل لغة JavaScript تستخدم فقط عروض أسعار واحدة ، وهذا البرنامج التعليمي يتبع هذا الاتفاقية. بالطبع ، إنه مثالي أيضًا لاستخدام عروض أسعار مزدوجة فقط. من المهم التمسك بأسلوب واحد وعدم خلط الأسلوبين.
بشكل افتراضي ، لا يمكن كتابة السلاسل إلا في سطر واحد ، وإذا تم تقسيمها إلى خطوط متعددة ، فسيقومون بالإبلاغ عن خطأ.
"ABC" // Syntaxerror: رمز غير متوقع غير قانوني
يقسم الكود أعلاه سلسلة إلى ثلاثة أسطر ، وسيقوم JavaScript بالإبلاغ عن خطأ.
إذا كان يجب تقسيم سلسلة طويلة إلى خطوط متعددة ، فيمكن استخدام تراجع خلفي في نهاية كل سطر.
var longstring = "Long /Long /Long /String" ؛ LongString // "سلسلة طويلة طويلة"
يوضح الرمز أعلاه أنه بعد إضافة عصر خلفي ، يمكن تقسيم السلسلة المكتوبة في الأصل على سطر واحد إلى خطوط متعددة من الكتابة. ومع ذلك ، عند الإخراج ، لا يزال التأثير خطًا واحدًا ، والتأثير هو بالضبط نفس الكتابة على نفس الخط. لاحظ أنه يجب أن يتبع الانزلاق الخلفي حرفًا جديدًا ، ولا يجب أن يكون هناك أي شخصيات أخرى (مثل المساحات) ، وإلا سيتم الإبلاغ عن خطأ.
يمكن لمشغل التسلسل (+) أن يسلط سلاسل خط واحد متعددة ، وتقسيم السلسلة الطويلة إلى خطوط متعددة للكتابة ، وهو أيضًا سطر واحد عند الإخراج.
var longstring = 'long' + 'long' + 'long' + 'string' ؛
إذا كنت ترغب في إخراج سلاسل متعددة الخطوط ، فهناك حل بديل لاستخدام التعليقات متعددة الخطوط.
(function () {/*line 1line 2line 3*/}). toString (). split ('/n'). slice (1 ، -1).في المثال أعلاه ، سلسلة الإخراج هي خطوط متعددة.
يهرب
يحتوي Backslash (/) على معنى خاص في سلسلة ويستخدم لتمثيل بعض الأحرف الخاصة ، لذلك يطلق عليه أيضًا حرف الهروب.
الشخصيات الخاصة التي تحتاج إلى هروب مع التراجع الخلفي هي أساسا على النحو التالي:
تسبق الشخصيات المذكورة أعلاه من خلال الانتشار الخلفي ، والتي تمثل جميعها معاني خاصة.
console.log ('1/n2') // 1 // 2في الكود أعلاه ، /n يعني خطًا جديدًا ، ويتم تقسيمه إلى سطرين عند الإخراج.
هناك ثلاثة استخدامات خاصة للاضطرابات الخلفية.
(1)/HHHH
يتبع backslash ثلاثة أرقام ثماني (000 إلى 377) ، تمثل شخصية. يتوافق HHH مع نقطة رمز Unicode للحرف المقابل ، مثل /251 يمثل رمز حقوق الطبع والنشر. من الواضح أن هذه الطريقة يمكن أن تخرج فقط 256 حرفًا.
(2)/xhh
/x يتبعه رقمين سداسي عشري (00 إلى FF) ، يمثلان شخصية. يتوافق HH مع نقطة رمز Unicode للشخصية ، مثل /XA9 يمثل رمز حقوق الطبع والنشر. يمكن لهذه الطريقة إخراج 256 حرفًا فقط.
(3)/uxxxxx
/U يتبعه أربعة أرقام سداسية سداسية (0000 إلى FFFFF) ، تمثل شخصية. HHHHHH يتوافق مع نقطة رمز Unicode للشخصية ، مثل /u00a9 يمثل رمز حقوق الطبع والنشر.
فيما يلي أمثلة على هذه الشخصيات الثلاثة الخاصة المكتوبة بالتفصيل.
'/251' // "©" '/xa9' // "©"/u00a9 '// "©"/172' === 'z' // true '/x7a' === 'z' // true '/u007a' === 'z' // true '
إذا تم استخدام عرقلة خلفية قبل حرف غير خاص ، يتم حذف الانزلاق الخلفي.
'/a' // "a"
في الكود أعلاه ، A هو حرف طبيعي ، وليس هناك معنى خاص لإضافة عرقلة خلفية قبله ، وسيتم حذف الانزلاق الخلفي تلقائيًا.
إذا كان من الضروري تضمين الانزلاق الخلفي في المحتوى العادي للسلسلة ، فيجب إضافة عرقلة خلفية أخرى قبل الذروة الخلفية للهروب.
"Prev // Next" // "Prev/ Next"
السلاسل والصفائف
يمكن التعامل مع السلسلة كصفيف أحرف ، بحيث يمكن استخدام مشغل القوس المربع للمصفوفة لإرجاع الأحرف في موضع معين (يبدأ رقم الموضع في 0).
var s = 'hello' ؛ s [0] // "h" s [1] // "e" s [4] // "o" // استخدم مشغل القوس المربع 'hello' [1] // "e"
إذا تجاوز الرقم بين قوسين مربع طول السلسلة ، أو إذا لم يكن الرقم في قوسين مربع ، فسيتم إرجاع الرقم غير المحدد على الإطلاق.
'abc' [3] // undefined'abc '[-1] // undefined'abc' ['x'] // undefined
ومع ذلك ، هذا كل شيء عن التشابه بين الأوتار والصفائف. في الواقع ، من المستحيل تغيير حرف واحد في سلسلة.
var s = 'hello' ؛ delete s [0] ؛ s // "hello" s [1] = 'a' ؛ s // "hello" s [5] = '!' ؛ s // "hello"
يشير الرمز أعلاه إلى أنه لا يمكن تغيير أو إضاف أو إضافتها على الأحرف الفردية داخل السلسلة ، وسوف تفشل هذه العمليات بصمت.
السبب في أن الأوتار تشبه صفائف الأحرف هو في الواقع لأنه عند إجراء عملية قوس مربعة على الأوتار ، سيتم تحويل السلسلة تلقائيًا إلى كائن سلسلة.
سمة الطول
تُرجع سمة الطول طول السلسلة ، والتي لا يمكن تغييرها.
var s = 'hello' ؛ s.length // 5s.length = 3 ؛ s.length // 5s.length = 7 ؛ s.length // 5
يشير الرمز أعلاه إلى أنه لا يمكن تغيير سمة طول السلسلة ، ولكن لن تكون هناك أخطاء.
مجموعة الأحرف
يستخدم JavaScript مجموعات أحرف Unicode ، مما يعني أنه داخل JavaScript ، يتم تمثيل جميع الأحرف بواسطة Unicode.
لا يستخدم JavaScript Unicode فقط لتخزين الأحرف داخليًا ، ولكن يمكن أيضًا استخدام Unicode مباشرة في البرنامج. يمكن كتابة جميع الأحرف في شكل "/uxxxx" ، حيث يمثل xxxx ترميز الحرف اليونيكود. على سبيل المثال ، /u00a9 يمثل رمز حقوق الطبع والنشر.
var s = '/u00a9' ؛ s // "©"
يتم تخزين كل حرف بتنسيق UTF-16 16 بت (أي 2 بايت) داخل JavaScript. وهذا يعني أن طول حرف الوحدة من JavaScript يتم تثبيته بطول 16 بت ، أي 2 بايت.
ومع ذلك ، يحتوي UTF-16 على طولان: بالنسبة للأحرف بين U+0000 و U+FFFF ، يكون الطول 16 بت (أي 2 بايت) ؛ بالنسبة للأحرف بين U+10000 و U+10ffff ، يبلغ الطول 32 بت (أي 4 بايت) ، والأول بايتان بين 0xd800 و 0xdbff ، والأخير بايتان بين 0xDC00 و 0xDFFF. على سبيل المثال ، فإن الحرف المقابل لـ U+1D306 هو ? ، ويتم كتابته باسم UTF-16 ، وهو 0xD834 0xDF06. سوف يتعرف المتصفح بشكل صحيح على هذه البايتات الأربعة كحرف واحد ، ولكن يتم تثبيت طول الحرف داخل JavaScript دائمًا إلى 16 بت ، وسيتم التعامل مع هذه البايتات الأربعة كحرفين.
var s = '/ud834/udf06' ؛ s // "?"
يوضح الرمز أعلاه أنه بالنسبة للأحرف بين U+10000 و U+10FFFF ، يتم دائمًا معاملة JavaScript كحرفين (سمة الطول للشخصية هي 2). سيفشل التعبير العادي المستخدم لمطابقة حرف واحد (يعتقد JavaScript أن أكثر من حرف واحد موجود هنا) ، ولا يمكن لطريقة Charat إرجاع حرف واحد ، وتُرجع طريقة charcodeat القيمة العشرية المقابلة لكل بايت.
لذلك ، عند التعامل مع هذا ، يجب أخذ هذا في الاعتبار. بالنسبة إلى 4 بايت أحرف Unicode ، على افتراض أن C هو رقم Unicode للحرف ، H هو أول بايتان ، و L هو آخر بايتتين ، فإن علاقة التحويل بينهما كما يلي.
// تحويل الأحرف أكبر من U + FFFFFF من Unicode إلى UTF -16H = Math.Floor ((C - 0x10000)/ 0x400) + 0xd800l = (C - 0x10000) ٪ 0x400 + 0xDC00 // تحويل الأحرف أكبر من U + FFFFF من Utf -1 إلى Unicodec = 0x10000
يمكن للتعبير العادي التالي التعرف على جميع أحرف UTF-16.
([/0-/ud7ff/ue000-/ufff] | [/ud800-/udbff] [/udc00-/udff])
نظرًا لأن محرك JavaScript (بالمعنى الدقيق للكلمة ، مواصفات ES5) لا يمكن أن يتعرف تلقائيًا على أحرف Unicode للطائرة الإضافية (رقم أكبر من 0xFFFF) ، فإن جميع وظائف معالجة السلسلة ستنتج نتائج غير صحيحة عند مواجهة هذه الأحرف. إذا كنت ترغب في إكمال العمليات المتعلقة بالسلسلة ، فيجب عليك تحديد ما إذا كانت الأحرف تقع ضمن نطاق 0xD800 إلى 0xDFFF.
فيما يلي وظيفة يمكنها التعامل بشكل صحيح مع اجتياز السلسلة.
وظيفة getSymbols (سلسلة) {var length = string.length ؛ var index = -1 ؛ VAR OUTPUT = [] ؛ حرف var var charcode ؛ بينما (++ فهرس <الطول) {character = string.charat (index) ؛ charcode = character.charcodeat (0) ؛ if (charcode> = 0xd800 && charcode <= 0xdbff) {output.push (حرف+string.charat (++ index)) ؛ } آخر {output.push (حرف) ؛ }} إخراج الإرجاع ؛} var symoms = getSymbols ('?') ؛ symoms.foreach (function (symbol) {// ...}) ؛يجب معالجة عمليات السلسلة الأخرى مثل الاستبدال (string.prototype.replace) ، وابليدي التقاطع (string.prototype.substring ، string.prototype.slice) بالمثل.
base64 transcoding
BASE64 هي طريقة ترميز يمكنها تحويل أي حرف إلى أحرف قابلة للطباعة. تُستخدم طريقة الترميز هذه بشكل أساسي ليس للتشفير ، ولكن لتجنب الأحرف الخاصة ، وتبسيط معالجة البرنامج.
يوفر JavaScript أصلاً طريقتين متعلقة بـ BASE64.
var string = 'hello world!' ؛ btoa (سلسلة) // هاتان الطريقتان غير مناسبان للأحرف غير ASCII وسيقومان بالإبلاغ عن خطأ. BTOA ('Hello') // uncaught Domexception: تحتوي السلسلة المراد ترميزها على أحرف خارج نطاق Latin1. لتحويل الأحرف غير ASCII إلى ترميز BASE64 ، يجب إدخال رابط ترميز الترميز في الوسط ، ثم يتم استخدام هاتين الطريقتين. الدالة B64encode (str) {return BTOA (EncodeUricomponent (str)) ؛} الوظيفة B64Decode (str) {return decodeuricomponent (atob (str)) ؛} b64encode ('hello') // "juu0jujejuewjuuu1jue1juje" b64decode ('Juu0jujejuewjuu1jue1juje') // "Hello"