JavaScript进阶:深入理解数据类型

来源:互联网 发布:java面向对象视频 编辑:程序博客网 时间:2024/05/16 05:59

JavaScript进阶:深入理解数据类型

基本的数据类型

ECMAScript5中有5种基本数据类型:UndefinedNullNumberStringBooleanECMAScript6中新增了symbol。另外还有一种复杂数据类型——Object,它的本质是由一组无序的名值对组成的。

 

typeof操作符

鉴于ES是弱类型,或者说是松散类型的,因此需要一种手段检测给定变量的类型。typeof因此而生。

语法:typeof 【变量】。这里要注意的是typeof是一个操作符而非函数

其返回值可为:

1undefined——这个值为undefined本身或者未定义。如typeof undefined或者如代码:

var a//a未赋值

typeof a;

(2)number——这个值为数字。

(3)string——这个值为字符串。

(4)boolean——这个值为布尔值。

(5)object——这个值为对象或null

(6)function——这个值为函数,事实上函数也是对象的一种,不过typeoffunction“区别对待”。

 

理解undefined类型

undefined类型只有undefined这一特殊值。在使用var声明后的变量,在未赋值之前都默认为undefined。例如:

var apple;console.log(typeof apple);//undefined


需要注意的是,已经定义且值为undefined的变量,和尚未定义的变量是不一样的。

var apple;console.log(apple);//appleconsole.log(orange);//报错


但是,未定义的变量使用typeofdelete是不会报错的,例如:

console.log(orange)//undefined

这里有个小技巧,即使未初始化的变量自动赋值undefined,但显式地初始化变量是更明智的选择。如果能这样做,那么当typeof操作符返回undefined时,这个变量肯定未声明,而不是未初始化。

 

理解Null类型

Null类只有null一个特殊值。它使用typeof操作符时,返回的是”object”,原因是null表示的是一个空指针(和C语言一样)。例如:

var apple = null;console.log(typeof null);//object


因为undefinednull派生出来的,所以两者宽松相等。(事实上,null是位于原型链的顶端)。所以有undefined == null

null还有管理内存的作用:需要知道一个事实,计算机系统分配给web浏览器的可用内存数量比桌面应用程序少,这样做是防止运行JavaScript的网页耗尽全部系统资源。

因此,我们需要优化内存,提高性能,而优化内存的最佳方式就是:执行中的代码只保存必要数据。一旦数据不再用可以将其设置为null来解除其引用。这一做法叫做“解除引用”。例如:

var fruit = new Object;//使用完该对象后,并确定不再需要使用。var fruit = null;


理解Number类型

Number类型的值为数字值。基本的数值字面量是十进制,当然还有二进制,八进制,十六进制等。

(1)十进制:var num = 1;

(2)八进制:var num = 070; //56

(3)十六进制:var num = 0xf; //15

1、浮点数值

浮点数值可有两种表示:0.1或者.1

对于极大或者极小的值可以用e表示法(科学表示法)表示浮点数。

var num = 0.2e5表示0.2*10^5

ESMAScript会将小数点后面有60以上的浮点数,自动用e表示法表示。

2、数值范围

最小值Number.MIN_VALUE5e-324,最大值Number.MAX_VALUE1.7976931348623157e+308

如果某次计算得到得结果超过JS数值的范围,那么它将被转换为Infinity,如果是负值则为-Infinity。想要确定一个数是否有穷,可以用isFinity()函数。

3、NaN

NaN,即非数值。表示一个本来要返回数值的变量未返回的情况(这样就不会报错了)。

它有两个非同寻常的特点:第一,所有涉及NaN的计算或者操作,都返回NaN;第二,NaN与任何值都不相等,包括其本身。即:NaN == NaN为错,NaN != NaN为对。

要确定一个变量是否为NaN,可以使用isNaN()函数检测。例如

isNaN(NaN);//trueisNaN(1);//falseisNaN(‘10’)//false, 数字字符串会转化为数字isNaN(true)//false,布尔值会转化为数字

对于例子中转化的问题,再这里说一下。尽管不可思议,但isNaN()确实适用于对象,基于对象调用isNaN()时,首先调用对象的valueOf()方法,然后确定该方法返回的值是否能转化为数值。如果不能,再调用toString()方法再一次测试。

 

理解Boolean类型

该类型有两个值:truefalse,大小写敏感。

可以对任何数据类型使用Boolean()函数转化为布尔值。

数据类型

转化为true

转化为false

Boolean

true

f

Number

任何非零数值()包括无穷大

0NaN

String

非空字符串

空字符串

Object

任何对象

null

Undefined

n/a

undefined

 

理解String类型

该类型用于表示零或多个Unicode字符组成的字符序列,即字符串。

1)字符串的特点:

ECMAScript中的字符串是不可变的,字符串一旦创建,它的值就不可改变。如果要改变,那就要把原来的字符串删除,再给变量赋值新的字符串。

例如:

var str = “Java”;var str += “Script”;//JavaScript

在第二行代码,实际操作是:首先,创建一个能容纳10个字符的新字符串,然后在其中填充“Java”和“Script”,再将原来的字符串“Java”和“Script”。

(2)转换为字符串

将值转换为字符串,第一种方法是toString()

数值、布尔值、对象,甚至字符串值本身都有toString()方法,而nullundefined没有该方法。

toString()方法的参数是输出数值的基数。例如

var num = 10;console.log( num.toString(10) );//10(十进制)console.log( num.toString(2) );//1010(二进制)console.log( num.toString(8) );//12(八进制)

在不知到转换的值是不是null或者undefined的情况下,还可以使用String()方法,这个函数能够将任何值转换为字符串,得到得值是“null”和“undefined”。

 

理解Object类型

对象有两种创建方法:第一,var对象 = new Oject();第二,对象字面量表示法:var对象 = {}

Object每个实例都有下面的属性和方法:

constructor:保存着用于创建当前函数的对象。

hasOwnProperty(propertyName):检查该对象实例是否有这个参数(这里为对象的属性),属性名(propertyName),必须是字符串。

isPrototypeOf(object):检查传入的对象是否是当前对象的原型。

propertyIsEnumerable(protertyName):检查属性能否使用for-in语句来枚举。

toLocaleString():返回对象的字符串表示。

toString():返回对象的字符串表示。

valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()返回的值相同。

 

原创粉丝点击