ما هي أنظف طريقة لكتابة سلسلة متعددة في JavaScript؟ [مكرر

StackOverflow https://stackoverflow.com/questions/1589234

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

ليس من الضروري حقًا إضافة الخطوط الجديدة ، فقط شيء يمكن قراءته.

أي شيء أفضل من هذا؟

str = "line 1" +
      "line 2" +
      "line 3";
هل كانت مفيدة؟

المحلول

متطابق تقريبا لإجابة نيكفيتز:

var str = [""
    ,"line 1"
    ,"line 2"
    ,"line 3"
].join("");
// str will contain "line1line2line3"

الفرق ، الرمز أكثر قابلية للصيانة لأنه يمكن إعادة ترتيب الخطوط دون النظر إلى مكان وجود الفواصل. لا توجد أخطاء بناء الجملة.

نصائح أخرى

يعجبني هذا الإصدار (مختلف عن تنسيق الكود):

var str = "line 1"
        + "line 2"
        + "line 3";

يمكنك أن تفعل

str = "\
line 1\
line 2\
line 3";

كما هو مذكور في التعليقات ، يتعامل JavaScript Parsers مع هذا الغرامة (إنه يعمل في جميع المتصفحات الرئيسية) ، ولكنه ليس جزءًا رسميًا من بناء جملة Script ECMA. على هذا النحو ، قد تعمل أو لا تعمل مع الضواغط ، ومدحار الأخطاء ، وليس مضمونًا للعمل في المتصفحات.

قد يكون هذا أكثر قابلية للقراءة ، ولكن ليس الطريقة "الأفضل" للقيام بذلك. ربما سيدعم برنامج ECMA Script شيئًا مثل C #'s @"" يومًا ما.

لعِلمِكَ. الطريقة التي تقترح بها هي الطريقة الصحيحة وأفضل من الإجابات الأخرى. JSlint يتحقق فقط من صحة نسختك.

var str = [
    "line 1",
    "line 2",
    "line 3"
].join("");
// str will contain "line1line2line3"

إذا كنت تريد فعليًا الخطوط الجديدة في السلسلة ، فاستبدل .join("") مع .join("\n")/

باستمرار.

أيًا كانت الطريقة التي تختارها ، افعلها بنفس الطريقة تمامًا طوال التطبيق الخاص بك. إذا كنت تعمل على تطبيق يحتوي بالفعل على رمز مكتوبة ، فاقبل الاتفاقية التي يضبطونها وتذهب إليها.

نعم! تستطيع استخدم حرف ليكون JavaScript يتجاهل نهاية أحرف الخط.

str = 'line 1 \
line 2 \
line 3';

ولكن كما أشار من قبل إلزو فالوجي, ، هذا لن يتحقق من صحة باستخدام JSLINT.

هذا سوف يعمل فقط في المتصفحات مع E4X الدعم - أتمنى أن نتمكن من استخدامه في IE

var str = <><![CDATA[

   Look, a multi-line
   string! < " // ' ? &

]]></>.toString();

إليك واحدة قد تكون مفيدة أثناء التطوير عند استخدام Chrome.

function FSTR(f) {
    // remove up to comment start and trailing spaces and one newline
    s = f.toString().replace(/^.*\/\* *\r?\n/,"");
    // remove the trailing */} with preceeding spaces and newline
    s = s.replace(/\n *\*\/\s*\}\s*$/,"")
    return s;
}

s = FSTR(function(){/*
uniform vec2 resolution;
uniform float time;

void main(void)
{
    vec2 p = -1.0 + 2.0 * gl_FragCoord.xy / resolution.xy;
    vec2 cc = vec2( cos(.25*time), sin(.25*time*1.423) );
    ...
    float color = sqrt(sqrt(dmin))*0.7;
    gl_FragColor = vec4(color,color,color,1.0);
}
*/});

هذا لا يعمل ل ثعلب النار, ، على الرغم من أنه يعمل في الكروم.

مثال الاستخدام سيكون لكتابة/اختبار تظليل webgl. أثناء التطوير ، يكون هذا أجمل كثيرًا للعمل معه ، وبعد ذلك يمكنك دائمًا تشغيل هذا باستخدام regexp بسيط يحول هذا الجملة إلى إصدار متصفح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top