Javascript类型系统
强类型与弱类型
从类型安全的角度出发,编程语言分为强类型和弱类型:
- 强类型:语言层面限制函数的实参类型必须与形参类型相同
- 弱类型:语言层面不限制形参的类型
强类型有更强的类型约束,不允许有任意类型的隐式类型转换;而弱类型中几乎没有什么约束,允许任意的数据隐式类型转换。
变量类型允许随时改变的特点,不是强弱类型的差异。
静态类型与动态类型
从类型检查的角度出发,编程语言分为静态类型和动态类型:
- 静态类型:一个变量声明时,它的类型就是明确的,并且变量声明后,它的类型就不允许再修改。
- 动态类型:再运行阶段才能明确变量的类型,并且变量的类型随时可以改变,换句话说,动态类型语言中的变量没有类型,而变量中存放的值是有类型的。
常见语言分类
JavaScript类型系统特征
由于早前的JavaScript应用简单,并且JavaScript是一门脚本语言,没有编译环节,所以JavaScript作为一门弱类型且动态类型的语言,缺失了类型系统的可靠性。
弱类型的问题
部分错误需等到运行时才报错,存在隐患
在上面的代码中,定义了一个对象,然后调用对象中不存在的方法,由于弱类型的原因,上面的代码在语法上是可行的,并没有报错,而是等到了运行阶段才报错。
意料之外的结果
在上面的代码中,函数sum被设计用来计算两数之和,由于类型的不确定性,在传入错误类型后,代码没有报错,并产生了意料之外的结果。