深入ECMAScript(数据类型)

来源:互联网 发布:言论自由的界限 知乎 编辑:程序博客网 时间:2024/06/05 00:53

ECMAScript中一共有5种简单数据类型(基本数据类型):Undefined,Null,Boolean,Number,String.
和1中复杂数据类型:Object.

typeof操作符

因为ECMAScript是弱语言(松散型)语言,所以需要一种方式来检测数据的类型。
typeof的返回值:
1.”undefined”-如果该值未定义
2.”boolean”-如果该值是布尔值
3.”string”-如果该值是字符串
4.”number”-如果该值是数值
5.”object”-如果该值是对象或者null
6.”function”-如果该值是函数

Undefined

Undefined类型的值只有一个,就是特殊的undefined.
如:

var info;alert(info==undefined);//true//同上var info=undefined;alert(info==undefined);//true

这里有一点比较特殊
即对变量使用typeof函数时出现的情况:

var info;//变量声明后默认取得值undefined//下方值没有声明//var info2;alert(typeof info);//"undefined"alert(typeof info2);//"undefined"//如果直接输出变量alert(info);//"undefined"alert(info2);;//产生错误

这里在看上面部分时,可以理解为info,info2虽然在技术角度上看是由区别的,但是在实际使用时,无论对哪一个变量,都无法执行任何真正的操作。

Null

Null类型的值只有一个,就是特殊的null.
逻辑角度看:null值表示一个空对象指针。所以使用typeof时将会返回”object”.

var info=null;alert(typeof info);//"object"

实际上,undefined值是派生自null值的,所以在用以下代码时,将会返回true.

alert(null==undefined);//true

当然,这里的(==)操作符出于比较的原因将会对其操作数进行转换。

Boolean

Boolean类型的值只有2个,即:true和false.
但是这里的true和false与数字值不一样,因此true不一定等于1,false不一定等于0.
Boolean类型的值是区分大小写的,所以True,False与true,false是不一样的.
虽然Boolean类型的字面值只有2个,但是所有其他类型都有其对应的boolean值,即所有类型都可以使用Boolean()函数来转化为对应的boolean值。如:

var info="hello world";var infoBoolean=Boolean(info);

对应的返回值如下表所示:

类型         转换为true                转换为falseBoolean      true                    falseString       任何非空字符串             ""(空字符串)Number       任何非零数字值(包括无穷大) 0NaNObject       任何对象                  nullUndefined    n/a(或N/A,不适用)        undefined     

Number

1.整数值:

var info=10;//十进制整数var info=070;//八进制56 ;八进制的第一位必须为0,之后每一位都为(0-7),如果有一位超出范围,则忽略前导零var info=08;//解析为8同理,十六位进制的前导为0x,之后每一位为(0-9)(A-F),(A-F)页可以是(a-f.var info=0xA;//十六进制10算数计算时,八进制和十六进制的数将会转化成十进制数

2.浮点值

在保存浮点值时,所需的保存空间是整数值的两倍,因此,ECMAScript将会不失时机的将浮点值转化为整数值

var info=1.//解析为1var info=1.0//解析为1

对于极大极小值(可以使用e表示法,即科学计数法):

var info=3.125e7//等于31250000

浮点数的最高精度是17位小数,但是在进行算数计算时,精度会下降,比如:

//0.1加0.2的值不等于0.3,而是0.30000000000000004if(a+b==0.3){alert("hello");//无法实现}

3.数值范围

ECMAScript所能保存的最小值保存在Number.MIN_VALUE中,大多数浏览器中,该值为5e-324;所能保存的最大值保存在Number.MAX_VALUE,大多数浏览器中,该值为1.7976931348623157e+309
如果在某次计算中得出了超过范围的数值,则该数值将会自动转换为Infinity值或者-Infinity。如果某个值为Infinity或者-Infinity,则该值将不能进行之后的运算。

//可以使用 isFinite()函数检查一个值是否有穷var info=Number.MIN_VALUE+Number.MAX_VALUE;alert(isFinite(info));//false

4.NaN

NaN(非数值),该值用来表示本来要返回数值的操作数未返回数值的情况(即不会抛出错误)。比如数值除以非数值,将会返回NaN。
任何涉及NaN的操作都会返回NaN(如NaN/10)。
NaN与任何值都不相等,包括自身。

//可以通过isNaN()函数检测一个值是否为数值,不能转换为数值的都会返回truealert(isNaN(NaN));//truealert(isNaN(10));//falsealert(isNaN("10"));//falsealert(isNaN("blue"));//truealert(isNaN(true));//false对象也可以被isNaN()函数调用,当被调用时,将会先调用对象的valueof()方法,然后确定该方法的返回值是否可以转换为数值,如果不不能,则基于该返回值再调用toString()方法,再测试返回值。(这也是ECMA中内置函数和操作符的一般执行流程)

5.数值转换

共有3个数值转换函数:
1.Number()
2.parseInt()
3.paresFloat()
1可用于任何数值类型,2和3则转么用于将字符串转化为数值。

Number()转化规则:1.Boolean. true->0;false->02.数字值. 即等于传入和返回3.null. 04.undefined. NaN5.字符串:    只包含数字. 转化为十进制数值.    只包含浮点格式. 转化为对应的浮点值    只包含十六进制. 转化为对应的十进制数值    空的. 转化为0    其余的. NaN6.对象. 先调用对象的valueof方法,按照上面的规则转换,如果结果为NaN;则调用toString()方法,再按照上面的方法检测返回值.

Number()在转换字符串数值时会显得比较繁琐,因此可以使用parseInt()和parseFloat()方法转换字符串数值。
parseInt()在转换字符串时,将会忽略前面的空格,直到找到第一个非空字符,如果第一个字符不为数字或者负号,则返回NaN;如果第一个是数字或者负号,则继续解析,直到不是数字为止,所以”1234hello”将会被解析为 1234 ;”22.1”将会被解析为 22 .
parseFloat()同理,只不过其只会接受一个小数点,如”12.34.5”将会被解析为 12.34 .

String

String类型用于表示由零或者多个由16位Unicode字符组成的字符序列,即字符串。
一些转义字符:

\n   换行\t   制表\b   退格\r   回车\f   换页符\\   斜杠\'   单引号\"   双引号\xnn 十六进制,n为(0-F)\unnn 十六进制表示的Unicode字符

1.字符串特点:

当字符串创建时,其值就不能不能被改变了,要改变某个变量所保存的字符串,首先需要销毁原来的字符串,然后将新字符串填充该变量。

2.转换为字符串

把一个值转换为字符串有2种方法:
1.几乎每个值都有的toSting()方法。(null和undefined值没有该方法;数值,布尔值,对象和字符串值都有该方法)
在使用toString()函数时,可以通过传递参数来控制返回值的进制,如:

var info=10;info.toString();//10info.toString(2);//1010...

之前也提到过Null和Undefined值是没有toSting()函数的,那么如果不知道一个值是否为null或者undefined的时候,可以使用Sting()函数,该函数能将任何类型的值转换为字符串。其遵守规则如下:
1.如果值有toSting()函数,则调用toString()函数。
2.如果值是Null,则返回”null”。
3.如果值是undefined,则返回”undefined”。

Object

Object类型其实就是一组数据和功能的集合,通过使用关键词new加上想要创建的类型的名字来创建。
如果创建Object类型的实例并且给其添加属性方法,就可以创建自定义对象:

var info=new Object();

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

constructor //保存着用以创建当前对象的函数,上面例子中就是Object()hasOwnProperty()  //用以检查给定的属性在实例中是否存在,但不包括实例的原型属性isPrototypeOf(Object)  //检查传入的对象是否为当前对象的原型propertyIsEnumerable()  //检查给定的属性是否能够通过for-in语句来枚举toLocaleString()  //返回对象的字符串表示,该字符串和执行环境对应toString()  //返回对象的字符串表示valueOf()  //返回对象的字符串,数值,布尔值表示
0 0
原创粉丝点击