- 强类型与弱类型(类型安全)
- 强类型:语言层面限制函数的实参类型必须与形参类型相同
- 强类型有更强的语言约束,而弱类型中几乎没有什么约束
- 强类型中不允许有任意的隐式类型转换 他俩区别是否允许随意的隐式类型转换
- 静态类型与动态类型(类型检查)
- 静态类型:一个变量生命时它的类型就是明确的,声明过后,它的类型就不允许再修改
- 动态类型:运行阶段才能明确变量的类型,而且变量的类型随时可以改变
- 变量没有类型,变量中存放的值是有类型的 他俩区别是否允许变量随时修改类型
javascript编写大型应用时的弱类型的问题
- 运行时不能看到语法错误
1.类型异常
const obj = {}
obj.foo()
2.函数功能被改变
function sum(a,b){
return a + b
}
console.log(sum(100,100)) //200
console.log(sum(100,'100'))//'100100'
3.对象索引器错误的用法
const obj = {}
obj[true] = 100
console.log(obj['true'])
强类型的优势
- 一、错误更早暴露
- 编码阶段报错,不用运行阶段再查找错误
- 二、代码更智能,编码更准确
- 三、重构更牢靠
- 四、减少不必要的类型判断
1.
function render(elemnet){
element.className = 'container'
element.innerHtml = 'hello world'//这里innerHtml写错了也不会报错,但强类型会编译时就报错
}
2.
const util = {
aaa:()=>{
}
}
弱类型中,这里aaa如果你想改名字,但是项目中很多地方都用到了,不方便改。
但强类型,如果改了,编译时就会报错,改了以后会更方便的轻松的定位去修改全部的变量名。
3.判断必须是数字,强类型没必要做这样的判断
function sum(a,b){
if(typeof a !== 'number' || typeof b !== 'number'){
throw new TypeError('arguments must be a number')
}
return a + b
}