强类型与弱类型(类型安全角度)
强类型:语言层面限制函数的实参类型必须和形参类型相同
弱类型:不会限制实参必须与形参类型相同
function sum (a, b) {
return a + b
}
console.log(sum(100, 100)) // 200
console.log(sum(100, '100')) // 100100
强类型不允许任意形式的类型转换,而弱类型语言则允许任意的数据隐式类型转换
静态类型与动态类型(类型检查角度)
静态类型:变量声明时它的类型就是明确的,声明过后就不能在修改
动态类型:只有在运行阶段才能明确变量类型,变量类型可以随时更改
弱类型的问题
JavaScript
是弱类型且动态类型,所以没有任何类型限制,但缺失了类型系统的可靠性
-
必须等到运行阶段才能发现异常
const obj = {} // obj.foo()
-
函数功能可能发生改变
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'])
强类型的优势
- 错误更早暴露
- 代码更智能,编码更准确
- 重构更牢靠
- 减少代码层面不必要的类型判断
网友评论