Что происходит с сопоставлением объекта Date с null, что происходит? [Дубликат]

У меня была аналогичная проблема из-за копирования пасты с другой страницы, что я получил:

<form id="form1" runat="server">
    ...
    <form id="form2" runat="server">
    ....
    </form>
</form>

Я просто удалил форму с id = "form2" внутри формы с id = "form1" и выпустил прошло. Это может быть не ваша проблема, но может быть что-то подобное.

7
задан Caspar 4 February 2013 в 15:43
поделиться

1 ответ

Отношение типа оператора реляционного сопоставления JavaScript определено в спецификации JavaScript , в частности в разделах 11.8-11.8.5 , которые описывают операторы и разделы 9.1 ( ToPrimitive) и 9.3 (ToNumber) , которые описывают процесс принуждения операндов.

Короче говоря, 4 оператора сравнения (<, >, <= и >=) делают все возможное, чтобы преобразовать каждый операнд в число, а затем сравнить числа. Исключение составляет то, что оба операнда являются строками, и в этом случае они сравниваются по алфавиту.

В частности,

  1. Если аргумент o является объектом вместо примитива, попытайтесь преобразовать его в примитивное значение , вызвав o.valueOf() или - если o.valueOf не был определен или не возвращал примитивный тип при вызове - путем вызова o.toString()
  2. Если оба аргумента являются строками, сравните их в соответствии с их лексикографическим порядком . Например, это означает, что "a" < "b" и "a" < "aa" оба возвращают true.
  3. В противном случае преобразует каждый примитив в число , что означает: undefined -> NaN Null -> +0 Boolean примитивный тип -> 1, если true, +0, если false String -> попытаться проанализировать число из строки
  4. Затем сравните каждый элемент, как и следовало ожидать для оператора, с оговоркой, что любое сравнение с NaN оценивается как false.

Итак, это означает следующее:

console.log(true > null);           //prints true
console.log(true > false);          //prints true
console.log("1000.0" > 999);        //prints true
console.log("  1000\t\n" < 1001);   //prints true

var oVal1 = { valueOf: function() { return 1; } };
var oVal0 = { toString: function() { return "0"; } };

console.log(oVal1 > null);         //prints true
console.log(oVal0 < true);         //prints true
console.log(oVal0 < oVal1);        //prints true
19
ответ дан 2 revs 27 August 2018 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: