今天讲js数据类型
众所周知js有八大数据类型,分别是字符串(String)、数字(Number)、布尔(Boolean)、数组(Array)、对象(Object)、空(Null)、未定义(Undefined)。
而众所又周知,js八大数据类型分别分为 基本数据类型 和 引用数据类型两大类
基本数据类型:Number 、String、 Boolean 、undefined 、null
引用数据类型:Object Array function
1.基本数据类型存储在“栈”中,是按照值来传递的;
var a=10;
var b=a;
b=20;
console.log(a)
总结:b的改变,并不会影响a的值;
2.引用数据类型是保存在“堆”’中的一个对象,有自己独特的地址,所以我们对这个对象进行操作的时候,只能操作一个对象在栈内存中的引用地址。
第一个案例
var obj1 = new Object();
var obj2 = obj1;
obj2.name = "123";
console.log(obj1.name);
第二个案例
var obj=new Object()
obj.name="132"
obj
{name: '132'}
var obj2=new Object()
obj2.name="132"
obj2
{name: '132'}
obj===obj2
返回一个false
总结:obj2的改变,会影响obj1;也就是说,obj1和obj2都指向了同一个堆里面的对象,obj2=obj1,实际上是把堆内存的地址复制给了obj2
区别举个例子就可以知道:
1可以打个比方把基本数据类型当作游戏里面的本地数据,哪怕你开修改器修改,仍然只会修改本地的数据,修改不了服务器里面的数据
2.那么引用数据类型就是服务器的数据,想要改变他就需要充钱,或者肝,才能改变服务器的数据
四:刚刚讲到堆和栈,我们可以简单的说一下
堆和栈的区别:其实也跟这个例子差不多,
栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;特点:先进后出,好比一根烧烤,我串的时候先串第一个,烤完之后,你想吃最后一个,肯定是先把第一个第二个第三个吃完,才能吃到最后一个
堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
五、6大假值:
false
null
undefined
0
' ' (空字符串)
NaN(算是一种Number类型)
函数返回值:return
由return可以做到很多灵活的操作,比如说惰性函数,回调,递归等等
六、Js的数据还有一个特点就是动态数据
var x;
var x = 5;
var x = "John";
变量x的数据类型可以被改变,而且可以一直被改变,这就是动态数据
Number类型
var a=123;小数bug
在js 的计算中涉及到小数的运算,比如 0.1+0.2 的计算
就会出现错误,我们来试一下
能被计算机读懂的是二进制,而不是十进制,所以我们先把 0.1 和 0.2 转换成二进制看看
0.2.toString(2)
所以以后为了避免这种情况可以先把一个数乘以10的n次方,让其变成一个整数,相加之后再除以10的n次方