å°äºï¼<ï¼
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
å°äºï¼<ï¼è¿ç®ç¬¦å¨å·¦æä½æ°æ¯å³æä½æ°å°æ¶è¿å trueï¼å¦åè¿å falseã
å°è¯ä¸ä¸
console.log(5 < 3);
// Expected output: false
console.log(3 < 3);
// Expected output: false
// Compare bigint to number
console.log(3n < 5);
// Expected output: true
console.log("aa" < "ab");
// Expected output: true
è¯æ³
x < y
æè¿°
æä½æ°ç»è¿å¤è½®å¼ºå¶æ¯è¾ï¼å¯ä»¥æ»ç»ä¸ºä»¥ä¸å ç¹ï¼
é¦å
ï¼éè¿ä¾æ¬¡è°ç¨å
¶ [Symbol.toPrimitive]()ï¼ä»¥ "number" ä½ä¸ºæç¤ºï¼ãvalueOf() å toString() æ¹æ³ï¼å°å¯¹è±¡è½¬æ¢ä¸ºåå§ç±»åã左边çæä½æ°æ»æ¯å¨å³è¾¹çæä½æ°ä¹å被强å¶è½¬æ¢ã请注æï¼å°½ç®¡ [Symbol.toPrimitive]() 被è°ç¨æ¶å¸¦æ "number" çæç¤ºï¼æå³çæä¸ç¹å¾åäºå°å¯¹è±¡åææ°åï¼ï¼ä½è¿åå¼å¹¶æ²¡æè½¬æ¢ä¸ºæ°åï¼å 为å符串ä»ç¶è¢«ç¹å«å¤çã
- å¦æä¸¤ä¸ªå¼é½æ¯å符串ï¼åæ ¹æ®å®ä»¬æå å«ç Unicode ç ä½çå¼ï¼å°å®ä»¬ä½ä¸ºå符串è¿è¡æ¯è¾ã
- å¦åï¼JavaScript ä¼å°è¯å°éæ°å¼ç±»å转å为æ°å¼ç±»åï¼
- å¸å°å¼
trueåfalseåå«è½¬å为 1 å 0ã null转å为 0ãundefined转å为NaNã- åç¬¦ä¸²æ ¹æ®å
¶å
å«çå¼è¿è¡è½¬æ¢ï¼å¦æä¸å
嫿°åå¼ï¼å转æ¢ä¸º
NaNã
- å¸å°å¼
- 妿任æä¸ä¸ªå¼ä¸º
NaNï¼åè¿ç®ç¬¦è¿åfalseã - å¦åï¼è¿äºå¼å°ä½ä¸ºæ°å¼è¿è¡æ¯è¾ãBigInt åæ°å¼å¯ä»¥ä¸èµ·æ¯è¾ã
å
¶ä»è¿ç®ç¬¦ï¼å
æ¬ >ã>= å <= 使ç¨ä¸ < ç¸åçç®æ³ãæä¸¤ç§æ
åµï¼ææå个è¿ç®ç¬¦é½è¿å falseï¼
- 妿å
¶ä¸ä¸ä¸ªæä½æ°è¢«è½¬æ¢ä¸º BigIntï¼èå¦ä¸ä¸ªè¢«è½¬æ¢ä¸ºæ æ³è½¬æ¢ä¸º BigInt å¼çå符串ï¼å½ä¼ éç»
BigInt()æ¶ï¼å®ä¼æåºè¯æ³é误ï¼ã - 妿å
¶ä¸ä¸ä¸ªæä½æ°è¢«è½¬å为
NaNï¼å¦ä¸è½è½¬å为æ°åçåç¬¦ä¸²ï¼æundefinedã
å¯¹äºææå ¶ä»æ åµï¼è¿åç§è¿ç®ç¬¦æä»¥ä¸å ³ç³»ï¼
x < y === !(x >= y);
x <= y === !(x > y);
x > y === y < x;
x >= y === y <= x;
夿³¨ï¼< å > ä¹é´ä¸ä¸ªææ¾åºå«æ¯å¼ºå¶ç顺åºï¼ç¹å«æ¯å½å¼ºå¶è½¬å为åå§å¼æå¯ä½ç¨æ¶ãææçæ¯è¾æä½ç¬¦é½æ¯å
强å¶è½¬åå·¦æä½æ°å强å¶è½¬å峿使°ã
示ä¾
>å符串ä¹é´çæ¯è¾
"a" < "b"; // true
"a" < "a"; // false
"a" < "3"; // false
åç¬¦ä¸²ä¸æ°å¼æ¯è¾
"5" < 3; // false
"3" < 3; // false
"3" < 5; // true
"hello" < 5; // false
5 < "hello"; // false
"5" < 3n; // false
"3" < 5n; // true
æ°å¼ä¹é´çæ¯è¾
5 < 3; // false
3 < 3; // false
3 < 5; // true
æ°å¼ä¸ BigInt ä¹é´çæ¯è¾
5n < 3; // false
3 < 5n; // true
æ¯è¾å¸å°å¼ãnullãundefined å NaN
true < false; // false
false < true; // true
0 < true; // true
true < 1; // false
null < 0; // false
null < 1; // true
undefined < 3; // false
3 < undefined; // false
3 < NaN; // false
NaN < 3; // false
嫿å¯ä½ç¨çæ¯è¾
æ¯è¾æ»æ¯å°å ¶æä½æ°å¼ºå¶è½¬å为åå§å¼ãè¿æå³çåä¸ä¸ªå¯¹è±¡å¨ä¸ä¸ªæ¯è¾è¡¨è¾¾å¼ä¸å¯è½æç»ä¼æä¸åçå¼ãä¾å¦ï¼ä½ å¯è½æä¸¤ä¸ªæ¢å¤§äºåå°äºå¯¹æ¹çå¼ã
class Mystery {
static #coercionCount = -1;
valueOf() {
Mystery.#coercionCount++;
// 左侧æä½æ°å
强å¶è½¬åï¼æä»¥å¯¹å³æä½æ°ä¼å
è¿å 0 åè¿å 1
return Mystery.#coercionCount % 2;
}
}
const l = new Mystery();
const r = new Mystery();
console.log(l < r && r < l);
// true
è¦åï¼è¿å¯è½æ¯æ··ä¹±çæ ¹æºãå¦æä½ ç对象æä¾äºèªå®ä¹çåå§å¼è½¬æ¢é»è¾ï¼è¯·ç¡®ä¿å®æ¯å¹ççï¼å¤æ¬¡å¼ºå¶è½¬ååºè¯¥è¿åç¸åçå¼ã
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification > # sec-relational-operators > |