Javascript:; vs javascript: void (0);

Я хотел бы знать, в чем разница между javascript:; и javascript:void(0);, если я использую их в атрибуте href для привязки a anchor (link)

<a href="javascript:;" onclick="DoSomething();">Link</a>

<a href="javascript:void(0);" onclick="DoSomething();">Link</a>

Я вижу, что они действуют одинаково во всех браузерах, но какова техническая разница?

С уважением, Магди

Ответ 1

В одном выполняется JavaScript, который не имеет операторов, другой выполняет JavaScript, который вычисляет оператор 0, а затем возвращает undefined.

Ничего не должно быть.

Ответ 2

Только последнее javascript:void(0); более читаемо и принятое соглашение, в котором говорится, что этот код ничего не делает.

Стоит отметить, что отраслевые стандарты прошли долгий путь в отношении этого синтаксиса. Вы должны изучить Progressive Enhancement.

Ответ 3

Я согласен с Дэвидом, что ни один из них не должен использоваться. Псевдо-протокол javascript может помещать страницу в состояние ожидания в некоторых браузерах, что может иметь неожиданные последствия. В качестве одного примера я потратил несколько часов на отладку веб-приложения, которое разбивало IE6 всякий раз, когда кто-то щелкал ссылку javascript: вскоре после загрузки страницы. Оказалось, что страница, входящая в состояние ожидания, противоречит Flash-ролику, пытающемуся инициализировать. Я решил проблему, заменив ссылку на одну в этом формате:

<a href="#" onclick="DoSomething(); return false;">Link</a>

"return false" предотвращает фактическое выполнение ссылки.