基础类型:Undefined、Null、Boolean、Number和String。这些类型在内存中分别占用固定大小的空间,他们的值保存在栈空间,我们通过按值来访问的。
引用类型值:Object
如果赋值的是引用类型的值,则必须在堆内存中为这个值分配空间。由于值大小不固定,因此不能把它们保存到栈内存中。但内存地址大小是固定的,因此可以将内存地址保存在栈内存中。当查询引用类型的变量,先从栈中读取内存地址,然后通过地址找到堆中的值,叫做按引用访问。
检测基本类型,通常,我们并不像知道它是不是对象,而是想知道它到底是什么类型的对象,因为数组也是object,null也是object,这时我们应该采用instanceof运算符来查看。
扩展:通常js检测一个变量类型,通过typeof来检测,只能输出具体的数据类型。
<script type="text/javascript"> var box = [1,2,3]; alert(box instanceof Array); var box2 = {}; alert(box2 instanceof Object); var box3 = /g/; alert(box3 instanceof RegExp); var box4 = new String('cai') alert(box4 instanceof String); </script>
作用域
每个函数被调用时都会创建自己的执行环境,当执行到这个函数时,函数的环境就会推到环境栈中去执行,而执行后又在环境中退出,把控制权交给上一级的执行环境
当代码在上一个环境中执行时,就会形成一种叫做作域链的东西。它的用途是保证对执行环境中有访问权限的变量和函数进行有序访问。