Опечатка закончилась как
a.b > 0
с a.b
неопределенным. Согласно MDN (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Greater_than_operator) сравнение вызывает .valueOf()
для операндов. Так и должно быть
a.b.valueOf() > 0
но на самом деле это выдает ошибку, которой, похоже, не происходит. Вместо этого это, кажется, оценивается:
undefined > 0
Я что-то неправильно понимаю?
В моем случае это привело к тихой ошибке в коде Node.js. Я, конечно, хотел, чтобы вместо этого была выдана ошибка.
Могу ли я справиться с этим без явной проверки операндов?
РЕДАКТИРОВАТЬ: кажется, что freeCodeCamp описывает это более правильно, чем MDN:
https://guide.freecodecamp.org/javascript/comparison-operators/
Но я все еще думаю о самом простом способе справиться с этим, не попадая в ловушку простых опечаток.
a.b
этоundefined
(что означает, чтоa !== undefined
. - person Leo   schedule 30.10.2019.valueOf()
для операндов - только если операнд является объектом. Он не делает этого для примитивных значений - person Bergi   schedule 30.10.2019