概要
- 强类型与弱类型
- 动态类型与静态类型
- JavaScript类型系统的特征
强类型和弱类型(类型安全)
弱类型带来的问题
- 类型异常运行时才能发现
const obj = {}
// obj.foo()
setTimeout(() => {
obj.foo()
}, 1000000)
- 类型不明确导致函数功能发生改变
function sum (a, b) {
return a + b
}
console.log(sum(100, 100))
console.log(sum(100, '100'))
- 对象索引器的错误用法
const obj = {}
obj[true] = 100 // 属性名会自动转换为字符串
console.log(obj['true'])
强类型的优势
强类型具有更强的类型约束,不允许有任何的隐式类型转换
- 错误更早暴露
- 代码更智能,编码更准确(编译器提示)
- 重构更可靠(对象属性的增删改)
- 减少了代码层面不必要的类型判断
function sum (a, b) {
if (typeof a !== 'number' || typeof b !== 'number') {
throw new TypeError('arguments must be a number')
}
return a + b
}
静态类型和动态类型(类型检查)
静态类型
一个变量声明时它的类型就是明确的,声明过后,类型不允许修改。
动态类型
运行时才能明确变量类型,变量的类型随时可以改变。
JavaScript类型系统的特征
弱类型 且 动态类型