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

js
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ố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.

js
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ố

js
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ố:

js
true + 1; // 2
false + false; // 0

Cộng dùng BigInt

js
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.

js
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:

js
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:

js
"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

Tương thích trình duyệt

Xem thêm