这篇文章主要介绍了 JavaScript 的类型、值和变量小结的相关资料, 需要的朋友可以参考下
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
前言:JavaScript 的数据类型分为两类:原始类型和对象类型。5 种原始类型:数字、字符串、布尔值、null(空)、undefined(未定义)。对象是属性的集合,每个属性都由 "名 / 值对"(值可以是原始值、也可以是对象)构成。三个比较特殊的对象:全局对象、数组、函数。JavaScript 语言核心还定义了三种有用的类:日期(Date)类、正则(RegExp)类、错误(Error)类。
1 数字
JavaScript 中不区分整数值和浮点数值。JavaScript 可以识别十进制整型直接量(所谓直接量,就是程序中直接使用的数据值),和 16 进制值(以 0x 或 0X 为前缀,那个是数字 0 不是字母 o。想想如果是字母 o 的话,那一个十六进制值不成了一个标识符了嘛)。尽管 ECMAScript 标准不支持八进制直接量,但 JavaScript 的某些实现可以采用八进制形式表示整数(以数字 0 为前缀),笔者在自己电脑上的 IE、Chrome、FF 这三种浏览器中使用八进制给一个变量赋值也都没问题。不过在 ECMAScript6 的严格模式下,八进制直接量是明令禁止的。
浮点型直接量有两种写法。①传统的实数写法:有整数部分、小数点和小数部分组成;②指数计数法:即在实数后跟字母 e 或 E,后面跟正负号,其后再跟一个整型的指数。
1.1 算术运算的溢出
JavaScript 中算术运算在溢出(overflow)、下溢(underflow)或被 0 整除时不会报错。
溢出:当运算结果超出了 JavaScript 所能表示的数字上限,结果为正无穷大 Infinity 或负无穷大 - Infinity。无穷大值得行为特性也符合现实:基于它们的加、减、乘和除运算结果还是无穷大值(当然保留它们的正负号);下溢:当运算结果无限接近于零并比 JavaScript 能表示的最小值还小的时候发生的情形。这种情况下,将会返回 0。当一个负数发生下溢时返回特殊值 "负零"。负零和整零基本是相等的(甚至可以使用严格相等 === 来测试),除了作为除数之外:
- var zero = 0; //正零值
- var negz = -0; //负零值
- zero === negz //表达式返回值为true
- 1/zero === 1/negz
- //表达式返回值false,等价于判断正无穷大和负无穷大是否严格相等
被 0 整除会返回正无穷大或者负无穷大值。但 0 除以 0 会返回 NaN(JavaScript 预定义对象 Number 的 NaN 属性的值)。返回 NaN 的有四种情况:①0 除以 0②无穷大除以无穷大③给任意负数作开方运算④算术运算符与不是数字或无法转换为数字的操作数一起使用时。
NaN 值有一点特殊:它和任何值都不相等,包括自身。判断一个变量 x 是否为 NaN 的两种方法:①使用函数 isNaN()②是使用 x != x 判断,当且仅当 x 为 NaN 时,表达式结果才为 true。JavaScript 中还有一个类似的函数 isFinite(),在参数不是 NaN、Infinity 或 - Infinity 的时候返回 true。
1.2 二进制浮点数和四舍五入错误
实数有无数个,但 JavaScript 通过浮点数的形式只能表示其中有限个数。也就是说,在 JavaScript 中使用实数的时候,常常只是一个真实值的一个近似表示。JavaScript 采用了 IEEE-754 浮点数表示法,这是一种二进制表示法,可以精确的表示如 1/2、1/8 和 1/1024、这样的分数,但是十进制分数 1/10、1/10 等并不能精确的表示。例如:
- var x = 0.3 -0.2; //x=0.09999999999999998
- var y = 0.2 - 0.1; // y=0.1
- x == y //false
- x == 0.1 //false
- y == 0.1 //true
- 0.1 == 0.1 //true
- var z = x + y; //z=0.19999999999999998
2 文本
2.1 字符串、字符集
字符串(string)是一组由 16 位值组成的不可变的有序序列,每个字符通常来自于 Unicode 字符集。字符串的长度(length)是其所含 16 位值得个数。JavaScript 通过字符串类型来表示文本。注意:JavaScript 中并没有表示单个字符的 "字符型"。要表示一个 16 位值,只需将其赋值给字符串变量即可。
JavaScript 采用 UTF-16 编码的 Unicode 字符集,JavaScript 字符串是由一组无符号的 16 位值组成的序列。那些不能表示为 16 位的 Unicode 字符则遵循 UTF-16 编码规则——用两个 16 位值组成一个序列(或称作 "代理项对")表示。这意味着一个长度为 2 的 JavaScript 字符串有可能表示一个 Unicode 字符。注意:JavaScript 定义的各式字符串的操作方法均作用于 16 位值,而非字符,且不会对代理项对做单独处理。书看到这里,又结合 {aa0aa} 上面所述,终于对 Unicode 字符集、UTF-8、UTF-16 稍有理解。
字符串的定界符可以是单引号或者双引号。这两种形式的定界符可以嵌套,但是不能多层嵌套(比如,双引号可以包含单引号,这时单引号中不能再包含双引号了)。正如上篇所说,一个字符串值可以拆分为数行,每行必须以反斜线(\) 结束,这时反斜线和行结束符都不算是字符串内容,即字符串本身并非是多行,只是写成了多行的形式。
注意:①在 JavaScript 中字符串是固定不变的(除非重新赋值),类似 replace()和 toUpperCase()的方法都返回新字符串,原字符串本身并没有变化;②字符串可以当做只读数组,除了使用 charAt()方法来查询一个单一字符,也可以使用方括号的方式来访问字符串中的单个字符(16 位值),例如:
- s = "hello, world";
- s[0] //=>"h"
2.2 转义字符
转义字符 含义
\o NUL 字符(\u0000)
\b 退格符 (\u0008)
\t 水平制表符 (\u0009)
\n 换行符 (\u000A)
\v 垂直制表符 (\u000B)
\f 换页符 (\u000C)
\r 回车符 (\u000D)
\"双引号 (\u0022)
\'撇号或单引号 (\u0027)
\\ 反斜线 (\u005C)
\xXX 由两位十六进制数 XX 指定的 Latin-1 字符
\uXXXX 由 4 位十六进制数 XXXX 指定的 Unicode 字符
注意:如果 "\" 字符位于没有在表中列出的字符前,则忽略 "\"。比如,"\#" 和 "#" 等价。别忘了反斜线还有一个作用就是多行字符串中每行结束处使用反斜线。
3 布尔值
在 JavaScript 中的值都可以转换为布尔值。其中,null、undefined、0、-0、NaN、""(空字符串),这 6 个值会被转换成 false,false 和这六个值有时称做 "假值";其他所有值,包括对象(数组)都会转换成 true,true 和这些值相应的被称做 "真值"。注意:布尔值包含 toString() 方法,因此可以使用这个方法将字符串转换成"true"或"false",但它并不包含其他有用的方法。
来源: