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]
那这个对象里的[[]](双方括号)属性命名是有什么意义?
双方括号代表这是JavaScript引擎内部使用的属性/方法,可以帮助debug(点一下
[[FunctionLocation]]
就能跳到定义,点一下[[Scopes]]
就能查看闭包),但是正常JavaScript代码是取不到这些属性的。引擎看心情决定要显示哪些内部属性,显示的格式也没有规定,但在控制台里大家一般都约定俗成用双方括号,保持和规范的格式一致。
ECMA 标准: Object Internal Methods and Internal Slots