Addition (+)
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Operator cộng (+) tạo ra tổng của các toán hạng số hoặc nối chuỗi.
Try it
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"
Cú pháp
x + y
Mô tả
Operator + được nạp chồng cho hai thao tác riêng biệt: cộng số và nối chuỗi. Khi ước lượng, đầu tiên nó ép buộc cả hai toán hạng thành các giá trị nguyên thủy. Sau đó, kiểu của hai toán hạng được kiểm tra:
- Nếu một vế là string, toán hạng còn lại cũng được chuyển đổi thành string và chúng được nối lại với nhau.
- Nếu cả hai đều là BigInt, phép cộng BigInt được thực hiện. Nếu một vế là BigInt nhưng vế kia không phải, một
TypeErrorđược ném ra. - Nếu không, cả hai vế đều được chuyển đổi thành số, và phép cộng số được thực hiện.
Nối chuỗi thường được cho là tương đương với template literals hoặc String.prototype.concat(), nhưng chúng không phải vậy. Phép cộng ép buộc expression thành một giá trị nguyên thủy, gọi valueOf() ưu tiên; mặt khác, template literals và concat() ép buộc expression thành một string, gọi toString() ưu tiên. Nếu expression có phương thức [Symbol.toPrimitive](), nối chuỗi gọi nó với "default" làm gợi ý, trong khi template literals sử dụng "string". Điều này quan trọng đối với các object có các biểu diễn string và nguyên thủy khác nhau — chẳng hạn như Temporal, có các phương thức valueOf() đều ném ra lỗi.
const t = Temporal.Now.instant();
"" + t; // Throws TypeError
`${t}`; // '2022-07-31T04:48:56.113918308Z'
"".concat(t); // '2022-07-31T04:48:56.113918308Z'
Bạn không nên dùng "" + x để thực hiện ép buộc chuỗi.
Ví dụ
>Cộng dùng số
1 + 2; // 3
Các giá trị không phải string, không phải BigInt khác được ép buộc thành số:
true + 1; // 2
false + false; // 0
Cộng dùng BigInt
1n + 2n; // 3n
Bạn không thể trộn lẫn các toán hạng BigInt và số trong phép cộng.
1n + 2; // TypeError: Cannot mix BigInt and other types, use explicit conversions
2 + 1n; // TypeError: Cannot mix BigInt and other types, use explicit conversions
"1" + 2n; // TypeError: Cannot mix BigInt and other types, use explicit conversions
Để thực hiện phép cộng với BigInt và một giá trị không phải BigInt, hãy chuyển đổi một trong hai toán hạng:
1n + BigInt(2); // 3n
Number(1n) + 2; // 3
Cộng dùng string
Nếu một trong các toán hạng là string, toán hạng còn lại được chuyển đổi thành string và chúng được nối lại:
"foo" + "bar"; // "foobar"
5 + "foo"; // "5foo"
"foo" + false; // "foofalse"
"2" + 2; // "22"
Thông số kỹ thuật
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-addition-operator-plus> |