Почему я должен использовать string.length == 0 над строкой == "" при проверке пустой строки в ECMAScript?

Большинство разработчиков моего текущего проекта используют (для меня) странный способ проверить пустые строки в ECMAScript:

if (theString.length == 0)
    // string is empty

Я обычно писал бы это вместо:

if (theString == "")
    // string is empty

Последняя версия кажется более читаемой и естественной для меня.

Никто, которого я попросил, не мог объяснить преимущества версии 1. Я думаю, что в какой-то момент в прошлом кто-то сказал всем, что это способ сделать это, но теперь этот человек ушел, и никто не помнит, почему он должен сделайте это.

Мне интересно, есть ли причина, почему я должен выбрать первую версию за секунду? Это имеет значение, одна версия лучше, чем другая? По какой-то причине одна версия более безопасна или быстрее?

(Мы действительно делаем это в Siebel eScript, который соответствует ECMAScript Edition 4)

Спасибо.

Ответ 1

Я действительно предпочитаю эту технику на нескольких языках, поскольку иногда бывает трудно различать пустой строковый литерал "" и несколько других строк (" ", '"').

Но есть еще одна причина избежать theString == "" в ECMAScript: 0 == "" оценивается как true, как и false == "" и 0.0 == ""...

... поэтому, если вы не знаете, что theString на самом деле строка, вы можете создать проблемы для себя, используя слабое сравнение. К счастью, вы можете избежать этого с разумным использованием строгого (===) оператора:

if ( theString === "" )
   // string is a string and is empty

См. также:

Ответ 2

Проблема в том, что если theString установлено на 0 (ноль), ваш второй пример будет оцениваться как true.

Ответ 3

Правильный ответ правильный, и важно понимать проверку типов. Но что касается производительности, сравнение строк будет терять до .length-метода каждый раз, но очень маленькой суммой. Если вы не заинтересованы в бритье миллисекунд со скоростью вашего сайта, вам может потребоваться выбрать то, что более читаемо/поддерживается для вас и, что более важно, ваша команда.