#javascript #string
#javascript #строка
Вопрос:
Я хочу сгенерировать строку «» в Javascript, но, похоже, не смог этого сделать. Если я напишу только «», я получу ошибку времени компиляции, потому что » само по себе экранировано. Но если я сделаю «\», я получу две косые черты в качестве выходных данных. Итак, как мне сгенерировать строку с одной косой чертой?
Комментарии:
1. Возможно, я неправильно понимаю, но косая черта (обычно просто «косая черта») — это
/
, вы, кажется, используете обратную косую черту?2. @DavidThomas Возможно, я неправильно понял термин. Но каким бы ни было имя, я хочу сгенерировать «» в качестве выходных данных
3. Вы пробовали
"\"
? Потому что это должно сработать (оно экранирует управляющий символ).4. Как вы думаете, почему
"\"
это приведет к двум обратным косым чертам? (ПРИМЕЧАНИЕ: не косые черты)5. @user3727864 Если выходные данные отформатированы в формате JSON, для этого также требуется экранирование обратной косой черты, и они будут записаны как таковые. Однако управляющая последовательность все равно должна представлять один символ в значении. Пример:
console.log('\'.length); // 1
Ответ №1:
Символ /
является косой чертой. Символ
является обратной косой чертой.
Обратная косая черта
используется в качестве управляющего символа для строк в JavaScript и в JSON. Некоторым символам требуется устранить неоднозначность строковых литералов. Эта строка неоднозначна:
'He's going to the park'
Есть три одинарных кавычки '
, и анализатор не знает, что является частью строки, а что нет. Мы можем использовать обратную косую черту для экранирования символа, который мы хотим представить, '
вместо закрытия строкового литерала (также '
).
'He's going to the park'
Теперь, если обратная косая черта имеет особое значение, как мы представляем буквальный символ обратной косой черты
в строке? Просто экранируя обратную косую черту
с помощью обратной косой черты
.
'C:\DOS\command.com' // In memory this is: C:DOScommand.com
Помните, что это экранирование предназначено только для текстового представления строк в коде или JSON. Код проанализирован, и строки в памяти соответствуют ожидаемым, при этом все экранирования разрешены до соответствующих символов.
Теперь ваш вопрос касается JSON и предполагает, что это неверно:
Я пишу » как ключ к пакету JSON. Результат будет примерно таким
"READY_TO_PRINT_DATE":"/\Date(1403911292:981000 420)\/"
.
JSON требует того же экранирования, что и в JavaScript, и по той же причине… чтобы удалить двусмысленность из строк. JSON-версия строки /\Date(1403911292:981000 420)\/
— это то, как вы правильно представляете фактическую строку /Date(1403911292:981000 420)/
.
Я надеюсь, что это поможет прояснить некоторые из ваших недоразумений.
Ответ №2:
вы можете избежать косой черты:
myvar = "\";