一切皆对象
其实,我们已经了解到了,JavaScript中,所有的东西都是对象,也就是所谓的“Object”
类型,但是,在JavaScript中,并没有真正的类的概念,所以,此处的对象并不像是Java或者Python中的那样,是由类实例化而来的,而是由键和值来组成的,对象其实就是以键命名的值的容器。
比如,我们使用typeof
来检查一个数组的类型,会发现,其实数组也是一个Object
1 | let a = [] |
其实,我们已经了解到了,JavaScript中,所有的东西都是对象,也就是所谓的“Object”
类型,但是,在JavaScript中,并没有真正的类的概念,所以,此处的对象并不像是Java或者Python中的那样,是由类实例化而来的,而是由键和值来组成的,对象其实就是以键命名的值的容器。
比如,我们使用typeof
来检查一个数组的类型,会发现,其实数组也是一个Object
1 | let a = [] |
目前主流的JavaScript引擎有以下几种。
引擎名称 | 应用平台 |
---|---|
V8 | Chrome & NodeJS |
SpiderMonkey | Firefox |
Chakra | IE & Edge |
JavascriptCore | Safari & React Native |
JavaScript 目前有 7 种基本类型,如下:
String
Number
Boolean
Null
Undefined
Object
Symbol
(ES6新增)调用栈,具有LIFO
(Last in, First out 后进先出)结构,用于存储在代码执行期间创建的所有执行上下文。
当JavaScript引擎首次读取脚本时,会创建一个全局执行上下文并将其push
到当前执行栈中。每当发生函数调用时,引擎都会为该函数创建一个新的执行上下文并push
到当前执行栈的栈顶。
引擎会运行执行上下文在执行栈栈顶的函数,根据LIFO
规则,当此函数运行完成后,其对应的执行上下文将会从执行栈中pop
出,上下文控制权将转到当前执行栈的下一个执行上下文。