Почему я должен использовать string.length == 0 вместо string == "" при проверке пустой строки в ECMAScript? - PullRequest
12 голосов
/ 02 декабря 2009

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

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

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

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

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

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

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

(На самом деле мы делаем это в Siebel eScript, совместимом с ECMAScript Edition 4)

Спасибо.

Ответы [ 3 ]

29 голосов
/ 02 декабря 2009

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

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

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

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

Смотри также:

1 голос
/ 14 сентября 2015

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

1 голос
/ 02 декабря 2009

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

...