2014-10-09 2 views
1

Я искал способ сделать многострочные строки в javascript. И я наткнулся на этот фрагмент кода:Что такое антиспас javascript и как он работает с многострочными строками?

var str = <><![CDATA[ 
This string spans multiple lines 
Doesn't need quoting of single quotes 
And the same goes for "double quotes". 
Because of the CDATA, I can also include some <b>html</b> 
Which can make use of <attributes with="double quotes"/> but at the same 
time, I can make use of the > and < signs without worrying about 
xml validity. 
]]></>; 

При использовании этот кусок кода в Visual Studio 2012, я получаю строки ошибки. Кроме того, я никогда не использовал CDATA в Javascript или HTML, поэтому я не уверен, как это должно работать.

Итак, 1, может ли этот код (с некоторой настройкой) работать? 2, что такое антиспас?

Source 1

Source 2

+3

JS не поддерживает многострочные строки (возможно, в ES6?). Просто используйте '+' конкатенацию. – Alnitak

+0

@Alnitak Мне это не нравится, и я не уверен, что считаю это многострочной строкой, но не могу ли вы использовать обратную косую черту в конце строки, чтобы продолжить ее дальше? В любом случае, я согласен с использованием конкатенации – Ian

+0

@ В некоторых браузерах, которые работают, но это не стандарт. – Alnitak

ответ

2

Этот код размещен не действует Javascript. Если ваш скрипт встроен в документ X [HT] ML, трюк CDATA может работать, но я подозреваю, что он все равно не будет, потому что он будет переведен на литеральные символы новой строки, прежде чем интерпретатор Javascript увидит его. В любом случае строковый литерал, содержащий неэкранированные символы новой строки, является синтаксической ошибкой.

Если под «antislash» вы имеете в виду \ характера (обычно называется «обратной косой»), он может быть использован (по крайней мере, в переводчиках, соответствующих 4 или более поздней редакции the ECMAScript specification) продолжать символьную строку на следующую строку , Но когда вы это делаете, вы на самом деле не создаете «многострочную строку», потому что и обратная косая черта и новая строка опускаются из результата строки.

var s = "abc \ 
     123" 
console.log(s) //= abc 123 

(я отступом для ясности выше, но если вы сделаете это, то результат зависит от реализации - некоторые интерпретаторы JS сквош лишние пробелы после LineContinuation, в то время как другие этого не делают.)

Обычный решение в JavaScript, чтобы использовать явные строки и конкатенации:

var z = "abc\n" + 
     "123" 
console.log(z) //= abc 
       // 123 

Или, возможно, что-то вроде этого (это то, что вы имели в виду, @torazaburo?):

[ 
    "abc", 
    "123", 
    "third line", 
    "another line" 
].join("\n") 
+1

Возможно, стоит упомянуть неловкое '[" .. ", (newline)" .. "]. Join ('')' hack. –

Смежные вопросы