The less than or equal (<=
) operator returns true
if the left operand is less than or equal to the right operand, and false
otherwise.
Syntax
x <= y
Description
The operands are compared using the same algorithm as the Less than operator, with the operands swapped and the result negated. x <= y
is generally equivalent to !(y < x)
, except for two cases where x <= y
and x > y
are both false
:
- If one of the operands gets converted to a BigInt, while the other gets converted to a string that cannot be converted to a BigInt value (it throws a syntax error when passed to
BigInt()
). - If one of the operands gets converted to
NaN
. (For example, strings that cannot be converted to numbers, orundefined
.)
In addition, x <= y
coerces x
to a primitive before y
, while y < x
coerces y
to a primitive before x
. Because coercion may have side effects, the order of the operands may matter.
x <= y
is generally equivalent to x < y || x == y
, except for a few cases:
- When one of
x
ory
isnull
, and the other is something that's notnull
and becomes 0 when coerced to numeric (including0
,0n
,false
,""
,"0"
,new Date(0)
, etc.):x <= y
istrue
, whilex < y || x == y
isfalse
. - When one of
x
ory
isundefined
, and the other is one ofnull
orundefined
:x <= y
isfalse
, whilex == y
istrue
. - When
x
andy
are the same object that becomesNaN
after the first step of Less than (such asnew Date(NaN)
):x <= y
isfalse
, whilex == y
istrue
. - When
x
andy
are different objects that become the same value after the first step of Less than:x <= y
istrue
, whilex < y || x == y
isfalse
.
Examples
String to string comparison
"a" <= "b"; // true
"a" <= "a"; // true
"a" <= "3"; // false
String to number comparison
"5" <= 3; // false
"3" <= 3; // true
"3" <= 5; // true
"hello" <= 5; // false
5 <= "hello"; // false
Number to Number comparison
5 <= 3; // false
3 <= 3; // true
3 <= 5; // true
Number to BigInt comparison
5n <= 3; // false
3 <= 3n; // true
3 <= 5n; // true
Comparing Boolean, null, undefined, NaN
true <= false; // false
true <= true; // true
false <= true; // true
true <= 0; // false
true <= 1; // true
null <= 0; // true
1 <= null; // false
undefined <= 3; // false
3 <= undefined; // false
3 <= NaN; // false
NaN <= 3; // false