JavaScript 变量的类型
变量的数据的代言人,变量类型是指所代表数据的类型;
分为值类型和引用类型:typeof可以简单的检测数据类型;
值类型的特点:
- 占用空间固定,保存在栈中;
- 保存与复制都是值本身;
- 使用typeof检测数据的类型;
- 基本数据类型是值类型;
引用类型的特点;
- 占用空间不固定,保存在堆中;
- 保存与复制的是指向对象的一个指针;
- 使用instanceof检测数据的类型;
- 使用new()方法构造出的对象是引用型;
基本数据类型和引用数据类型详解;
ECMAScript规定变量包含两种不同数据类型的值,基本类型值和引用类型值;
在给变量赋值的时候,解析器必须要明确这个值是基本类型还是引用类型值,因为他们的赋值方式是不同的;
string/number/boolean/null/undefined都是基本数据类型;因此可以操作保存在变量中是实际值,此时变量储存的是实际的值;
而引用类型的值是保存在内存中的,此时变量储存的是内存的地址,而不是真实的值;
而我们操作引用类型的变量时,实际操作的是它引用地址对应的对象,而不是直接操作对象的;
基本类型和引用类型的操作原理
var number1= 1,
number2=number1;
number1=2;//改变了number1的值
console.log(number1);//2
console.log(number2);//1
console.log(number1===number2);//false
var obj1={name:"zhu"},
obj2=obj1;
obj1.name="zhuanbang";
console.log(obj1.name,obj2.name);//zhuanbang,zhuanbang
console.log(obj1.name===obj2.name);//true
原理图如上;
基本数据类型,也叫原始数据类型,不可能数据类型;引用数据类型,也叫对象类型和可变类型;
不可变的意思是,这个值是不可以改变的,如果变量修改了字符串,以前的字符串会销毁,然后再次赋值;
而可变的意思是可以改变对象的属性值;这只是对数据来说的,javascript本身是可以自由进行数据类型转换的,javascript的变量是无任何类型的,只是一个标识符,变量可以赋值任何类型的值;
string的所有方法,都是不会改变原有字符串的,比如toUpperCase返回的值,其实是一个新字符串,原有字符串不变,这就是string方法的原理;