jsrosetta

Kiểu dữ liệu

Kiểu dữ liệu

Các kiểu nguyên thuỷ và composite của JavaScript so với hệ kiểu tĩnh của Go, Rust, Swift và Java (int8..uint64, struct, map, channel…).

Phiên bản tối thiểu
Node.js ≥ 12.20Go ≥ 1.18Rust ≥ 1.60Swift ≥ 1.2Java ≥ 25
Đã chạy thử trên
Node.js 24.12.0Go 1.27.1Rust 1.98.1Swift 6.2.4Java 25.0.4.1

Code Node.js là ES module: lưu file .mjs hoặc đặt "type": "module" trong package.json.

JavaScript có hai kiểu số nguyên thuỷ: number (luôn là double 64-bit) và bigint (số nguyên độ chính xác tuỳ ý), cộng với một số ít kiểu composite dựng sẵn (object, Map, Set, Promise…). Go, Rust, Swift và Java đều tách số ra thành nhiều kiểu theo kích thước và dấu, cộng với các composite type tường minh như struct/map/channel (Go và Rust), struct/class/Dictionary (Swift), hay record/Map/List (Java).

Kiểu nguyên thuỷ và composite

// primitives
const myBool = true
const myNumber = 10
const myString = 'foo'
const mySymbol = Symbol('bar')
const myNull = null
const myUndefined = undefined
 
// object types
const myObject = {}
const myArray = []
const myFunction = function() {}
const myError = new Error('error')
const myDate = new Date()
const myRegex = /a/
const myMap = new Map()
const mySet = new Set()
const myPromise = Promise.resolve()
const myGenerator = function *() {}
const myClass = class {}

Khác biệt chính

Node.js Go Rust Swift Java
Kiểu số 2 kiểu: number, bigint hơn chục kiểu: int8..uint64, complex64/128 tương tự Go, cộng thêm i128/u128 (Go không có), trừ complex (crate ngoài) Int8..UInt64, Float/Double 7 kiểu số nguyên thuỷ, char là kiểu không dấu duy nhất
Kiểu bất kỳ không cần khai báo any (alias interface{}, từ 1.18) Box<dyn Any> (hiếm dùng, thường generic hơn) Any Object
Giá trị "chưa có" undefined zero value theo từng kiểu không có — biến phải được gán trước khi dùng (definite assignment); dùng Option<T>::None để biểu diễn "không có giá trị" nil (chỉ với Optional) zero value/null chỉ áp dụng cho field; biến local cũng phải được gán trước khi dùng (definite assignment), giống Rust
Hàm là first-class value có có, kiểu func() có, fn() hoặc closure có, kiểu () -> Void có, qua functional interface/lambda

Tham khảo: github.com/miguelmota/golang-for-nodejs-developers#types