Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Надежность кода JS и вызов несуществующего свойства объекта. (https://javascript.ru/forum/misc/81258-nadezhnost-koda-js-i-vyzov-nesushhestvuyushhego-svojjstva-obekta.html)

Oleg_Lugaro 30.10.2020 11:39

Надежность кода JS и вызов несуществующего свойства объекта.
 
Почему JS позволяет обращаться к несуществующему свойству объекта? Ведь это означает что что то пошло не так.

Делаете ли вы какую то перестраховку типа функций проверяющие вхождение свойства перед вызовом или оборачивание объектов в прокси?

Вопрос возник потому что для меня лучше что бы код не работал вообще (и это было сразу заметно), чем работал неправильно.

SuperZen 30.10.2020 12:16

https://www.typescriptlang.org/docs/...m-scratch.html
https://flow.org/en/docs/types/objects/
https://dmitripavlutin.com/check-if-...ty-javascript/
https://github.com/ajv-validator/ajv...ds-for-objects

Oleg_Lugaro 20.11.2020 17:59

Спасибо. За проверки в стиле "hasOwnProperty()" знал, но это же будет не красиво везде использовать.
А про TypeScript очень интересно!
4ая ссылка на гитхаб не открылась.

Aetae 20.11.2020 22:37

Цитата:

Вопрос возник потому что для меня лучше что бы код не работал вообще (и это было сразу заметно), чем работал неправильно.
Ну, тебе не повезло. Изначальная парадигма заложенная в javascript прямо противоположная: "лучше что бы код работал неправильно, чем не работал вообще". Это ты будешь встречать в js везде и во всём.

Последние годы в добавляемых фичах наметились изменения в сторону большей строгости, но лично меня они пока только бесят, т.к. на данный момент применяются сугубо точечно и только нарушают интуитивное восприятие, без особого толка.

P.S. В основном пишу на TypeScript, но он не панацея, т.к. не меняет(как принцип) механик javascript. Начинать работать сразу с ts можно, но это чревато "удивлениями", когда в том или ином случае внезапно проявит себя какая-нибудь "особенность" js.


Часовой пояс GMT +3, время: 20:55.