JavaScript类型系统

165 阅读1分钟

概要

  • 强类型与弱类型
  • 动态类型与静态类型
  • JavaScript类型系统的特征

强类型和弱类型(类型安全)

弱类型带来的问题

  1. 类型异常运行时才能发现
const obj = {}

// obj.foo()

setTimeout(() => {
  obj.foo()
}, 1000000)
  1. 类型不明确导致函数功能发生改变
function sum (a, b) {
  return a + b
}

console.log(sum(100, 100))
console.log(sum(100, '100'))
  1. 对象索引器的错误用法
const obj = {}

obj[true] = 100 // 属性名会自动转换为字符串

console.log(obj['true'])

强类型的优势

强类型具有更强的类型约束,不允许有任何的隐式类型转换

  1. 错误更早暴露
  2. 代码更智能,编码更准确(编译器提示)
  3. 重构更可靠(对象属性的增删改)
  4. 减少了代码层面不必要的类型判断
function sum (a, b) {
  if (typeof a !== 'number' || typeof b !== 'number') {
    throw new TypeError('arguments must be a number')
  }

  return a + b
}

静态类型和动态类型(类型检查)

静态类型

一个变量声明时它的类型就是明确的,声明过后,类型不允许修改。

动态类型

运行时才能明确变量类型,变量的类型随时可以改变。

JavaScript类型系统的特征

弱类型 且 动态类型