JS数据类型

175 阅读3分钟

JS有七种数据类型
五个基本, 两个空, 一个复杂
分别是:Number, String, Bool, Symbol, BigInt, undefined, null, Object

1 五种基本数据类型

1.1 数字 Number

JS用64位浮点数存储Number,其中符号占1位,指数占11位(-1023~1024),有效数字占52位

1.1.1 Number的特殊值

  1. 0的类型有 0+0-0,注意:
1/01/+0 === Infinity1/-0 === -Infinity
  1. 无穷大,分为 Infinity+Infinity-Infinity
  2. 无法表示的数字 NaN (Not a Number) 但是NaN是一个数字,注意:
NaN === NaN // fasle

1.1.2 Number的范围和精度

Number.MAX_VALUE: 1.79e + 308 即 1.797x10^308
Number.MIN_VALUE: 5e - 324 即 5x10^-324

Number最多可以表示52+1=53个二进制数字,也就是15位整数,16位整数90开头也能精确表示,但是像9110000000000001就存不下来了

1.2 字符串 String

1.2.1 写法(ES6)

  1. 单引号 '你好'
  2. 双引号 "你好"
  3. 反引号 `你好` 如果要在单引号里包含单引号怎么办?
    it's ok 可以写成
    'it\'s ok'
    "it's ok"
    `it's ok`

1.2.2 转义

\' 表示 '
\\" 表示"
\n表示换行
\r表示回车
\t表示制表符

1.2.3 多行字符串(回车)

let s = `这样是
        可以
        的
        `

1.2.4 字符串长度

注意: `\\\\\\`.length === 3
可以通过下标来读取字符string[index] 例如:

let str = 'hello'
str[0] // "h"

1.3 Symbol 符号(ES6)

ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。
Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。例如:

let s = Symbol();
typeof s // "symbol"

1.4 布尔 Boolean

1.4.1 下列运算会得到bool值

  1. 否定运算 !value
  2. 相等运算 1 !== 2
  3. 比较运算 1 > 2

1.4.2 五个falsy值

相当于是false但又不是false的值 分别是undefinednullNaN0''

1.5 BigInt (ES6)

BigInt 可以表示任意大的整数。

2 null和undefined

习惯上,把非对象的空值写为undefined,把对象空值写为null

相同点:

  • if判断语句中,值都默认为 false
  • 大体上两者都是代表 不同点:
  • null转为数字类型值为0,而undefined转为数字类型为 NaN
  • 如果一个变量声明了但是没有赋值,这时默认值为undefined
  • null是一个很特殊的对象,最为常见的一个用法就是作为参数传入(说明该参数不是对象)
  • 设置为null的变量或者对象会被内存收集器回收

3 类型转换

3.1 Number 转 String

语法

  • String(n)
  • n +'' 例如
let n = 123
String(n) // "123"
n + '' // "123"

3.2 String 转 Number

语法

  • Number(s)
  • parseFloat(s)
  • s - 0 例如
let str = "123"
Number(str) // 123
parseFloat(str) // 123
str - 0 // 123

3.3 X 转 Boolean

语法

  • Boolean(x)
  • !!x 例如
Boolean(1) // true
Boolean(0) // false
!!1 // true
!!0 // false

3.4 X 转 String

语法

  • String(x)
  • x.toString() 例如
true.toString() // "true"

注意1.toString()有bug,改为1..toString()或者(1).toString()