Могу ли я пропустить каждую точку с запятой в конце строки во всей версии (если есть) Javascript?

Я изучаю JS и как-то понял, что могу пропустить ввод ; в конце строки, если в этой строке только один оператор. На самом деле я немного привык к этому; Я разработал простое приложение для iOS со Swift, которое также поддерживает этот тип синтаксиса.

Но мне интересно, есть ли конкретная версия или что-то в JS, которое не позволяет программистам пропустить последнюю точку с запятой. У многих языков были изменения в синтаксисе; поэтому я думаю, что у Javascript может быть такая проблема. Кто-нибудь может ответить на этот вопрос? Спасибо!

1 ответ

Решение

Обратите внимание, что хотя все версии JavaScript поддерживают ASI, в ASI есть ловушки, из-за которых невозможно избавиться от всех точек с запятой.

Например, следующее не будет работать так, как вы могли бы ожидать:

function foo() { return [2, 3] }

var x, y, i, j
j = 2
i = j
[x,y] = foo()

Вы можете ожидать, что i, j, а также x будет равно 2, и y будет равно 3, что будет, если бы каждая строка заканчивалась точкой с запятой. Однако это не так.

По факту, i является [2,3], в то время как x а также y являются undefined, Когда ASI выполнял этот раздел кода, он интерпретировал последние две строки как доступ к свойству:

i = j[x,y] = foo()

в то время как это было, вероятно, предназначено, чтобы быть операцией по разрушению:

i = j;
[x,y] = foo();

Чтобы обойти это, нужно использовать "защитные точки с запятой" перед любой строкой, начинающейся с [] или (), которая не должна рассматриваться как продолжение предыдущего оператора.

Другие вопросы по тегам