JavaScript

Вопрос по стилю кода. Следует ли проверять наличие свойства в объекте если я точно знаю что оно должно там быть?

var o = {p:1.2};
// много какого-то кода...
o.p.toFixed(); // например вызов метода toFixed(), а если свойства вдруг не будет (o.p вернёт undefined) то будет ошибка.

По-моему куча ненужных проверок усложняют чтение кода и заставляют продумывать кучу лишних комбинаций. А вы что думаете?
Для уменьшения кол-ва ручных проверок придумали исключения:
https://learn.javascript.ru/exception

Но, к сожалению, JS разрешает самые бредовые комбинации - без каких либо предупреждений или ошибок. Так что без проверок не обойтись.

P.S. Сомневаешься - проверяй. Уверен - всё равно, проверяй. Потом проверку можешь убрать, но сначала - проверяй.
ЕА
Евгений Андреев
97 744
Лучший ответ
А какой ответ ожидали?) Нет общепринятого стандарта - всё зависит от кода.

Если пишу какую-нибудь универсальную функцию, которая в будущем много где пригодится - предпочитаю перестраховаться, чем позже вернуться и вникать в ошибку.

P.s. если написать просто o.p.toFixed(); — ничего не будет....

o.p = o.p.toFixed();

Можно без if, использовать логическое "ИЛИ"... вернется undefined - возьмется 0.

o.p = ( o.p || 0 ).toFixed();
Думаю, что такое следует писать, когда вспоминаешь об этом. Помогает искать ошибки, появляющиеся после неосторожного изменения внутренней логики.
В плюсах, например, уместно использовать макросы препроцессора, которые делают проверку только при отладочной сборке, а в релизной никаких проверок не делает, чтобы чуть-чуть увеличить производительность.
Александр Круч
Александр Круч
51 164
С какой целью осуществляется проверка? В данном случае
o.p.toFixed()
если нет свойства "p", будет ошибка. А что должно быть? Я считаю, что и должна быть ошибка. Если ошибка будет заглушена проверкой, куда попадёт информация, что свойство не найдено? Если отсутствует свойство, которое обязательно должно быть по логике программы, значит программа уже работает неправильно. Заглушая ошибку ты не исправляешь её, а только изменяешь её проявления.
если есть сомнения есть такая
простая проверка
if ( num.toFixed ){
что то делаем
}

в большинстве случаев проверка на стандартные функции объектов не требуется
можешь не проверять
Петр Сюкрев
Петр Сюкрев
4 541
Евгений Николаев а если вдруг пропадёт? например электричество кончится и не запишется...