强类型与弱类型

351 阅读2分钟
  • 强类型与弱类型(类型安全)
    • 强类型:语言层面限制函数的实参类型必须与形参类型相同
    • 强类型有更强的语言约束,而弱类型中几乎没有什么约束
    • 强类型中不允许有任意的隐式类型转换 他俩区别是否允许随意的隐式类型转换
  • 静态类型与动态类型(类型检查)
    • 静态类型:一个变量生命时它的类型就是明确的,声明过后,它的类型就不允许再修改
    • 动态类型:运行阶段才能明确变量的类型,而且变量的类型随时可以改变
      • 变量没有类型,变量中存放的值是有类型的 他俩区别是否允许变量随时修改类型

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
}