javascript私有字段#是语法级特性,必须为合法标识符、在类体顶层声明、不可动态生成或与同名getter/setter共存,#为必需前缀而非命名风格。

JavaScript 中私有字段(# 开头)不是命名约定,而是语法级特性,它的“命名”本质是标识符声明,而非字符串拼接或动态生成。因此,所谓“命名规范”实际是语法硬性要求,不是风格建议。
必须是合法的标识符,不能是字符串或计算值
私有字段名必须符合 JavaScript 标识符规则:以字母、下划线 _ 或美元符号 $ 开头,后续可跟字母、数字、_ 或 $。它不能是字符串字面量,也不能通过表达式构造:
- ✅ 正确:
#id、#_cache、#$value - ❌ 错误:
{"#id": 1}(对象字面量中无效)、this["#" + "id"](动态访问不触发私有机制)、#[key](语法错误) - ❌ 错误:
#123name(以数字开头非法)、#my-name(连字符不是合法标识符字符)
必须在类体顶层显式声明,不可动态添加
私有字段只能出现在 class 的大括号内部、方法之外的位置,且必须写明完整名称。它不能在 constructor 或普通方法里“创建”,也不能延迟声明:
- ✅ 正确:
class A { #count = 0; #name = "test"; } - ❌ 错误:
class A { constructor() { this.#flag = true; } }(未在类体声明,运行时报错) - ❌ 错误:
class A { method() { this.#temp = 1; } }(方法内赋值但未提前声明,SyntaxError)
不能与公有成员同名冲突,但可与私有方法同名
同一个名字既可用作私有字段,也可用作私有方法,但不能同时作为字段和 getter/setter:
- ✅ 允许:
#data; #data() {}(字段 + 私有方法) - ❌ 禁止:
#id; get #id() {}(字段与私有 getter 同名,语法错误) - ⚠️ 注意:
this.id和this.#id可共存,互不影响,属于完全不同的属性空间
不支持下划线前缀等“伪私有”混合写法
私有字段的 # 是语法必需前缀,不是风格修饰。加下划线没有额外意义,反而可能误导:
- ✅ 清晰明确:
#token、#retryCount - ❌ 不必要且易混淆:
#__secret、#_internal(_ 不增强私有性,纯属冗余) - ? 提示:命名应体现用途,如
#cache、#isInitialized、#apiTimeout,保持语义清晰即可
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











