Это очень интересная причина, согласно этой книге , когда вы сравниваете что-либо с логическим значением, как вы делаете, например, в x == y
это следует такой схеме:
Если тип (x) является логическим, вернуть результат сравнения ToNumber (x) == y.
Если тип (y) является логическим, вернуть результат сравнения x == ToNumber (y).
Таким образом, когда вы сравниваете 1 == true
, на самом деле он делает 1 == ToNumber(true)
, который затем превращается в 1 == 1
, но когда вы делаете 2 == true
, он превращается в 2 == 1
, что ложно дляКонечно.
Эта и некоторые другие причины, приведенные в книге, предлагают не сравнивать вещи с логическими значениями.
Когда вы производите сравнение с логическими значениями, не имеет значения, является ли само значениеявляется правдивым или ложным, поскольку он никогда не превращается в логическое значение, но логическое значение приводится к типу, который можно сравнить с другой стороной оператора ==
.
Надеюсь, вы найдете этот ответ удовлетворительным.