java.math.BigInteger не может быть приведен к java.lang.Integer

Отношение типа оператора реляционного сопоставления 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

13
задан alexander.polomodov 5 October 2017 в 16:34
поделиться