数据类型概述
-
最新的 ECMAScript 标准定义了 8 种数据类型:
7 种原始类型:Boolean, Null, Undefined, Number, BigInt, String, Symbol 和 Object。
-
原始值( primitive values )
除 Object 以外的所有类型都是不可变的(值本身无法被改变)。例如,与 C 语言不同,JavaScript 中字符串是不可变的(译注:如,JavaScript 中对字符串的操作一定返回了一个新字符串,原始字符串并没有被改变)。我们称这些类型的值为“原始值”。
-
数值(number):整数和小数(比如1和3.14)
-
字符串(string):文本(比如Hello World)。
-
布尔值(boolean):表示真伪的两个特殊值,即true(真)和false(假)
-
undefined:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值
-
null:表示空值,即此处的值为空。
-
Symbol:符号(Symbols)是ECMAScript 第6版新定义的。符号类型是唯一的并且是不可修改的, 并且也可以用来作为Object的key的值
-
BigInt:BigInt类型是 JavaScript 中的一个基础的数值类型,可以用任意精度表示整数。
-
对象(object):各种值组成的集合。
主要数据类型分析
1. null与undefined
都可以表示“没有”,含义非常相似。将一个变量赋值为undefined或null,老实说,语法效果几乎没区别。 对于null和undefined,大致可以像下面这样理解。
null表示空值,即该处的值现在为空。调用函数时,某个参数未设置任何值,这时就可以传入null,表示该参数为空。比如,某个函数接受引擎抛出的错误作为参数,如果运行过程中未出错,那么这个参数就会传入null,表示未发生错误。
undefined表示“未定义”,下面是返回undefined的典型场景。
// 变量声明了,但没有赋值
var i;
i // undefined
// 调用函数时,应该提供的参数没有提供,该参数等于 undefined
function f(x) {
return x;
}
f() // undefined
// 对象没有赋值的属性
var o = new Object();
o.p // undefined
// 函数没有返回值时,默认返回 undefined
function f() {}
f() // undefined
2. 布尔值
-
布尔值代表“真”和“假”两个状态。“真”用关键字true表示,“假”用关键字false表示。布尔值只有这两个值。
-
下列运算符会返回布尔值:
前置逻辑运算符: ! (Not)
相等运算符:===,!==,==,!=
比较运算符:>,>=,<,<=
-
如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false,其他值都视为true。
undefined,null,false,0,NaN,""或''(空字符串)
-
布尔值往往用于程序流程的控制,请看一个例子。
if ('') { console.log('true'); } // 没有任何输出上面代码中,if命令后面的判断条件,预期应该是一个布尔值,所以 JavaScript 自动将空字符串,转为布尔值false,导致程序不会进入代码块,所以没有任何输出。
-
注意,空数组([])和空对象({})对应的布尔值,都是true。
if ([]) { console.log('true'); } // true if ({}) { console.log('true'); } // true
3. 字符串
- 字符串就是零个或多个排在一起的字符,放在单引号或双引号之中。
'abc' "abc" - 单引号字符串的内部,可以使用双引号。双引号字符串的内部,可以使用单引号。
上面两个都是合法的字符串。'key = "value"' "It's a long journey"
转义
-
反斜杠(\)在字符串内有特殊含义,用来表示一些特殊字符,所以又称为转义符。
-
需要用反斜杠转义的特殊字符,主要有下面这些。
\0 :null(\u0000)
\b :后退键(\u0008)
\f :换页符(\u000C)
\n :换行符(\u000A)
\r :回车键(\u000D)
\t :制表符(\u0009)
\v :垂直制表符(\u000B)
\' :单引号(\u0027)
\" :双引号(\u0022)
\\ :反斜杠(\u005C)
上面这些字符前面加上反斜杠,都表示特殊含义。
其他的数据类型暂时不说了,说点其他的吧,对象需要单独写
数值的进制
使用字面量(literal)直接表示一个数值时,JavaScript 对整数提供四种进制的表示方法:十进制、十六进制、八进制、二进制。
- 十进制:没有前导0的数值。
- 八进制:有前缀0o或0O的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。
- 十六进制:有前缀0x或0X的数值。
- 二进制:有前缀0b或0B的数值。