es6中对象属性双方括号是什么意思

es6中对象属性双方括号是什么意思?

在react表单输入输入框的change事件中

handleChange = (e) => {
    console.log(e);
    this.setState({
      value: e.target.value
    });
}

这里的event对象是一个proxy对象,将其打印到控制台输出如下

[[Handler]] : Object
  set : ƒ (target, prop, value)
  __proto__ : Object
[[Target]] : SyntheticEvent
  bubbles : (...)
  cancelable : (...)
  currentTarget : (...)
  defaultPrevented : (...)
  dispatchConfig : null
  eventPhase : (...)
  isDefaultPrevented : null
  isPropagationStopped : null
  isTrusted : (...)
  nativeEvent : (...)
  target : (...)
  timeStamp : (...)
  type : (...)
  _dispatchInstances : null
  _dispatchListeners : null
  _targetInst : null
  preventDefault : (...)
  stopPropagation : (...)
  get bubbles : ƒ ()
  set bubbles : ƒ (val)
  get cancelable : ƒ ()
  set cancelable : ƒ (val)
  get currentTarget : ƒ ()
  set currentTarget : ƒ (val)
  get defaultPrevented : ƒ ()
  set defaultPrevented : ƒ (val)
  get eventPhase : ƒ ()
  set eventPhase : ƒ (val)
  get isTrusted : ƒ ()
  set isTrusted : ƒ (val)
  get nativeEvent : ƒ ()
  set nativeEvent : ƒ (val)
  get target : ƒ ()
  set target : ƒ (val)
  get timeStamp : ƒ ()
  set timeStamp : ƒ (val)
  get type : ƒ ()
  set type : ƒ (val)
  get preventDefault : ƒ ()
  set preventDefault : ƒ (val)
  get stopPropagation : ƒ ()
  set stopPropagation : ƒ (val)
  __proto__ : Object
[[IsRevoked]] : false


如果是函数对象又会有这样的结构

arguments : (...)
caller : (...)
length : 0
name : ""
prototype : {constructor: ƒ}
__proto__ : ƒ ()
[[FunctionLocation]] : emptyFunction.js:13
[[Scopes]] : Scopes[2]

那这个对象里的[[]](双方括号)属性命名是有什么意义?

阅读 11k
1 个回答

双方括号代表这是JavaScript引擎内部使用的属性/方法,可以帮助debug(点一下[[FunctionLocation]]就能跳到定义,点一下[[Scopes]]就能查看闭包),但是正常JavaScript代码是取不到这些属性的。

引擎看心情决定要显示哪些内部属性,显示的格式也没有规定,但在控制台里大家一般都约定俗成用双方括号,保持和规范的格式一致。

ECMA 标准: Object Internal Methods and Internal Slots

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏