重学JavaScript[1] 类型

1/17/2021 JavaScript类型

# 8 种类型

JavaScript 种有 8 种基本的数据类型:

  • number任何类型的数字,包括整数和浮点数,范围±(253-1)
  • bigint任意长度的整数
  • string字符串
  • null显而易见,null
  • undefined未定义的值
  • symbol用于唯一标识符
  • object对象和更复杂的数据结构

# number

number 包括整数、浮点数,可以进行加减乘除等运算

let a = 10
let b = 1.5
console.log(a + b)
// 11.5

除了基本的数,还有InfinityNaN这类特殊数值,可以直接书写它们的字面量

let a = NaN
let b = Infinity

但请注意 js 饱受诟病的精度问题!

console.log(0.1 + 0.2 === 0.3)
// false

# bigint

顾名思义,表示较大的数

let a = 1234567890123456789012345678901234567890n
console.log(typeof a)
// bigint

# string

js 支持单引号和双引号,同时还有``包裹的模板字符串

let name = '王昭君'
console.log(`I am ${name}.`)
// I am 王昭君.

# boolean

布尔类型,这个应该不用多说

# null

null值只属于 null 类型,null 类型只包含null

# undefined

和 null 类似,undefined 类型只包含undefined值,表示变量已被声明但未被赋值

let a
console.log(a)
// undefined

# object

相比上述的数据类型,object 用于储存数据集合或更复杂的实体

object 可以被理解为”对象“:

let o = { a: 'b', c: 'd' }
console.log(typeof o)
// object

但请注意,js 里的数组并不是一个单独的类型!

let l = []
console.log(typeof l)
// object

# symbol

symbol 是 ES6 引入的数据类型,表示全局唯一的值

let s = Symbol('key')
console.log(typeof s)
// symbol

# typeof 运算符

在上面的例子里,我们大量使用了typeof运算符来得出数据的类型

你可以使用typeof xtypeof(x)两种语法,来得到一个表示类型的字符串

但你时常要注意一些特殊情况,比如:

console.log(typeof null)
// object

这是 js 官方承认的一个设计错误,因为null值只属于 null 类型,而不是 object

还有:

function f() {}
console.log(typeof f)
// function

在 js 里并没有特殊的“函数”类型,任何函数都属于 object,然而这也是 js 语言本身的设计问题,但如果你要判断一个变量是否为函数时,这是一个非常有用的特性