&& для нулевого безопасного вызова метода, хорошо или плохо? - PullRequest
3 голосов
/ 12 октября 2011

Просто начал использовать jslint, чтобы проверить мой код JavaScript.Это указало, что я должен заменить

result = value ? value : defaultValue;

на

result = value || defaultValue;

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

if (arg) {
    arg.doSomething();
}

Я пытался:

arg && arg.doSomething();

Последний отлично работает в браузере, но jslint жалуется на «Ожидается вызов присваивания или функции и вместо этого он видит выражение».

Последнее утверждение является плохим, неправильным, опасным или jslint чрезмерно защищает?Использование var dummy = arg && arg.doSomething(); действительно заставляет сообщение уходить просто глупо.

1 Ответ

3 голосов
/ 12 октября 2011

JSLint должен рассматривать это предупреждение в лучшем случае (но тогда JSLint не отличает предупреждения от явных ошибок), определенно не ошибка - но помните, что JSLint имеет целью обеспечить соблюдение стандартов стиля кодирования Крокфорда, которые могут отличаться от ваших (они, конечно, отличаются от моего );Вы могли бы проверить JSHint , который предлагает больше контроля, хотя я не сразу вижу вариант для этого конкретного условия.

Ваш arg && arg.doSomething() в порядке, но имейте в виду, что он несколько продвинутыйи вы потеряете некоторых людей, выполняющих обслуживание вашего кода.Я никогда не использую это таким образом.Я использую его в выражениях, но не сам по себе.Используете ли вы его, зависит от вас, но это не опасно, просто несколько непрозрачно.

...