前端开发必须掌握的知识(JS篇 一)
JS基础是前端开发吃饭的家伙,必须掌握!
变量和类型
1.javascript规定了几种语言类型?
基本类型和引用类型
基本类型:String、Number、Boolean、Null、Undefined、Symbol
引用类型:Object类型(细分的话又分为Object 类型、Array 类型、Date 类型、Function 类型、RegExp 类型)
基本类型的变量存放于栈中(Stack),是按值访问的。
引用类型一般是一个保存在堆内存(Heap)中的对象,因此我们在操作对象时实际是在操作对象的引用,而不是实际对象(引用类型的值是按引用来访问的。)
注:JavaScript 不能直接操作对象的内存空间(堆内存)。
2.JavaScript中的变量在内存中的具体存储形式
- JS中的变量分为基本数据类型和引用类型,结合代码和图理解如下:
//基本数据类型 (存放于栈中)
let a = 1;
let b = '字符串';
let c = null;
//引用类型
let obj = {a: 1};
let arr = [1,2,3];
如图,基本类型是保存在栈内存中的简单数据段,值大小都是固定的,在拷贝时,系统会给变量分配一个新值,变量之间相互独立,互不影响。
引用类型保存在堆内存中的对象里,栈内存中存放该对象的访问地址,该地址指向堆内存中的对象,JavaScript不允许直接访问堆内存中的位置,因此操作对象时,实际操作的是对象的访问地址(如引用类型拷贝时,同样是给新的变量obj2分配一个新的值,保存在栈内存中,不同的是,这个值仅仅是引用类型的一个地址指针。obj和obj2指向同一个值,也就是地址指针相同,在堆内存中访问到的具体对象实际上是同一个,所以obj2.a变化时,obj.a也会变化。)
3.null和 undefined的区别
在js中,null和undefined都表示一个无效的值,几乎没区别,甚至在if语句中,都会被自动转为false,相等运算符直接报告两者相等
if (!undefined) { console.log('11'); } //11
if (!null) { console.log(22) } //22
undefined == null //true
但是undefined === null 结果会报false,因为全等操作在比较相等性的时候,不会主动转换分项的数据类型,而两者又不属于同一种类型。
null和undefined在js语义里是明确区分的:
null表示一个值被定义了,定义为空值,undefined表示根本不存在定义
所以设置一个值为 null 是合理的,如 a.num= null;但设置一个值为 undefined 是不合理的,如a.name=undefined;(判断一个值是否存在,就可以用undefined , 不能使用 null ,因为 undefined == null,而 null 表示该值定义为空值。)
4.JavaScript对象的底层数据结构是什么