
JavaScript高级程序设计第版学习笔记——简单数据类型.doc
9页数据类型是编程语言的砖瓦,是所有你能想象到的复杂抽象的基础,在现代编程语言中,除了语言本身内置的一些简单数据类型外,基本上都提供了用于自定义数据类型的语言机制(在 C 中也可以利用结构体来实现),这些机制在一定程度上也决定了该语言的流行度和生命力ECMAScript 是一种动态类型的语言,构建于 5 种简单数据类型(Undefined、Null、Boolean、Number 、String)和一种复杂数据类型(Object)的基础之上这篇文章就来复习一下简单数据类型,我会尽量从编程实践的角度来描述,下面代码运行环境为 FireFox 14.0.1简单数据类型简单数据类型 取值Undefined undefined(只有一个值)Null null(只有一个值)Boolean true|false(只有两个值)Number 数值String 字符串首先需要说明的是,在 ECMAScript 中,上述 5 种简单数据类型,其中Boolean、Number、String 都有同名的内置包装对象,而简单数据类型的字面值(变量)会根据情况自动包箱,从而可以直接调用方法,至于具体可以调用哪些方法,在讨论内置对象时再详细说明:console.info(true.toString());//true,相当于使用 Boolean()包装之后再调用console.info(Boolean(false).toString());//false,将 false 转换为 Boolean 类型值console.info(new Boolean(false).toString());//false,将 false 使用 Boolean()包装console.info(false.toString());//false,相当于使用 Boolean()包装之后再调用console.info('test'.toString());//test,相当于使用 String()包装之后再调用 try{console.info(undefined.toString());//没有相应包装类型,抛出异常}catch(e){console.info(e);//TypeError}try{console.info(null.toString());//没有相应包装类型,抛出异常}catch(e){console.info(e);//TypeError}var num = 4;console.info(num.toString());//4,可以直接在简单数值变量上调用方法,相当于使用Number()包装之后再调用//console.info(3.toString());//SyntaxError,语法错误不能使用 try 捕获,说明不能直接在数值字面量上调用其次说一下实际用的最多的数据转换:(1)转换为 Boolean:!!value(2)转换为 Number:+value(3)转换为 String:''+value下面再具体说明 5 种简单数据类型:1、Undefined 类型Undefined 数据类型只有一个取值:undefined。
1)所有未初始化的值都默认为 undefined(也就没有必要把一个变量显示初始化为undefined 了)2)在函数作用域中,没有传入实际参数的函数形参为 undefined3)函数没有明确返回或者 return;的时候,返回值为 undefined4)在 ECMAScript 中,规定 null==undefined 返回 true,而 null===undefined 返回false5)undefined 相应的 Boolean 值为 false6)使用 typeof 作用于 undefiend 时,返回字符串'undefined',作用于一个从未声明的“变量”时, 也会返回'undefined'7)undefined 转换数值为 NaN,转换字符串为'undefined' console.info(undefined===undefined);//trueconsole.info(typeof undefined);//undefinedconsole.info(typeof noDefined);//undefined,未定义的标识符,使用 typeof 也返回undefined,这也是未定义的标识符唯一可用的的操作符console.info(!undefined);//true,这里返回 true,正是很多条件语句中判断变量是否初始化的基础console.info(!!undefined);//任何一个值,使用双重否定!!都会将其转换为相应的 Boolean 值,这里说明 undefiend 相应的 Boolean 值为 falseconsole.info(undefined==null);//ES 中规定,null 与 undefined 相等性测试返回 trueconsole.info(undefined===null);//但 undefined 与 null 毕竟是两个数据类型,使用全等比较时,返回 falseconsole.info(typeof undefined==undefined);//false,typeof undefined 返回的是一个字符串'undefined',所以这里输出 falseconsole.info(+undefined);//NaN,转换数值时为 NaNconsole.info(''+undefined);//undefined,转换为字符串'undefined'2、Null 类型Null 类型也只有一个值:null。
1)对 null 值使用 typeof 时,返回字符串'object'2)null 相应的 Boolean 值为 false3)如果一个变量用于保存一个对象,建议初始化为 null4)null 转换数值为 0,转换字符串为 'null'console.info(null===null);//trueconsole.info(typeof null);//objectconsole.info(!null);//trueconsole.info(!!null);//false,说明 null 相应的 Boolean 值为 falseconsole.info(undefined==null);//trueconsole.info(undefined===null);//falseconsole.info(+null);//0,转换为数值 0console.info(''+null);//null,转换为字符串'null'3、Boolean 类型Boolean 类型只有两个值: true 和 false1)虽然只有两个值,但是任何一种数据类型的值都能转换为与其相对应的 Boolean 值,转换方式主要有三种:A、通过转型函数 Boolean()转换需要注意的是,当 Boolean()作为转换函数时,会转换为一个与其相应的 Boolean值,当作为构造函数时,会创建一个对象,而任意非空对象的 Boolean 值都是 true,有时候这会造成误解,建议就是不使用 Boolean()。
对于 String()、Number()也有类似情况 B、通过双重否定 !!操作符转换C、通过隐式转换,比如一些条件语句中(2)Boolean 类型的 true 和 false,使用 typeof 时,均返回字符串'boolean'3)在转换为数值时,true 和 false 分别转换为 1 和 0,转换为字符串时,分别为'true' 和'false'var value = 'test';var empty = '';console.info(!!value);//trueconsole.info(!!empty);//falseconsole.info(Boolean(value));//trueconsole.info(Boolean(empty));//falseconsole.info(!!value === Boolean(value));//true,说明两种转换方式等价console.info(!!empty === Boolean(empty));//trueconsole.info(new Boolean(value));//Boolean 对象,注意这里使用了 new,会创建一个对象console.info(new Boolean(empty));//Boolean 对象if(value){//隐式转换为 trueconsole.info(value);//test}if(empty){//隐式转换为 false,不执行括号内部语句console.info('empty');}if(new Boolean(empty)){//先创建对象,再隐式转换为 true,会执行括号内部的语句console.info('empty');//empty}console.info(typeof true == 'boolean');//trueconsole.info(+true);//1,一元操作符,转换为数值 1console.info(+false);//0console.info(''+true);//true,重载后的+操作符,转换为字符串'true'console.info(''+false);//false具体的转换规则如下:数据类型 转换为 true 的值 转换为 false 的值Undefined - undefinedNull - nullBoolean true falseNumber 任意非 0 数值(包括无穷大) 0 和 NaNString 任意非空字符串 空字符串Object 任意对象 -4、 Number 类型在 ECMAScript 中,没有单独的整型、浮点型,只有一个 Number 类型,使用 IEEE754格式来表示(这种表示法在计算时会有舍入误差),在这里不去细究底层实现,这些东西在学校学 C 语言的时候已经很头痛了,不想再头痛一次。
下面我把实际编程中用的最多的放到最前面来讲,这一般来说已经足够,对于不想被太边缘的细节所困扰的朋友,随时可以跳过后面关于 Number 的论述1)数值转换:主要是下面的三个转换函数 Number()函数:和 Boolean()类似,将数据转换成 Number 类型,和使用一元加操作符(+)作用相同,建议使用 + 操作符,比较简单 parseInt()函数:解析整数,可以传入数据和进制,如 parseInt('070',8)输出 10 进制的56 parseFloat()函数:解析浮点数,只能接受一个参数,需要注意的是,如果被解析的数据结果是整数,会直接返回整数 注:使用 Number()和+转换时,true—>1,false —>0,undefined—>NaN,null —>0,空字符串—>0,非空字符串—>按数值解析var trueVal = true;var falseVal = false;var undef = undefined;var nullVal = null;var intVal = '1';var floatVal = '1.0';var strVal = 'test';var empty = '';console.info(Number(trueVal));//1console.info(Number(falseVal));//0console.info(Number(undef));//NaNconsole.info(Number(nullVal));//0co。
