前言:众所周知,JS中一共有7种数据类型,分别是number、string、boolean、null、undefined、symbol、object。其中前六种是简单数据类型,object对象属于复杂数据类型。本文大致介绍一下5中简单数据类型(symbol是ES6新增的,本文暂不介绍)
1、number 数值类型
- JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是相同的,是同一个数。这就是说,JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)。注:JS中的小数还可以这么写,
.1
表示0.1因此:0.1 + 0.2 === 0.3
这句话是错误的。 - JS中的科学计数法(E大写小写都可以),如
123e3 // 123000
123e-3 // 0.123
- JS中很坑的一点是,有时候你定义的数值并不一定是存储的数值,根本原因是JS中的进制转换机制。
比如0111
会识别为73,因为它将其识别成了8进制进行存储,然后用十进制展示出来。
其中:
十进制:没有前导0的数值。
八进制:有前缀0o或0O的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。
十六进制:有前缀0x或0X的数值。
二进制:有前缀0b或0B的数值。 - 非数值NaN:NaN是 JavaScript 的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。需要注意的是
NaN === NaN
这句话是错误的。
非数值NaN可以用isNaN()来检测数值是否为非数值
2、string 字符串类型
字符串就是零个或多个排在一起的字符,放在单引号或双引号之中。
- 多行文本输入(即字符串需要包含回车)
建议使用的方法:连接运算符(+)连接多个单行字符串,将长字符串拆成多行书写,输出的时候是单行。 - 转义:反斜杠(\)在字符串内有特殊含义,用来表示一些特殊字符,所以又称为转义符。主要的有以下几种
\0
:null(\u0000)
\b
:后退键(\u0008)
\f
:换页符(\u000C)
\n
:换行符(\u000A)
\r
:回车键(\u000D)
\t
:制表符(\u0009)
\v
:垂直制表符(\u000B)
\'
:单引号(\u0027)
\"
:双引号(\u0022)
\\
:反斜杠(\u005C)
- 字符串和数组一样是有length属性的,但该属性是无法改变的。
- 字符集。需要注意的是:
JavaScript 对 UTF-16 的支持是不完整的,由于历史原因,只支持两字节的字符,不支持四字节的字符。这是因为 JavaScript 第一版发布的时候,Unicode 的码点只编到U+FFFF,因此两字节足够表示了。后来,Unicode 纳入的字符越来越多,出现了四字节的编码。但是,JavaScript 的标准此时已经定型了,统一将字符长度限制在两字节,导致无法识别四字节的字符。上一节的那个四字节字符𝌆,浏览器会正确识别这是一个字符,但是 JavaScript 无法识别,会认为这是两个字符。
- Base转码
有时,文本里面包含一些不可打印的符号,比如 ASCII 码0到31的符号都无法打印出来,这时可以使用 Base64 编码,将它们转成可以打印的字符。另一个场景是,有时需要以文本格式传递二进制数据,那么也可以使用 Base64 编码。
btoa():任意值转为 Base64 编码
atob():Base64 编码转为原来的值
3、boolean 布尔类型
Boolean类型只有两个值,分别是true
和false
。
布尔值代表“真”和“假”两个状态。“真”用关键字true表示,“假”用关键字false表示。布尔值只有这两个值。
其中,如果需要将各种类型的数据转换成boolean类型,以下几种会转换为false,其余的都是true:
undefined、null、false
数值0、非数值NaN、空字符串""或''
4、null && undefined
这两种数值类型都用来表示变量没有值,但有以下区别以及一些需要注意的地方:
- 如果变量没有值,如
var a;
则变量a为undefind - null 一般表示空对象,比如声明了一个对象但不想给值,可以设置其为
- 非空对象(如变量)暂时不给值,可以设置其为
var a = undefined;
但由于第1条,不给确定的值变量的值会默认为undefined,所以可以直接只声明即可,如var a ;
5、typeof 运算符
typeof运算符可以确定一个值到底是什么数据类型。
需要注意的是null的数据类型并不是object对象(原因见①),以及function的数据类型是object对象,function本身不是一种数据类型
①:1995年的 JavaScript 语言第一版,只设计了五种数据类型(对象、整数、浮点数、字符串和布尔值),没考虑null,只把它当作object的一种特殊值。后来null独立出来,作为一种单独的数据类型,为了兼容以前的代码,typeof null返回object就没法改变了。
网友评论