JavaScript 的数据类型,共有七种(ES6 新增的第七种 Symbol 类型的值,本文暂不介绍)。七种内置类型又分为两大类型:基本类型和复杂类型。(本文将介绍JS中的简单数据类型)
基本类型有6种: number
,string
,boolean
,symbol
,null
,undefined
。
复杂类型:object
- 数值(number):整数和小数(比如
1
和3.14
)- 字符串(string):文本(比如
Hello World
)。- 布尔值(boolean):表示真伪的两个特殊值,即true(真)和false(假)
undefined
:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值null
:表示空值,即此处的值为空。- 对象(object):各种值组成的集合。
Symbol
(ES6 中新引入的值):Symbol
生成一个全局唯一的值。
1. 数值(number)
(1)整数和浮点数
JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1
与1.0
是相同的,是同一个数。
1 === 1.0 // true
由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。具体常见容易犯错的例子如下:
0.1 + 0.2 === 0.3
// false
0.3 / 0.1
// 2.9999999999999996
(0.3 - 0.2) === (0.2 - 0.1)
// false
(2)数值的表示法
JavaScript 的数值有多种表示方法,可以用字面形式直接表示,比如35
(十进制)和0xFF
(十六进制)。
数值也可以采用科学计数法表示,下面是几个科学计数法的例子。
123e3 // 123000
123e-3 // 0.123
-3.1E+12
.1e-23
(3)数值的进制
使用字面量(literal)直接表示一个数值时,JavaScript 对整数提供四种进制的表示方法:十进制、十六进制、八进制、二进制。
- 十进制:没有前导0的数值。
- 八进制:有前缀
0o
或0O
的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。- 十六进制:有前缀
0x
或0X
的数值。- 二进制:有前缀
0b
或0B
的数值。
默认情况下,JavaScript 内部会自动将八进制、十六进制、二进制转为十进制。
0xff // 255
0o377 // 255
0b11 // 3
(4)特殊数值NaN
NaN
是 JavaScript 的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。
NaN
也属于 number
类型,并且NaN
不等于自身。
typeof NaN // 'number'
NaN === NaN // false
2. 字符串(string)
字符串就是零个或多个排在一起的字符,放在单引号或双引号之中。(由于 HTML 语言的属性值使用双引号,所以很多项目约定 JavaScript 语言的字符串只使用单引号,不妨也遵守这个约定吧。)
在代码的编写中,要始终坚持使用一种风格,不要一会使用单引号,一会使用双引号。
(1)多行字符串输入
字符串默认只能写在一行内,分成多行将会报错。
'a
b
c'
// SyntaxError: Unexpected token ILLEGAL
推荐使用:连接运算符(+)可以连接多个单行字符串,将长字符串拆成多行书写,输出的时候也是单行。
var longString = 'Long '
+ 'long '
+ 'long '
+ 'string';
longString
// "Long long long string"
(2)转义
反斜杠(\)在字符串内有特殊含义,用来表示一些特殊字符,所以又称为转义符。
需要用反斜杠转义的特殊字符,主要有下面这些。
\0
:null(\u0000
)\b
:后退键(\u0008
)\f
:换页符(\u000C
)\n
:换行符(\u000A
)\r
:回车键(\u000D
)\t
:制表符(\u0009
)\v
:垂直制表符(\u000B
)\'
:单引号(\u0027
)\"
:双引号(\u0022
)\\
:反斜杠(\u005C
)
(3)length 属性
length
属性返回字符串的长度,该属性也是无法改变的。
(4)字符集
JavaScript 使用 Unicode 字符集。JavaScript 引擎内部,所有字符都用 Unicode 表示。
四字节字符𝌆
,浏览器会正确识别这是一个字符,但是 JavaScript 无法识别,会认为这是两个字符。
'𝌆'.length // 2
上面代码中,JavaScript 认为𝌆
的length
属性为2,而不是1。(\0
、 \n
、\t
等长度均为1)
(5)Base64 转码
JavaScript 原生提供两个 Base64 相关的方法。
-
btoa()
:任意值转为 Base64 编码 -
atob()
:Base64 编码转为原来的值
var string = 'Hello World!';
btoa(string) // "SGVsbG8gV29ybGQh"
atob('SGVsbG8gV29ybGQh') // "Hello World!"
btoa('你好') // 报错
3. 布尔值(boolean)
布尔值只有两个值:true
和 false
。
布尔值代表“真”和“假”两个状态。“真”用关键字true
表示,“假”用关键字false
表示。
下列运算符会返回布尔值:
- 前置逻辑运算符:
!
(Not) - 相等运算符:
===
,!==
,==
,!=
- 比较运算符:
>
,>=
,<
,<=
其中,如果需要将各种类型的数据转换成boolean类型,以下几种会转换为false,其余的都是true:
undefined
null
false
0
NaN
-
""
或''
(空字符串)
a && b 在 a 和 b 都为 true 时,取值为 true;否则为 false
a || b 在 a 和 b 都为 false 时,取值为 false;否则为 true
4. symbol
5. null 与 undefined
这两种数值类型都用来表示变量没有值。
null
与undefined
都可以表示“没有”,含义非常相似。将一个变量赋值为undefined
或null
,老实说,语法效果几乎没区别。
undefined == null
// true
a.(规范)如果一个变量没有被赋值,那么这个变量的值就是 undefined
// 变量声明了,但没有赋值
var i;
i // undefined
b.(习俗)如果你想表示一个还没赋值的对象(object),就用 null
。
var obj = null
obj // null
c. (习俗)如果你想表示一个还没赋值的字符串/数字/布尔/symbol,就用undefined
表示。(直接var xxx)
网友评论