JavaScript 数据类型
基本数据类型
字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol、bigint。
引用数据类型
对象(Object)、数组(Array)、函数(Function)。
基本类型也称为简单类型,由于其占据空间固定,是简单的数据段,为了便于提升变量查询速度,将其存储在栈中,即按值访问。
引用类型也称为复杂类型,由于其值的大小会改变,所以不能将其存放在栈中,否则会降低变量查询速度,因此,其值存储在堆(heap)中,而存储在变量处的值,是一个指针,指向存储对象的内存处,即按址访问。引用类型除 Object 外,还包括 Function 、Array、RegExp、Date 等等。
基本数据类型和引用类型的区别
基本类型的变量是存放在栈区的(栈区指内存里的栈内存);
引用类型的值是同时保存在栈内存和堆内存中的对象;
基本类型的比较是值的比较;
引用类型的比较是引用的比较
两种类型在添加属性时候的区别
1、引用类型可以动态的给添加属性,
2、但是基本类型的值是不可变也不可以复制的
两种类型在复制值的什么有什么区别
基本类型复制值的时候,会重新在变量对象上创建一个新值,然后把值赋值到新变量分配的空间上来(理解为栈中的空间);
引用类型复制时,也会在储存在变量对象中的值复制一份放到为新变量分配的空间上来,但是不同的是新复制的值是一个指针,指向原值所在堆内存中的地址;
两种类型在传递值的时候有什么区别
结论 没有差别
JavaScript 拥有动态类型
字符串(String)
console.log('----字符串----');
var a = 'Holle';
console.log(a);
console.log(typeof(a));
数值(Number)
console.log('----数字----');
var a = 1;
console.log(a);
console.log(typeof(a));
布尔(Boolean)
console.log('----布尔----');
var a = true;
console.log(a);
console.log(typeof(a));
空(null)
console.log('----空----');
var a = null;
console.log(a);
console.log(typeof(a));
未定义(undefined)
console.log('----未定义----');
var a;
console.log(a);
console.log(typeof(a));
引用类型按
-
动态属性
var person = new Object();
person.name = “Nicholas”;
console.log(person.name); //“Nicholas”
delete person.name
console.log(person.name);//undefined -
赋值变量
obj1赋值新对象时,只是向obj1中存如指向object的引用地址,向obj2赋值obj1时,仅仅是将obj1中储存的引用地址复制给obj2,所以对象改变时,obj1和obj2会同时响应。
var obj1 = new Object();
var obj2 = obj1;
obj1.name = "Nicholas";
console.log(obj2.name); //"Nicholas"
- 参数传递
参数传递只有值传递,不存在引用传递。也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。基本类型值的传递如同基本类型变量的复制一样,而引用类型值的传递,则如同引用类型变量的复制一样
function fn(obj){
obj.name = 'new'
return obj
}
var obj = new Object();
var newObj = fn(obj)
console.log(obj)//{name:new}
console.log(newObj)//{name:new}