js的六大数据类型

519 阅读3分钟

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

本图链接:blog.csdn.net/RUCwang/art…

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