forked from goplus/xgo
-
Notifications
You must be signed in to change notification settings - Fork 4
JavaScript vs. Go TypeSystem
xushiwei edited this page Apr 5, 2026
·
1 revision
| 特性 | JavaScript | Go |
|---|---|---|
| 类型系统 | 动态类型 | 静态类型 |
| 类型检查时机 | 运行时 | 编译时 |
| 类型声明 | 可选(默认无需声明) | 必须显式声明 |
| 类型推断 | 无原生支持(TS 有) | 支持 := 自动推断 |
| 基本类型 |
number、string、boolean、null、undefined、symbol、bigint
|
int、float64、string、bool、byte、rune 等 |
| 数字类型 | 统一为 number(IEEE 754) |
细分为 int8/16/32/64、float32/64、uint 等 |
| 空值 |
null / undefined(两种) |
nil(仅用于引用类型) |
| 类型转换 | 隐式转换(自动强制转换) | 必须显式转换,无隐式转换 |
| 数组/切片 | 动态数组,元素类型可混合 | 固定类型切片 []T,元素类型统一 |
| 对象/结构体 | 对象(键值对,灵活) |
struct(字段类型固定) |
| 接口 | 无原生接口(鸭子类型) |
interface(隐式实现,结构子类型) |
| 泛型 | 无原生支持(TS 有) | 支持(Go 1.18+) |
| 枚举 | 无原生 enum(用对象模拟) |
无原生 enum(用 iota + const 模拟) |
| 指针 | 无指针概念 | 支持指针 *T,但无指针运算 |
typeof / 类型断言 |
typeof、instanceof
|
类型断言 x.(T)、类型选择 switch x.(type)
|
| Map 类型 |
Object / Map(键类型任意) |
map[K]V(键值类型固定) |
| 函数类型 | 一等公民,参数类型不限 | 一等公民,参数/返回值类型严格声明 |
| 零值 |
undefined(未赋值变量) |
每种类型有明确零值(如 0、""、false、nil) |
| 类型安全性 | 低(运行时才报错) | 高(编译期拦截大量错误) |