一. 从编程语言的分类来看Javascript
1. 该语言是否允许随意的隐式类型转换?
允许随意的隐式类型转换:弱类型(Javascript)
不允许随意的隐式类型转换:强类型
2. 该语言是否允许随意地修改变量的类型?
允许随意地修改变量类型:动态类型(Javascript)
不允许随意地修改变量类型:静态类型
动态类型的语言,直到运行阶段才能确定变量的类型,变量的类型还可以随时发生变化。
3. Javascript是一门弱类型、动态类型的语言
原因:早前的Javascript应用十分简单 且 Javascript语言不经编译直接执行故没有类型检查的时机
4. Javascript语言的问题(弱类型语言的问题)
const obj = {}
// 有些代码只有等到执行时才会报错
obj.foo()
function sum(a, b){
return a + b
}
console.log(sum(100, 100)) // 200
// 对函数的调用方式可能错误
console.log(sum(100, '100')) // 100100
// 若对对象的键值只能是字符串这点不了解,可能产生疑惑
const obj = {}
obj[true] = 20
console.log(obj['true']) // 20
5. 强类型语言的优势
错误可以更早暴露
代码更智能,编码更准确
重构更牢靠
减少不必要的类型判断
综上,这就是一些试图把Javascirpt语言升级为强类型语言的原因,比如 TypeScript、Flow(一个 JavaScript 静态类型检测器) 出现的原因。