å æ³ï¼+ï¼
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
å æ³ï¼+ï¼è¿ç®ç¬¦è®¡ç®æ°åæä½æ°æåç¬¦ä¸²è¿æ¥çæ»åã
å°è¯ä¸ä¸
console.log(2 + 2);
// Expected output: 4
console.log(2 + true);
// Expected output: 3
console.log("hello " + "everyone");
// Expected output: "hello everyone"
console.log(2001 + ": A Space Odyssey");
// Expected output: "2001: A Space Odyssey"
è¯æ³
x + y
æè¿°
å æ³è¿ç®ç¬¦ï¼+ï¼ä¸ºä¸¤ç§ä¸åçè¿ç®éè½½ï¼æ°åå æ³ååç¬¦ä¸²è¿æ¥ã卿±å¼æ¶ï¼å®é¦å
å°ä¸¤ä¸ªæä½æ°å¼ºå¶è½¬æ¢ä¸ºåºæ¬ç±»åãç¶åï¼æ£æ¥ä¸¤ä¸ªæä½æ°çç±»åï¼
- 妿æä¸æ¹æ¯å符串ï¼å¦ä¸æ¹åä¼è¢«è½¬æ¢ä¸ºå符串ï¼å¹¶ä¸å®ä»¬è¿æ¥èµ·æ¥ã
- 妿忹齿¯ BigIntï¼åæ§è¡ BigInt å æ³ã妿䏿¹æ¯ BigInt èå¦ä¸æ¹ä¸æ¯ï¼ä¼æåº
TypeErrorã - å¦åï¼åæ¹é½ä¼è¢«è½¬æ¢ä¸ºæ°åï¼æ§è¡æ°åå æ³ã
åç¬¦ä¸²è¿æ¥ç»å¸¸è¢«è®¤ä¸ºçä»·äºæ¨¡æ¿å符串æè
String.prototype.concat()ï¼ä½å¹¶é妿¤ãå æ³å¼ºå¶å°è¡¨è¾¾å¼è½¬ä¸ºåºæ¬ç±»åï¼å®ä¼å
è°ç¨ valueOf()ï¼å¦ä¸æ¹é¢ï¼æ¨¡æ¿å符串å concat() å强å¶å°è¡¨è¾¾å¼è½¬ä¸ºå符串ï¼å®ä»¬ä¼å
è°ç¨ toString()ãå¦æè¡¨è¾¾å¼æ [Symbol.toPrimitive]() æ¹æ³ï¼åç¬¦ä¸²è¿æ¥æ¶ä¼ç¨ "default" ä½ä¸º hint è°ç¨å®ï¼ç¶è模æ¿å符串åç¨ "string"ãè¿å¯¹äºå
·æä¸åçå符串ååå§å¼è¡¨ç°ç对象æ¥è¯´å¾éè¦ââä¾å¦ Temporalï¼å®ç valueOf() æ¹æ³ä¼æåºé误ã
const t = Temporal.Now.instant();
"" + t; // æåº TypeError
`${t}`; // '2022-07-31T04:48:56.113918308Z'
"".concat(t); // '2022-07-31T04:48:56.113918308Z'
建议ä¸è¦ä½¿ç¨ "" + x æ¥æ§è¡å符串强å¶è½¬æ¢ã
示ä¾
>æ°åå æ³
// Number + Number -> addition
1 + 2; // 3
// Boolean + Number -> addition
true + 1; // 2
// Boolean + Boolean -> addition
false + false; // 0
åç¬¦ä¸²è¿æ¥
// String + String -> concatenation
"foo" + "bar"; // "foobar"
// Number + String -> concatenation
5 + "foo"; // "5foo"
// String + Boolean -> concatenation
"foo" + false; // "foofalse"
// String + Number -> concatenation
"2" + 2; // "22"
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification > # sec-addition-operator-plus > |