原始数据类型
# 原始数据类型 (Primitive Data Types)
JavaScript 的类型分为两种:原始数据类型(Primitive Data Types)和对象类型(Object Types)。
在《JavaScript 高级程序设计》中也称为:简单数据类型和复杂数据类型。
原始数据类型包括:布尔值、数值、字符串、null
、undefined
以及 ES6 中的 Symbol (opens new window)。
本节主要介绍前五种原始数据类型在 TypeScript
中的应用。
# 布尔值
布尔值是最基本的数据类型,在 TypeScript
中和 JavaScript
中都是使用 boolean
定义布尔值类型。
let isGoodStudent: boolean = true
注意,使用构造函数 Boolean
实例化的对象不是布尔值:
let isGoodStudent: boolean = new Boolean(true)
// - error TS2322: Type 'Boolean' is not assignable to type 'boolean'
// - 错误编号 TS2322: 'Boolean' 类型与 'boolean' 不匹配
// 'boolean' is a primitive, but 'Boolean' is a wrapper object. Prefer using 'boolean' when possible.
// 'boolean' 是一个原始数据类型,但 'Boolean' 是一个包装对象。尽量使用 'boolean'
那如果我确实想定义一个布尔对象呢?只需要修改成以下代码即可
let isGoodStudent: Boolean = new Boolean(true)
移除 new
后, 得到的就是 boolean
类型的值了,这里的 Boolean(true)
和 new Boolean(true)
区别就是:
Boolean(true)
调用的是转型函数,强制转换参数为boolean
类型后返回,和我们常用的!!true
方法是一样的new Boolean(true)
是创建一个Boolean
对象类型的实例,这个实例的typeof
是object
let isGoodStudent: boolean = Boolean(true)
在 TypeScript
中,boolean
是 JavaScript
的基本类型,而 Boolean
依据使用方式的不同,可以是转型函数,也可以是构造函数。数值、字符串类型和布尔值相同。
# 数值
和 JavaScript
一样,TypeScript
里的所有数字都是浮点数。这些浮点数的类型是 number
。除了支持十进制和十六进制字面量,TypeScript
还支持 ES6
中的二进制和八进制字面量 (opens new window)
let decLiteral: number = 17 // 十进制 17
let hexLiteral: number = 0x11 // 十六进制,十进制的 17
let binaryLiteral: number = 0b10001 // 二进制,十进制的 17
let octalLiteral: number = 0o21 // 八进制,十进制的 17
编译结果:
var decLiteral = 17
var hexLiteral = 0x11
var binaryLiteral = 17
var octalLiteral = 17
十六进制,目前的运行时(浏览器和 nodejs)都是支持的,所以不需要转移为十进制
# 字符串
使用 string
定义字符串类型
let myName: string = 'Yu Xiao Lei'
let age: number = 28
// 模板字符串
let introduce: string = `Hello, my name is ${myName}.
I'll be ${age + 1} years old next month.`
编译结果:
var myName = 'Yu Xiao Lei'
var age = 28
// 模板字符串
var introduce =
'Hello, my name is ' +
myName +
".\nI'll be " +
(age + 1) +
' years old next month.'
变量名不能定义为
name
,TypeScript
编译会报错,报错原因:stackoverflow (opens new window)
# 空值
JavaScript
没有空值概念,在 TypeScript
中,可以用 void
表示没有任何返回值的函数
function myFun(): void {
console.log('I like cats')
}
声明一个 void
类型的变量只能给它赋值 undefine
和 null
let unusable: void = undefined
# Null 和 Undefined
在 TypeScript
中,可以使用 null
和 undefined
定义这两个原始数据类型
let n: null = null
let u: undefined = undefined
默认情况下,null
和 undefined
是所有类型的子类型。就是说你可以把 null
和 undefined
赋值给 number
或者 string
类型的变量。
let n: number = null
let u: string = undefined
编译结果
var n = null
var u = undefined
然而,当你指定了 --strictNullChecks
标记,null
和 undefined
只能赋值给 void
和它们各自。
如果你想传入一个 string
或 null
或 undefined
,你可以使用联合类型 string | null | undefined
TypeScript 官方文档是鼓励尽可能的使用
--strictNullChecks
,这样可以避免出现很多常见的问题