Я уже видел несколько вопросов, объясняющих, почему 0 == ""
является true
в JavaScript, но у меня есть немного более глубокий вопрос.Как JavaScript (0 == "") === true согласен с правилами преобразования типа ECMA-262?
Таким образом, ответ почему 0 == ""
в JavaScript true
является то, что строка ""
преобразуется в число, строка нулевой длины преобразуется в нулевое число, но, как это согласуется с [9.3.1 paragraph of ECMA-262](http://www.ecma-international.org/ecma-262/5.1/#sec-9.3.1)
, который говорит, что строка должна быть проанализирован с использованием данной формальной грамматики, и если это не удается, то такая строка преобразуется в NaN
. Когда я посмотрел эту спецификацию, я подумал, что ""
не является строковым числовым литералом, и он должен быть проанализирован как NaN
и NaN
не равен 0.0
.
Итак, почему выше спекуляций неверно и 0 == ""
на самом деле true
?
Заранее спасибо.
* MV of StringNumericLiteral ::: [empty] is 0. * –
О, спасибо. Мне нужно быть внимательнее. :) – yaromir