js基本有5种简单数据类型:Number,Boolean,Null,undifined,String。一种复杂数据类型Object。 typeof方式可以检测数据类型,检测出来的数据类型分别为number,boolean,object,undifined,string,object(object,function,array)

1、Number类型 Number包括整数和浮点数,方法parseInt和parseFloat。 NAN:非数字类型。NAN不等于自身 isNAN()用于检测是否是非数字,返回boolean
2、Boolean 类型true/false 常用于其他类型数据对比或者类型对比
3、Null类型 null类型被看做空对象指针,也被当做一个空对象引用
4、Undefined类型 Undifined类型,就是声明了变量但是未初始化,这个变量的值就是Undifined
By the way
Undifined是访问一个未初始化的变量时所返回的值,而Null是访问一个未存在的对象时所返回的值,可以把undefined看成是空的变量,而null看做是空的对象,虽然都是空,但是数据类型不一样。也就是:
console.log(null == undefined) // true
console.log(null === undefined) // false
5、String类型 将其它类型转化为字符串,可以使用String()和toString()两种方式。它们区别在于String()可以转化任何类型,而toString()不能转化Null和Undefined两种类型。
三大引用类型
1、Object类型 大多数类型值都是object类型的实例,创建Object类型的方式有两种 第一种是使用new操作符后面跟Object构造函数
var student = new Object();
student.age = 24
第二种方式是使用对象字面量表示法
var student = {
age: 24
}
2、Array类型 第一种是Array构造函数
var student = new Array('Jackson','Arya','Anna');
第二种方式是使用数组字面量表示法
var student = ['Jackson','Arya','Anna']
3、Function类型 第一种是函数声明
function func(a,b){
return a+b
}
第二种方式是使用函数表达式
var func = function(a,b){
return a+b
}
js按照存储方式分为值类型和引用类型。 他们的区别如下: 题目一:
var a = 1;
var b = a
a = 2
console.log(b) // 1
题目二:
var a = {age: 20}
var b = student1
a.age = 22
console.log(b) // {age:22}
得到不一样的结果,题目二的值被改变了,原因是: 题目一是简单的值类型,在从一个变量向另一个变量赋值基本类型时,会在另一个变量上创建一个新值,然后再把该值复制到为新变量分配的位置上。


Let's test it
function Student(){}
var S1 = new Student()
S1.name = 'Arya'
var S2 = S1
S2.name = 'Jack'
console.log(S1.name) // Jack 证明是地址传值
S2 = null
console.log(S1.name) // Jack why?
解释一下
var S1 = new Student();
这个表达式做了什么?
首先 new xxx() 就是在内存中创建了一个 object var S1 = xxx 那个 现在 S1 这个变量保存了
这个object的地址
到这里开始 访问 S1 就是访问这个object
S1.name = 'Arya'; 这个 就是 object.name = 'Arya'
var S2 = S1; //这个吧S1 的值 赋予 S2 (因为S1 是指向一个对象的变量 所以 S2 现在 也指向
这个对象)
S2.name = 'Jack'; 这个就是 object.name = 'Jack'
一直到这里位置 现在内存有一个对象 object(new Student()创建的), 2个变量 S1 S2 都指向 那个 object
S2 = null; 这里 S2 指向了null 但是S1 还是指向那个 object