JavaScript中的数据类型

背景介绍

JavaScript有五种基本数据类型:

字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)

引用数据类型:

对象(Object)

基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象。

当我们把变量赋值给一个变量时,解析器首先要确认的就是这个值是基本类型值还是引用类型值。

1.Number、String 、Boolean、Null和Undefined。基本数据类型是按值访问的,因为可以直接操作保存在变量中的实际值。

举个例子

var a = 10;

var b = a;

b = 20;

console.log(a); // 10值

上面,b获取的是a值得一份拷贝,虽然,两个变量的值相等,但是两个变量保存了两个不同的基本数据类型值。

b只是保存了a复制的一个副本。所以,b的改变,对a没有影响。

下图演示了这种基本数据类型赋值的过程:

 2.引用类型数据:

也就是对象类型Object type,比如:Object Array Function Data等。

javascript的引用数据类型是保存在堆内存中的对象。

与其他语言的不同是,你不可以直接访问堆内存空间中的位置和操作堆内存空间。只能操作对象在栈内存中的引用地址。

所以,引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象。

var obj1 = new Object();

var obj2 = obj1;

obj2.name = "我有名字了";

console.log(obj1.name); // 我有名字了

说明这两个引用数据类型指向了同一个堆内存对象。obj1赋值给onj2,实际上这个堆内存对象在栈内存的引用地址复制了一份给了obj2,

但是实际上他们共同指向了同一个堆内存对象。实际上改变的是堆内存对象。

下面我们来演示这个引用数据类型赋值过程:

具体讲述下五种基本类型和object

TYPEOF操作符

typeof操作符:用于检测给定变量的数据类型,对一个值试用typeof操作符可能返回下列某个字符串: “undefined”——表示值未定义; “boolean”——表示值是布尔值 ; “string”——表示值是字符; “number”——表示值是数值; “object”——表示值是对象或null;“function”——表示值是函数;

STRING类型

String类型:数值、布尔值、对象、字符串值都有toString()方法,但null和undefined值没有。在不知道要转换的值是不是null或undefined的情况下,可以使用转型函数String(),这个函数能将任何类型的值转换为字符串,String()函数遵循下列转换规则:

NUMBER类型

1.浮点数值:由于保存浮点数值需要的空间是保存整数值的2倍因此javascript会不失时机 的将浮点数值转换为整数数值。对于极大或极小的数值可以用e表示法,e表示法表示的数值等于e前面的数值乘以10的指数次幂,大小写e均可。

2.数值范围:javascript能够表示的最小数值保存在Number.MIN_VALUE中,最大值保存在Number.MAX_VALUE中。如果某次计算的结果超出了javascript的数值范围则这个数值将被自动转换成特殊的Infinity值(负数则转换为-Infinity(负无穷),整数则转换为Infinity(正无穷))。正或负的Infinity值无法参与下一次的计算。使用isFinite()函数可以判断数值是否在最小值与最大值之间。

3.NaN:即非数值(Not a Number)。任何涉及NaN的操作都会返回NaN,NaN与任何值都不相等。javascript定义了isNaN(),该函数接受一个参数,该参数可以是任何类型,函数在接收到一个参数后会尝试将这个参数转换为数值然后再判断是否不是数值,注意判断结果,不是数值返回true,是数值返回false。

BOOLEAN类型

Boolean类型:Boolean类型有两个字面值:true和false。true不一定等于1,false不一定等于0。需要注意的是true和false是区分大小写的,也就是说True和False(以及其他的混合大小写形式)都不是Boolean值,只是标识符。在javascript中所有类型的值都有与这两个Boolean值等价的值,要讲一个值转换为布尔值可以调用转型函数Boolean()。

 

NULL类型

Null类型:Null类型只有一个值的数据类型即null。null值表示一个空指针对象,因此typeof操作符检测null值时返回“object”。如果定义的变量将来用于保存对象那么最好将该变量初始化为null而非其他值,这样只要检查null值就可以知道相应的变量是否已经保存了一个对象的引用。

 

UNDEFINED类型

Undefined类型:Undefined类型只有一个值即undefined。对未初始化和未声明的变量执行typeof操作符都会返回undefined,这就说明当我们对一个变量执行typeof操作符时我们不能立即确定这个变量是未初始化还是未声明。

 

OBJECT类型

对象就是一组数组和功能的集合,可以通过执行new操作符后跟要创建的对象类型的名称来创建。 对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔

问题讨论

1、数组属于那种数据类型?

var a=[]; alert(typeof a)

//Object

2、值传递是什么?

当我们使用=将这些变量赋值到另外的变量,实际上是将对应的值拷贝了一份,然后赋值给新的变量。我们把它称作值传递

3、对象是通过什么传递的?

对象是通过引用传递,而不是值传递。也就是说,变量赋值只会将地址传递过去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值