第4章 数据类型

java-man

贡献于2013-11-12

字数:0 关键词: JavaScript开发

第4444章数据类型 学 习要 点: 1.typeof 操 作符 2.Undefined 类型 3.Null 类型 4.Boolean 类型 5.Number 类型 6.String 类型 7.Object 类型 主讲教师:李炎恢 合作 网站: http://http://http://http://www.ibeifeng.comwww.ibeifeng.comwww.ibeifeng.comwww.ibeifeng.com 讲师博客: http://hi.baidu.com/http://hi.baidu.com/http://hi.baidu.com/http://hi.baidu.com/李炎恢 ECMAScript 中有5种 简单 数据 类型 : Undefined、Null、Boolean、Number 和String。 还 有一 种复 杂数 据类 型 ——Object。ECMAScript 不 支持 任何 创建 自定 义类 型的 机制 ,所 有 值 都成 为以 上 6中 数据 类型 之一 。 一.typeof typeof typeof typeof 操 作符 typeof 操 作符 是用 来检 测变 量的 数据 类型 。对 于值 或变 量使 用 typeof 操 作符 会返 回如 下 字 符串 。 字 符串 描述 undefined 未 定义 boolean 布 尔值 string 字 符串 number 数值 object 对 象或 null function 函数 var box = '李 炎恢 '; alert(typeof box); alert(typeof '李 炎恢 '); typeof 操 作符 可以 操作 变量 ,也 可以 操作 字面 量。 虽然 也可 以这 样使 用: typeof(box), 但,typeof 是 操作 符而 非内 置函 数 。PS:函 数在 ECMAScript 中 是对 象 ,不 是一 种数 据类 型 。 所 以, 使用 typeof 来 区分 function 和object 是 非常 有必 要的 。 二.Undefined Undefined Undefined Undefined 类型 Undefined 类 型只 有一 个值 ,即 特殊 的 undefined。 在使 用 var 声 明变 量, 但没 有对 其初 始 化时 ,这 个变 量的 值就 是 undefined。 var box; alert(box); PS: 我们 没有 必要 显式 的给 一个 变量 赋值 为 undefined, 因为 没有 赋值 的变 量会 隐式 的 (自 动的 )赋 值为 undefined;而undefined 主 要的 目的 是为 了用 于比 较 ,ECMAScript 第3版之 前 并没 有引 入这 个值 ,引 入之 后为 了正 式区 分空 对象 与未 经初 始化 的变 量。 未 初始 化的 变量 与根 本不 存在 的变 量 (未 声明 的变 量 )也 是不 一样 的。 var box; alert(age);//age is not defined PS: 如果 typeof box,typeof age 都 返回 的 undefined。 从逻 辑上 思考 ,他 们的 值, 一个 是undefined, 一个 报错 ;他 们的 类型 ,却 都是 undefined。 所以 ,我 们在 定义 变量 的时 候, 尽 可能 的不 要只 声明 ,不 赋值 。 三.Null Null Null Null 类型 Null 类 型是 一个 只有 一个 值的 数据 类型 ,即 特殊 的值 null。 它表 示一 个空 对象 引用 (指 针),而typeof 操 作符 检测 null 会 返回 object。 var box = null; alert(typeof box); 如 果定 义的 变量 准备 在将 来用 于保 存对 象, 那么 最好 将该 变量 初始 化为 null。 这样 ,当 检查null 值 就知 道是 否已 经变 量是 否已 经分 配了 对象 引用 了。 var box = null; if (box != null) { alert('box 对 象已 存在 ! '); } 有 个要 说明 的是 : undefined 是 派生 自 null 的 ,因 此 ECMA-262 规 定对 它们 的相 等性 测 试 返回 true。 alert(undefined == null); 由于undefined 和null 两 个值 的比 较是 相等 的 ,所以,未 初始 化的 变量 和赋 值为 null 的 变 量会 相等 。这时,可 以采 用 typeof 变 量的 类型 进行 比较 。但,建 议还 是养 成编 码的 规范 , 不 要忘 记初 始化 变量 。 var box; var car = null; alert(typeof box == typeof car) 四.Boolean Boolean Boolean Boolean 类型 Boolean 类 型有 两个 值 (字 面量 ):true 和false。而true 不 一定 等于 1,false 不 一定 等于 0。 JavaScript 是 区分 大小 写的 , True 和False 或 者其 他都 不是 Boolean 类 型的 值。 var box = true; alert(typeof box); 虽然Boolean 类 型的 字面 量只 有true 和false 两种,但ECMAScript 中 所有 类型 的值 都有 与 这两 个 Boolean 值 等价 的值 。要 将一 个值 转换 为其 对应 的 Boolean 值,可 以使 用转 型函 数 Boolean()。 var hello = 'Hello World!'; var hello2 = Boolean(hello); alert(typeof hello); 上 面是 一种 显示 转换 ,属 于强 制性 转换 。而 实际 应用 中 ,还 有一 种隐 式转 换 。比如,在 if 条 件语 句里 面的 条件 判断 ,就 存在 隐式 转换 。 var hello = 'Hello World!'; if (hello) { alert('如 果条 件为 true, 就执 行我 这条 ! '); } else { alert('如 果条 件为 false, 就执 行我 这条 ! '); } 以 下是 其他 类型 转换 成 Boolean Boolean Boolean Boolean 类 型规 则 数 据类 型 转 换为 true 的值转 换为 false 的值 Boolean true false String 任 何非 空字 符串 空 字符 串 Number 任 何非 零数 字值 (包 括无 穷大 ) 0和NaN Object 任 何对 象 null Undefined undefined 五.Number Number Number Number 类型 Number 类 型包 含两 种数 值: 整型 和浮 点型 。为 了支 持各 种数 值类 型, ECMA-262 定义 了 不同 的数 值字 面量 格式 。 最 基本 的数 值字 面量 是十 进制 整数 。 var box = 100; //十 进制 整数 八 进制 数值 字面 量, (以8为 基数 ), 前导 必须 是 0, 八进 制序 列 (0~7)。 var box = 070; //八 进制 , 56 var box = 079; //无 效的 八进 制, 自动 解析 为 79 var box = 08; //无 效的 八进 制, 自动 解析 为 8 十 六进 制字 面量 前面 两位 必须 是 0x, 后面 是 (0~9 及A~F)。 var box = 0xA; //十 六进 制, 10 var box = 0x1f; //十 六进 制, 31 浮 点类 型, 就是 该数 值中 必须 包含 一个 小数 点, 并且 小数 点后 面必 须至 少有 一位 数字 。 var box = 3.8; var box = 0.8; var box = .8; //有 效, 但不 推荐 此写 法 由 于保 存浮 点数 值需 要的 内存 空间 比整 型数 值大 两倍 ,因此ECMAScript 会 自动 将可 以 转 换为 整型 的浮 点数 值转 成为 整型 。 var box = 8.; //小 数点 后面 没有 值, 转换 为 8 var box = 12.0; //小 数点 后面 是 0, 转成 为 12 对 于那 些过 大或 过小 的数 值, 可以 用科 学技 术法 来表 示 (e表 示法 )。用e表 示该 数值 的 前面10的 指数 次幂 。 var box = 4.12e9; //即4120000000 var box = 0.00000000412; //即4.12e-9 虽 然浮 点数 值的 最高 精度 是 17位 小数 ,但 算术 运算 中可 能会 不精 确。 由于 这个 因素 , 做 判断 的时 候一 定要 考虑 到这 个问 题 (比 如使 用整 型判 断 )。 alert(0.1+0.2); //0.30000000000000004 浮 点数 值的 范围 在: Number.MIN_VALUE ~ Number.MAX_VALUE 之 间。 alert(Number.MIN_VALUE); //最 小值 alert(Number.MAX_VALUE); //最 大值 如 果超 过了 浮点 数值 范围 的最 大值 或最 小值 ,那 么就 先出 现 Infinity(正 无穷 )或者 -Infinity(负 无穷 )。 var box = 100e1000; //超 出范 围, Infinity var box = -100e1000; //超 出范 围, -Infinity 也 可能 通过 Number.POSITIVE_INFINITY 和Number.NEGATIVE_INFINITY 得到 Infinity(正 无穷 )及-Infinity(负 无穷 )的 值。 alert(Number.POSITIVE_INFINITY); //Infinity(正 无穷 ) alert(Number.NEGATIVE_INFINITY);//-Infinity(负 无穷 ) 要 想确 定一 个数 值到 底是 否超 过了 规定 范围 ,可 以使 用 isFinite()函 数。 如果 没有 超过 , 返回true, 超过 了返 回 false。 var box = 100e1000; alert(isFinite(box)); //返回false 或者true NaN, 即非 数值 (Not a Number)是 一个 特殊 的值 ,这 个数 值用 于表 示一 个本 来要 返回 数 值 的操 作数 未返 回数 值的 情况 (这 样就 不会 抛出 错误 了 )。比如,在 其他 语言 中 ,任 何数 值除 以0都 会导 致错 误而 终止 程序 执行 。但在ECMAScript 中,会 返回 出特 殊的 值 ,因 此不 会影 响 程序 执行 。 var box = 0 / 0; //NaN var box = 12 / 0; //Infinity var box = 12 / 0 * 0; //NaN 可 以通 过 Number.NaN 得到NaN 值,任 何与 NaN 进 行运 算的 结果 均为 NaN,NaN 与自 身 不相 等 (NaN 不 与任 何值 相等 )。 alert(Number.NaN); //NaN alert(NaN+1); //NaN alert(NaN == NaN) //false ECMAScript 提 供了 isNaN()函 数, 用来 判断 这个 值到 底是 不是 NaN。isNaN()函 数在 接 收 到一 个值 之后 ,会 尝试 将这 个值 转换 为数 值。 alert(isNaN(NaN)); //true alert(isNaN(25)); //false,25是 一个 数值 alert(isNaN('25')); //false,'25'是 一个 字符 串数 值, 可以 转成 数值 alert(isNaN('Lee')); //true,'Lee'不 能转 换为 数值 alert(isNaN(true)); //false true 可 以转 成成 1 isNaN()函 数也 适用 于对 象。 在调 用 isNaN()函 数过 程中 ,首 先会 调用 valueOf()方法,然 后 确定 返回 值是 否能 够转 换成 数值 。如 果不 能, 则基 于这 个返 回值 再调 用 toString()方 法, 再 测试 返回 值。 var box = { toString : function (){ return '123'; //可 以改 成 return 'Lee'查 看效 果 } }; alert(isNaN(box)); //false 有3个 函数 可以 把非 数值 转换 为数 值: Number()、parseInt()和parseFloat()。Number() 函 数是 转型 函数 ,可 以用 于任 何数 据类 型, 而另 外两 个则 专门 用于 把字 符串 转成 数值 。 alert(Number(true)); //1,Boolean 类 型的 true 和false 分 别转 换成 1和0 alert(Number(25)); //25, 数值 型直 接返 回 alert(Number(null)); //0, 空对 象返 回 0 alert(Number(undefined)); //NaN,undefined 返回NaN 如 果是 字符 串, 应该 遵循 一下 规则 : 1.只 包含 数值 的字 符串 ,会 直接 转成 成十 进制 数值 ,如 果包 含前 导 0, 即自 动去 掉。 alert(Number('456')); //456 alert(Number('070')); //70 2.只 包含 浮点 数值 的字 符串 ,会 直接 转成 浮点 数值 ,如 果包 含前 导和 后导 0, 即自 动去 掉。 alert(Number('08.90')); //8.9 3.如 果字 符串 是空 ,那 么直 接转 成成 0。 alert(Number('')); //0 4.如 果不 是以 上三 种字 符串 类型 ,则 返回 NaN。 alert('Lee123'); //NaN 5.如 果是 对象 ,首 先会 调用 valueOf()方法,然 后确 定返 回值 是否 能够 转换 成数 值 。如果 转 换的 结果 是 NaN, 则基 于这 个返 回值 再调 用 toString()方 法, 再测 试返 回值 。 var box = { toString : function (){ return '123'; //可 以改 成 return 'Lee'查 看效 果 } }; alert(Number(box)); //123 由于Number()函 数在 转换 字符 串时 比较 复杂 且不 够合 理, 因此 在处 理整 数的 时候 更常 用 的是 parseInt()。 alert(parsetInt('456Lee')); //456, 会返 回整 数部 分 alert(parsetInt('Lee456Lee')); //NaN, 如果 第一 个不 是数 值, 就返 回 NaN alert(parseInt('12Lee56Lee')); //12, 从第 一数 值开 始取 ,到 最后 一个 连续 数值 结束 alert(parseInt('56.12'));//56, 小数 点不 是数 值, 会被 去掉 alert(parseInt('')); //NaN, 空返 回 NaN parseInt()除 了能 够识 别十 进制 数值 ,也 可以 识别 八进 制和 十六 进制 。 alert(parseInt('0xA')); //10, 十六 进制 alert(parseInt('070')); //56, 八进 制 alert(parseInt('0xALee')); //100, 十六 进制 , Lee 被 自动 过滤 掉 ECMAScript 为parseInt()提 供了 第二 个参 数, 用于 解决 各种 进制 的转 换。 alert(parseInt('0xAF')); //175, 十六 进制 alert(parseInt('AF',16)); //175, 第二 参数 指定 十六 进制 ,可 以去 掉 0x前导 alert(parseInt('AF')); //NaN, 理所 当然 alert(parseInt('101010101',2)); //314, 二进 制转 换 alert(parseInt('70',8)) //56, 八进 制转 换 parseFloat()是 用于 浮点 数值 转换 的 ,和parseInt()一样,从 第一 位解 析到 非浮 点数 值位 置 。 alert(parseFloat('123Lee')); //123, 去掉 不是 别的 部分 alert(parseFloat('0xA')); //0, 不认 十六 进制 alert(parseFloat('123.4.5')); //123.4, 只认 一个 小数 点 alert(parseFloat('0123.400')); //123.4, 去掉 前后 导 alert(parseFloat('1.234e7')); //12340000, 把科 学技 术法 转成 普通 数值 六.String String String String 类型 String 类 型用 于表 示由 于零 或多 个 16位Unicode 字 符组 成的 字符 序列 ,即 字符 串。 字 符 串可 以由 双引 号 (")或 单引 号 (')表 示。 var box = 'Lee'; var box = "Lee"; PS: 在某 些其 他语 言 (PHP)中 ,单 引号 和双 引号 表示 的字 符串 解析 方式 不同 , 而 ECMAScript 中 ,这 两种 表示 方法 没有 任何 区别 。但 要记 住的 是, 必须 成对 出现 ,不 能穿 插 使 用, 否则 会出 错。 var box = '李 炎恢 ";//出错 String 类 型包 含了 一些 特殊 的字 符字 面量 ,也 叫转 义序 列。 字 面量 含义 \n 换行 \t 制表 \b 空格 \r 回车 \f 进纸 \\ 斜杠 \' 单 引号 \" 双 引号 \xnn 以 十六 进制 代码 nn表 示的 一个 字符 (0~F)。 例: \x41 \unnn 以 十六 进制 代 码nnn 表 示的 一 个Unicode 字符(0~F)。例:\u03a3 ECMAScript 中 的字 符串 是不 可变 的, 也就 是说 ,字 符串 一旦 创建 ,它 们的 值就 不能 改 变。要 改变 某个 变量 保存 的字 符串 ,首 先要 销毁 原来 的字 符串 ,然 后再 用另 一个 包含 新值 的 字 符串 填充 该变 量。 var box = 'Mr.'; box = box + ' Lee'; toString()方 法可 以把 值转 换成 字符 串。 var box = 11; var box = true; alert(typeof box.toString()); toString()方 法一 般是 不需 要传 参的 ,但 在数 值转 成字 符串 的时 候, 可以 传递 进制 参数 。 var box = 10; alert(box.toString()); //10, 默认 输出 alert(box.toString(2)); //1010, 二进 制输 出 alert(box.toString(8)); //12, 八进 制输 出 alert(box.toString(10)); //10, 十进 制输 出 alert(box.toString(16)); //a, 十六 进制 输出 如 果在 转型 之前 不知 道变 量是 否是 null 或者undefined 的 情况 下 ,我 们还 可以 使用 转型 函数String(), 这个 函数 能够 将任 何类 型的 值转 换为 字符 串。 var box = null; alert(String(box)); PS: 如果 值有 toString()方 法, 则调 用该 方法 并返 回相 应的 结果 ;如 果是 null 或者 undefined, 则返 回 "null"或者"undeinfed"。 七.Object Object Object Object 类型 ECMAScript 中 的对 象其 实就 是一 组数 据和 功能 的集 合 。对 象可 以通 过执 行 new 操 作符 后 跟要 创建 的对 象类 型的 名称 来创 建。 var box = new Object(); Object()是 对象 构造 ,如 果对 象初 始化 时不 需要 传递 参数 ,可 以不 用写 括号 ,但 这种 方 式 我们 是不 推荐 的。 var box = new Object; Object()里 可以 任意 传参 ,可 以传 数值 、字 符串 、布 尔值 等。 而且 ,还 可以 进行 相应 的 计 算。 var box = new Object(2); //Object 类 型, 值是 2 var age = box + 2; //可 以和 普通 变量 运算 alert(age); //输 出结 果, 转型 成 Number 类 型了 既 然可 以使 用 new Object()来 表示 一个 对象 ,那 么我 们也 可以 使用 这种 new 操 作符 来创 建 其他 类型 的对 象。 var box = new Number(5); //new String('Lee')、new Boolean(true) alert(typeof box); //Object 类型 PS:面 向对 象是 JavaScript 课 程的 重点 ,这 里我 们只 是简 单做 个介 绍 。详 细的 课程 将在 以 后的 章节 继续 学习 。 感谢收看本次教程! 本 课程 是由 北风 网 (ibeifeng.com)(ibeifeng.com)(ibeifeng.com)(ibeifeng.com) 瓢城Web Web Web Web 俱 乐部 (yc60.com)(yc60.com)(yc60.com)(yc60.com)联合提 供: 本 次主 讲老 师: 李 炎恢 我 的博 客: hi.baidu.com/hi.baidu.com/hi.baidu.com/hi.baidu.com/李 炎恢 //// 我 的邮 件 :yc60.com@gmail.comyc60.com@gmail.comyc60.com@gmail.comyc60.com@gmail.com

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 2 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档