第 2 章 数 据 类 型 常 量 与 变 量 在 计 算 机 程 序 中 都 是 通 过 值 (value) 来 进 行 运 算 的, 能 够 表 示 并 操 作 值 的 类 型 为 数 据 类 型 在 本 章 里 将 会 介 绍 JavaScript 中 的 常 量 (literal) 变 量 (variable) 和 数 据 类 型 (data type)
2.1 基 本 数 据 类 型 JavaScript 中 支 持 数 字 字 符 串 和 布 尔 值 三 种 基 本 数 据 类 型, 以 下 是 对 这 三 种 基 本 数 据 类 型 的 介 绍
2.1.1 字 符 串 型 字 符 串 型 是 JavaScript 中 用 来 表 示 文 本 的 数 据 类 型, 是 由 Unicode 字 符 数 字 和 标 点 符 号 组 成 的 一 个 字 符 串 序 列 字 符 串 通 常 都 是 用 单 引 号 或 双 引 号 括 起 来 的 如 果 在 字 符 串 中 包 括 着 特 殊 字 符, 可 以 使 用 转 义 字 符 来 代 替
2.1.2 数 字 型 数 字 型 也 是 JavaScript 中 的 基 本 数 据 类 型 在 JavaScript 中 的 数 字 不 区 分 整 型 和 浮 点 型, 所 有 的 数 字 都 是 以 浮 点 型 来 表 示 的 JavaScript 中 的 数 字 的 有 效 范 围 大 约 为 10-308 ~10 308 之 间
2.1.3 布 尔 型 布 尔 型 比 较 简 单, 只 有 两 个 值, 即 代 表 真 的 true 和 代 表 假 的 false 布 尔 值 通 常 是 通 过 比 较 得 来 的, 如 以 下 代 码 : x == 2 在 上 面 代 码 中, 如 果 x 等 于 2, 则 返 回 true, 如 果 x 不 等 于 2, 则 返 回 false
2.2 复 合 数 据 类 型 除 了 基 本 的 数 据 类 型 之 外,JavaScript 还 支 持 复 合 数 据 类 型, 复 合 数 据 类 型 包 括 对 象 和 数 组 两 种
2.2.1 对 象 对 象 其 实 就 是 一 些 数 据 的 集 合, 这 些 数 据 可 以 是 字 符 串 型 数 字 型 布 尔 型, 也 可 以 是 复 合 型 对 象 中 的 数 据 是 已 命 名 的 数 据, 通 常 作 为 对 象 的 属 性 来 引 用 例 如 一 个 超 链 接 (Link) 对 象 有 一 个 名 为 text 的 属 性, 可 以 通 过 以 下 方 法 来 引 用 : link.text JavaScript 中 的 对 象 除 了 拥 有 属 性 之 外, 还 可 以 拥 有 方 法 例 如 一 个 窗 口 (Window) 对 象 有 一 个 名 为 alert 的 方 法, 可 以 通 过 以 下 方 法 来 引 用 : window.alert(message)
2.2.2 数 组 数 组 与 对 象 一 样, 也 是 一 些 数 据 的 集 合, 这 些 数 据 也 可 以 是 字 符 串 型 数 字 型 布 尔 型, 或 者 是 复 合 型 与 对 象 不 同 的, 数 组 中 的 数 据 并 没 有 被 命 名, 即 数 组 的 中 数 据 没 有 名 字, 因 此 不 能 通 过 名 字 来 引 用 该 数 据 在 数 组 中 为 每 个 数 据 都 编 了 一 个 号, 这 个 号 称 为 数 组 的 下 标 在 JavaScript 中 数 组 的 下 标 是 从 0 开 始, 通 过 使 用 数 组 名 加 下 标 的 方 法 可 以 获 取 数 组 中 的 某 个 数 据 如 以 下 代 码 分 别 获 取 名 为 abc 数 组 的 第 1 个 和 第 3 个 数 据 : abc[0] abc[1]
2.3 其 他 数 据 类 型 除 了 基 本 数 据 类 型 与 复 合 数 据 类 型 之 外, JavaScript 还 支 持 函 数 Null 与 Undefined 三 种 其 他 数 据 类 型
2.3.1 函 数 函 数 (function) 是 一 段 可 执 行 的 JavaScript 代 码, 函 数 具 有 一 次 定 义 多 次 使 用 的 特 点 在 JavaScript 中 的 函 数 可 以 带 有 0 个 或 多 个 参 数 在 函 数 体 中 执 行 完 JavaScript 代 码 之 后, 也 可 以 返 回 一 个 或 不 返 回 值 在 JavaScript 中 提 供 了 很 多 预 定 义 的 函 数, 如 用 于 检 测 非 数 字 值 的 isnan() 函 数 用 于 计 算 平 方 根 的 Math.sqrt() 函 数 等 等 其 使 用 方 法 如 下 所 示 : var bflag = isnan(0/0); var x = Math.sqrt(100);
2.3.2 null null 是 一 个 特 殊 的 数 据 类 型, 其 所 代 表 的 意 思 为 空 需 要 注 意, 这 个 空 并 不 代 表 是 0 或 空 字 符 串 数 字 0 代 表 的 是 数 字, 是 数 字 型 的 数 据 ; 空 字 符 串 代 表 的 是 长 度 为 0 的 字 符 串, 是 字 符 串 类 型 的 数 据 而 null 代 表 没 有 值, 不 是 一 个 有 效 的 数 字 字 符 串, 也 不 是 数 组 对 象 和 函 数, 什 么 数 据 类 型 都 不 是
2.3.3 undefined undefined 也 是 一 个 特 殊 的 数 据 类 型, 只 有 定 义 了 一 个 变 量 但 没 有 为 该 变 量 赋 值 使 用 了 一 个 并 未 定 义 的 变 量 或 者 是 使 用 了 一 个 不 存 的 对 象 的 属 性 时,JavaScript 才 会 返 回 undefined
2.4 数 据 类 型 的 转 换 JavaScript 支 持 字 符 串 型 数 字 型 布 尔 型 等 数 据 类 型, 当 这 些 数 据 类 型 之 间 需 要 进 行 运 算 时, 就 必 须 将 不 同 的 数 据 类 型 转 换 为 相 同 的 数 据 类 型
2.4.1 隐 式 类 型 转 换 JavaScript 是 一 种 无 类 型 (notype) 的 语 言, 这 种 无 类 型 并 不 是 指 JavaScript 没 有 数 据 类 型, 而 是 指 JavaScript 是 一 种 松 散 类 型 动 态 类 型 的 语 言 因 此, 在 JavaScript 中 定 义 一 个 变 量 时, 是 不 需 要 指 定 变 量 的 数 据 类 型, 这 就 使 得 JavaScript 可 以 很 方 便 灵 活 地 进 行 隐 式 类 型 转 换
2.4.2 显 式 类 型 转 换 在 JavaScript 中 除 了 可 以 隐 式 转 换 数 据 类 型 之 外, 还 可 以 显 式 转 换 数 据 类 型 显 式 转 换 数 据 类 型, 可 以 增 强 代 码 的 可 读 性 显 式 类 型 转 换 的 方 法 有 以 下 两 种 : 2.4.2.1 将 对 象 转 换 成 字 符 串 2.4.2.2 基 本 数 据 类 型 转 换
2.5 常 量 常 量 (Literals) 通 常 用 来 表 示 一 个 固 定 的 值, 这 个 值 是 不 会 被 改 变 的, 在 JavaScript 中 常 量 分 为 布 尔 常 量 整 数 常 量 浮 点 常 量 字 符 串 常 量 和 数 组 常 量 五 种 常 量 可 以 直 接 出 现 在 JavaScript 的 程 序 中
2.5.1 整 数 常 量 在 JavaScript 中 的 数 字 可 以 分 为 整 数 与 浮 点 数 两 种 当 一 个 整 数 直 接 出 现 在 JavaScript 程 序 中 时, 这 个 整 数 就 是 整 数 常 量 在 JavaScript 中 整 数 常 量 又 可 以 分 为 以 下 三 种 : (1) 十 进 制 整 数 : (2) 八 进 制 整 数 : (3) 十 六 进 制 整 数 :
2.5.2 浮 点 常 量 浮 点 常 量 可 以 包 含 小 数 点, 其 表 示 方 法 有 以 下 两 种 : (1) 传 统 记 数 法 : 传 统 记 数 法 是 将 一 个 浮 点 数 分 为 三 个 部 分, (2) 科 学 记 数 法 : 当 一 个 数 字 很 大 或 很 小 的 时 候, 可 以 使 用 科 学 记 数 法 来 表 示
2.5.3 字 符 串 常 量 字 符 串 是 由 单 引 号 (') 或 双 引 号 (") 括 起 来 的 字 符 序 列 其 中 字 符 序 列 的 个 数 可 以 是 零 个 或 多 个 单 引 号 所 括 起 来 的 字 符 序 列 里 可 以 包 括 双 引 号, 而 双 引 号 所 括 起 来 的 字 符 序 列 里 也 可 以 包 含 单 引 号 字 符 串 常 量 必 须 写 在 一 行 中, 如 果 换 行 的 话,JavaScript 会 认 为 是 两 个 语 句 而 产 生 错 误
2.5.4 字 符 串 中 的 转 义 字 符 上 一 节 中 提 到 字 符 串 常 量 必 须 使 用 单 引 号 或 双 引 号 括 起 来, 如 果 一 个 字 符 串 本 身 包 含 了 单 引 号 或 双 引 号, 那 应 该 怎 么 办? 假 设 一 个 字 符 串 如 下 所 示 : JavaScript 中 可 以 包 含 单 引 号 (') 或 双 引 号 (")
2.5.5 布 尔 常 量 布 尔 常 量 是 比 较 简 单 的 一 种 常 量, 只 有 两 种 值, 一 种 是 true( 真 ), 一 种 是 false( 假 ) 在 有 些 时 候,JavaScript 也 可 以 把 0 和 1 分 别 看 成 false 和 true 布 尔 常 量 常 用 于 条 件 判 断 语 句 中
2.5.6 数 组 常 量 数 组 就 是 一 些 数 据 的 集 合, 在 JavaScript 中 数 组 中 的 数 据 可 以 是 任 何 数 据 类 型, 包 括 数 组 数 组 的 定 义 方 法 如 下 所 示 : 数 组 名 = [ 数 组 值 1, 数 组 值 2, 数 组 值 3 ]
2.6 变 量 变 量 (variable) 是 相 对 常 量 而 言 的, 常 量 通 常 是 一 个 不 会 改 变 的 固 定 值, 而 变 量 是 对 应 到 某 个 值 的 一 个 符 号, 这 个 符 号 中 的 值 可 能 会 随 着 程 序 的 执 行 而 改 变, 因 此 称 为 变 量 在 很 多 情 况 下, 变 量 又 称 为 标 识 符 (identifier)
2.6.1 变 量 的 命 名 方 式 变 量 可 以 用 来 存 储 数 据,JavaScript 中 是 通 过 变 量 名 来 调 用 这 些 被 存 储 的 数 据 变 量 名 必 须 以 ASCII 字 符 或 下 划 线 (_) 开 头, 第 1 个 字 母 不 能 是 数 字, 但 其 后 可 以 是 数 字 或 其 他 字 母
2.6.2 变 量 类 型 JavaScript 与 其 他 程 序 语 言 之 间 有 些 区 别, 其 他 程 序 语 言 大 多 需 要 为 变 量 指 定 一 个 数 据 类 型, 例 如 将 一 个 变 量 指 定 为 整 数 型, 那 么 这 个 变 量 就 只 能 存 储 整 数 型 数 据, 不 可 以 存 储 浮 点 型 或 其 他 类 型 的 数 据 而 JavaScript 中 的 变 量 是 没 有 类 型 (notype) 的, 这 就 意 味 着 在 JavaScript 中 的 变 量 可 以 是 任 何 一 种 数 据 类 型
2.6.3 定 义 变 量 在 JavaScript 中, 使 用 一 个 变 量 之 前, 必 须 要 先 定 义 该 变 量 只 有 在 定 义 了 一 个 变 量 之 后, 系 统 才 会 准 备 一 个 内 存 空 间 来 存 储 这 个 变 量 的 值, 而 程 序 员 可 以 通 过 变 量 名 来 存 储 或 读 取 变 量 的 值 在 JavaScript 中 可 以 使 用 关 键 字 var 来 定 义 一 个 变 量
2.6.4 定 义 变 量 的 注 意 事 项 虽 然 在 JavaScript 中 定 义 变 量 是 一 件 十 分 简 单 的 事 情, 但 是 在 定 义 变 量 时, 有 以 下 几 点 是 需 要 注 意 的 : 2.6.4.1 重 复 定 义 变 量 2.6.4.2 变 量 必 须 要 先 定 义 后 使 用 2.6.4.3 给 未 定 义 的 变 量 赋 值 2.6.4.4 引 用 未 赋 值 的 变 量
2.6.5 变 量 的 值 由 于 JavaScript 的 变 量 不 需 要 指 定 数 据 类 型, 因 此 变 量 值 可 以 是 任 何 类 型 的 数 据, 包 括 : 数 字 型 (number): 整 数 型 或 浮 点 数, 如 :123 或 12.3 布 尔 型 : 又 称 逻 辑 型 (logical), 只 能 是 true 或 false 字 符 串 型 (string): 用 单 引 号 或 双 引 号 括 起 来 的 字 符 串 空 值 (null): 这 是 一 种 特 殊 的 类 型, 表 示 没 有 值, 即 该 变 量 为 空 未 定 义 值 (undefined): 表 示 变 量 还 没 有 被 赋 值
2.6.6 变 量 的 有 效 范 围 变 量 可 以 根 据 其 有 效 范 围 分 为 全 局 变 量 与 局 部 变 量 两 种 其 中 全 局 (global) 变 量 从 定 义 开 始, 到 整 个 JavaScript 代 码 结 束 为 止, 都 可 以 使 用 ; 而 局 部 (local) 变 量 只 有 在 函 数 内 部 里 才 生 效 ( 具 体 内 容 请 参 照 书 )
2.6.7 使 用 变 量 的 注 意 事 项 在 使 用 变 量 的 时 候, 有 以 下 几 点 是 需 要 注 意 的 : 2.6.7.1 变 量 的 优 先 级 2.6.7.2 在 函 数 体 内 定 义 全 局 变 量 2.6.7.3 嵌 套 函 数 体 中 的 变 量 的 有 效 范 围 2.6.7.4 局 部 变 量 在 整 个 函 数 体 内 都 有 效
2.7 保 留 字 在 为 变 量 命 名 时, 是 不 能 与 JavaScript 中 的 保 留 字 同 名 因 为 这 些 保 留 字 对 于 JavaScript 来 说 具 有 特 殊 意 义, 是 JavaScript 语 法 中 的 一 部 分 事 实 上, 保 留 字 不 但 不 能 用 作 变 量 名, 也 不 能 用 作 函 数 名 以 及 循 环 标 签
2.7.1 JavaScript 中 的 保 留 字 在 JavaScript 中 一 共 有 28 个 保 留 字, 表 2-2 列 出 了 所 有 的 JavaScript 中 的 保 留 字, 这 些 保 留 字 不 能 用 作 变 量 名 函 数 名 以 及 循 环 标 签 ( 具 体 内 容 请 参 照 书 )
2.7.2 ECMA 中 的 保 留 字 除 了 JavaScript 中 的 保 留 字 之 外, 表 2-3 中 是 ECMAScript 扩 展 的 保 留 字 使 用 这 些 保 留 字 是 ECMAScript 用 来 作 为 扩 展 语 言 所 用 的, 在 JavaScript 中 不 会 阻 止 程 序 员 使 用 这 些 保 留 字 作 标 识 符, 但 是 应 该 尽 量 避 免 使 用 ( 具 体 内 容 请 参 照 书 )
2.7.3 避 免 使 用 的 字 符 串 除 了 JavaScript 中 的 保 留 字 不 能 做 标 识 符 ECMA 中 的 保 留 字 不 建 议 标 识 符 之 外, 表 2-4 中 的 字 符 串 也 尽 量 不 要 用 来 当 作 标 识 符 使 用, 因 为 这 些 字 符 串 都 是 JavaScript 与 ECMAScript 中 的 全 局 变 量 名 或 全 局 函 数 名 如 果 使 用 这 些 字 符 串 作 为 标 识 符, 很 容 易 产 生 错 误 ( 具 体 内 容 请 参 照 书 )
2.8 小 结 JavaScript 中 的 基 本 数 据 类 型 有 数 字 型 字 符 串 型 和 布 尔 值 三 种, 除 了 基 本 数 据 类 型 之 外, JavaScript 还 支 持 对 象 数 组 函 数 null 和 undefined 数 据 类 型 各 种 不 同 的 数 据 类 型 之 间 可 以 通 过 显 式 或 隐 式 方 式 进 行 转 换 JavaScript 与 其 他 语 言 一 样, 也 支 持 常 量 与 变 量, 不 过 JavaScript 中 的 变 量 是 无 类 型 的, 即 可 以 存 储 任 何 一 种 数 据 类 型 的 数 据 在 下 一 章 中 将 介 绍 JavaScript 的 表 达 式 与 运 算 符