You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript/JavaScript中变量、类属性前缀#(哈希符号)的含义?

TypeScript与JavaScript中#前缀的含义

1. 核心定义:语言级私有字段

在ES2022(ES12)及后续的JavaScript标准,以及支持该特性的TypeScript版本中,前缀#用于声明真正的类私有字段/方法——这是语言层面强制执行的私有性,而非开发者之间的命名约定:

  • 带#的字段仅能在类的内部访问,类外部(包括子类)完全无法直接读取或修改,甚至无法通过obj['#field']这类方式绕过限制
  • 这类私有字段不会被实例对象暴露,也不会被Object.keys()、for...in等枚举方法遍历到

2. 示例代码解析

你给出的TypeScript代码里,#state和#store都是类的私有字段:

export class MyFacade {
  #state: MyState = {
    isLoading: true
  };

  readonly #store = new BehaviorSubject<MyState>(this.#state);
}
  • #state是MyFacade类的私有状态字段,仅能在类内部的方法中读写,外部代码执行myFacadeInstance.#state会直接报错
  • readonly #store是只读私有字段,初始化后无法被重新赋值,同样只能在类内部访问和调用其方法

3. 和下划线命名的区别

  • 下划线_只是开发者的约定俗成,语言不限制外部访问,比如obj._privateField依然可以被外部读取或修改
  • #是语法层面的强制私有,从根本上杜绝了外部访问的可能,是真正意义上的私有成员

内容的提问来源于stack exchange,提问作者ymoreau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 00:25:55