计算机程序的运行需要对值进行操作, 在编程语言中值的类型被称作数据类型, 编程语言最基本的特性就是能够支持多种数据类型. 当程序需要将值保存起来以备将来使用时, 便将其赋值给一个变量. 变量是一个值的符号名称, 可以通过该名称来获得对值的引用.
JavaScript 中除了数字, 字符串, 布尔值, null 和 undefined 之外就是对象了, 对象是属性的集合, 每个属性都由 "键: 值" 构成.
1, 数字
和其它编程语言不同, JavaScript 不区分整数值和浮点数值. JavaScript 中的所有数字均用浮点数值表示. JavaScript 采用 IEEE754 标准定义的 64 位浮点格式表示数字, 这意味着它能表示的最大值是 ±1.7976931348623157x10 的 308 次幂, 最小值是 ±5x10 的 - 324 次幂.
整数能表示的范围是 - 9007199254740992-9007199254740992(-2 的 53 次幂到 2 的 53 次幂), 包含边界值, 如果使用了超过此范围的整数, 则无法保证低位数的精度. 但需要注意的是数组的索引是基于 32 位的整数.
当一个数字直接出现在 JavaScript 程序中, 称之为数字直接量, JavaScript 支持多种格式的数字直接量, 注意在任何数字直接量前添加符号 (-) 可以得到他们的负值. 但负号是一元求反运算符, 并不是数字直接量语法的组成部分.
1.1 整形直接量
除了十进制的整形直接量, JavaScript 还可以识别十六进制的值, 十六进制直接量是以 "0x" 或 "0X" 为前缀, 其后跟随十六进制数串的直接量. 十六进制值是 0-9 之间的数字和 a(A)-f(F)之间的字母构成. 尽管 ECMAScript 标准不支持八进制直接量, 但 JavaScript 的某些实现可以允许采用八进制形式表示整数. 八进制直接量以数字 0 开始, 其后跟随一个由 0-7 之间的数字组成. 由于某些 JavaScript 的实现支持八进制直接量, 而有些不支持, 因此最好不要使用以 0 为前缀的整形直接量, 毕竟我们也无法得知当前 JavaScript 的实现是否支持八进制的解析. 在 ECMAScript6 的严格模式下, 八进制直接量是明令禁止的.
1.2 浮点型直接量
浮点型可以含有小数点, 它们采用的是传统的实数写法. 一个实数由整数部分, 小数点和小数部分组成.
此外还可以使用科学计数法表示浮点型, 即在实数后跟字母 e(E)后面跟正负号, 最后在加上整形的指数. 语法如下:
- [digits][.digits][(e|E)[(+|-)]digits]
- 3.14
1.234E5 表示 1.234x10 的 5 次幂
1.234E-5 表示 1.234x10 的 - 5 次幂
1.3JavaScript 中算术运算符
JavaScript 程序是使用语言本身提供的算术运算符来进行数字运算的, 这些运算符包括 +,-,*,/,%. 除了基本的运算符外,
JavaScript 还支持更加复杂的算术运算符, 这些复杂运算作为 Math 对象的属性定义的函数和常量来实现.
JavaScript 中的算术运算在溢出 (overflow), 下溢(underflow) 或被零整除时不会报错. 当数字运算结果超过了 JavaScript 所能表示的数字上限(溢出), 结果为一个特殊的无穷大值 Infinity. 同样的当负数的值超过了 JavaScript 所能表示的负数范围, 结果为负无穷大 - Infinity 表示. 无穷大值的行为特性和我们所期望的是一致的, 基于它们的加减乘除结果是无穷大值.
下溢是当运算结果无限接近于 0 并比 JavaScript 能表示的最小值还小的时候发生的一种情形. 这种情况下 JavaScript 将会返回 0. 当一个负数发生下溢时, JavaScript 返回一个特殊的值负零, 这个值 (负零) 几乎和正常的零完全一样. 几乎很少用到负零.
被零整除在 JavaScript 并不报错, 它只是简单的返回无穷大或负无穷大. 但有一个例外, 零除以零没有意义, 这种整除运算结果也是一个非数字 (not-a-number NaN) 值, 用 NaN 表示. 无穷大除以无穷大, 给任意负数做开方运算或者算术运算符与不是数字或无法转换为数字的操作数一起使用时都返回 NaN
非数字值 NaN 和任何值都不相等, 包括自身. 也就是说没办法通过 a==NaN 来判断 a 的值是否是 NaN, 可以使用 isNaN(变量)来判断是否是 NaN, 如果结果为 true 表示是 NaN 类型.
isFinite(变量)在参数不是 NaN,Infinity 或 - Infinity 的时候返回 true.
负零同样有特殊, 它和正零是相等的(即使使用 JavaScript 的严格相等测试来判断). 这意味着两个值几乎一样, 除了作为除数之外:
- var z = 0;
- var n = -0;
- z === n; // 结果为 true
- a = 2 / z; // 结果为 Infinity
- c = 2 / n; // 结果为 - Infinity
1.4 二进制浮点数和四舍五入错误
实数由无数个, 但 JavaScript 通过浮点数的形式只能表示其中有限的个数(确切的说是 18437736874454810627 个, 本人未测试). 也就是说, 当在 JavaScript 中使用实数的时候, 常常只是真实值的一个近似表示.
JavaScript 采用了 IEEE-754 浮点数表示法 (几乎所有现代编程语言所采用), 这是一种二进制表示法, 可以精确的表示分数, 如 1/2,1/8,1/1024. 遗憾的是, 我们常用的分数(特别是在金融计算方面) 都是十进制分数 1/10,1/100 等. 二进制浮点数表示法并不能精确表示类似 0.1 这样简单的数字. JavaScript 具有足够的精度, 可以及其近似于 0.1. 但事实是, 数字不能精确表述的确带来一些问题. 如下代码:
- var a = 0.3 - 0.2 // a 实际等于 0.09999999999999998
- var b = 0.2 - 0.1 // b 实际等于 0.1
由于舍入误差, 0.3 和 0.2 之间的近似差值实际上并不等于 0.2 和 0.1 之间的近似差值. 这个问题并不只在 JavaScript 中才会出现, 在任何使用二进制浮点数的编程语言中都会有这个问题. 需要理解的是上述代码 a 和 b 的值非常的接近彼此最终的正确值, 这种结果可以胜任大多数的计算任务, 这个问题也只有在比较两个值是否相等的时候才会出现.
2,Data 对象
JavaScript 语言核心包括 Date()构造函数, 用来创建表示日期和时间的对象. 这些日期对象的方法为日期计算提供了简单的 API. 日期对象不像数字那样是基本数据类型. 下面是常用方法:
3, 字符串
字符串是一组由 16 位值组成的不可变的有序序列, 每个字符通常来自于 Unicode 字符集. JavaScript 通过字符串类型来表示文本. 字符串的长度是其所含 16 位值的个数. JavaScript 字符串的索引从 0 开始. 第一个字符的位置使 0, 第二个位置使 1, 以此类推. JavaScript 中的字符串由单引号或双引号括起来. 单引号定界的字符串中可以包含双引号, 由双引号定界的字符串中也可以包含单引号.
在 ECMAScript3 中, 字符串必须写在一行中, 而在 EXMAScript5 中, 字符串可以拆分成数行, 每行必须以反斜线 (\) 结束, 反斜线和行结束符都不算是字符串的内容. 可使用 "\n" 进行换行.
var a = "Hello world haha"
字符串常用方法:
方法 | 描述 |
---|---|
charAt() | 返回指定索引位置的字符 |
charCodeAt() | 返回指定索引位置字符的 Unicode 值 |
concat() | 连接两个或多个字符串,返回连接后的字符串 |
fromCharCode() | 将 Unicode 转换为字符串 |
indexOf() | 返回字符串中检索指定字符第一次出现的位置 |
lastIndexOf() | 返回字符串中检索指定字符最后一次出现的位置 |
localeCompare() | 用本地特定的顺序来比较两个字符串 |
match() | 找到一个或多个正则表达式的匹配 |
replace() | 替换与正则表达式匹配的子串 |
search() | 检索与正则表达式相匹配的值 |
slice() | 提取字符串的片断,并在新的字符串中返回被提取的部分 |
split() | 把字符串分割为子字符串数组 |
substr() | 从起始索引号提取字符串中指定数目的字符 |
substring() | 提取字符串中两个指定的索引号之间的字符 |
toLocaleLowerCase() | 根据主机的语言环境把字符串转换为小写,只有几种语言(如土耳其语)具有地方特有的大小写映射 |
toLocaleUpperCase() | 根据主机的语言环境把字符串转换为大写,只有几种语言(如土耳其语)具有地方特有的大小写映射 |
toLowerCase() | 把字符串转换为小写 |
toString() | 返回字符串对象值 |
toUpperCase() | 把字符串转换为大写 |
trim() | 移除字符串首尾空白 |
valueOf() | 返回某个字符串对象的原始值 |
4, 转义符
反斜线 (\) 有着特殊的用途, 反斜线后加一个字符就不再表示字符本身了, 而代表其它意义. 下面是常见的转义字符.
义字符 | 意义 | ASCII 码值(十进制) |
\a | 响铃 (BEL) | 007 |
\b | 退格 (BS) ,将当前位置移到前一列 | 008 |
\f | 换页 (FF),将当前位置移到下页开头 | 012 |
\n | 换行 (LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车 (CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表 (HT) (跳到下一个 TAB 位置) | 009 |
\v | 垂直制表 (VT) | 011 |
\\ | 代表一个反斜线字符‘‘\‘ | 092 |
\‘ | 代表一个单引号(撇号)字符 | 039 |
\" | 代表一个双引号字符 | 034 |
\? | 代表一个问号 | 063 |
\0 | 空字符 (NUL) | 000 |
\ddd | 1 到 3 位八进制数所代表的任意字符 | 三位八进制 |
\xhh | 1 到 2 位十六进制所代表的任意字符 | 十六进制 |
JavaScript(二)数据类型
来源: http://www.bubuko.com/infodetail-2994188.html