У JavaScript есть как строгие, так и сопоставления типов
null >= 0;
, но (null==0)||(null>0)
- false
null <= 0;
истинно, но (null==0)||(null<0)
- false
"" >= 0
также верно
Для реляционных абстрактных сравнений (& lt; =,> =) операнды сначала преобразуются в примитивы, а затем к тому же типу перед сравнением.
typeof null returns "object"
Когда тип - объект javascript пытается стягивать объект (т. е. null), предпринимаются следующие шаги ( ECMAScript 2015 ):
PreferredType
не был передан, пусть hint
будет «по умолчанию». PreferredType
- hint
String, пусть hint
будет «string». PreferredType
- hint
Число, пусть hint
будет «числом». exoticToPrim
будет GetMethod(input, @@toPrimitive)
. ReturnIfAbrupt(exoticToPrim)
. exoticToPrim
не определено, то a) Пусть результат будет Call(exoticToPrim, input, «hint»)
. b) ReturnIfAbrupt(result)
. c) Если Type(result)
не является объектом, верните результат. d) Выбросить исключение TypeError. hint
является «значением по умолчанию», пусть hint
будет «числом». OrdinaryToPrimitive(input,hint)
. Допустимыми значениями для подсказки являются «по умолчанию», «число» и «строка». Объекты Date уникальны среди встроенных объектов ECMAScript в том смысле, что они рассматривают значение по умолчанию как эквивалентное «string». Все остальные встроенные объекты ECMAScript трактуют «по умолчанию» как эквивалентные «числу». ( ECMAScript 20.3.4.45 )
Итак, я думаю, null
преобразуется в 0.