强弱类型、动态类型与静态类型初探

一、强弱类型

类型安全:强类型、弱类型;1974年提出

强类型:语言层面限制实参类型必须与形参类型相同,不允许任意的隐式类型转换,语法阶段就会校验类型去报错

弱类型则与上述相反。弱类型是在运行阶段报错

变量类型允许随时改变不是强弱类型鉴定方式,python是强类型

二、动态类型与静态类型
动态类型:运行时才会确定变量类型,变量没有类型,变量的值才有类型

静态类型:变量类型确定后不可更改

弱类型是动态类型,强类型是静态类型说法是❌的

JS是弱类型和动态类型

为什么JS 不是强类型/静态类型?

1.早前应用简单,设置成强类型/静态类型反而复杂

2.JS是脚本语言,没有编译环节,静态类型语言需要在编译阶段做类型检查,对JS没有意义

弱类型问题:

1.代码隐患

const obj = ()
obj.foo() // 如果测试时没有测试到这一步会留下代码隐患;如果是强类型在语法阶段就会发现问题

2.类型不明确造成函数功能改变

function sum(a, b){

 return a+b

}

console.log(sum(10, 100))

console.log(sum(10, '100'))
// 弱类型传值类型不同导致结果不同,定义成强类型强制为数值类型避免

3.君子约定有隐患,强制要求有保障

const obj = []

obj[true] =100 // obj的key会自动转为字符串

console.log(obj['true']) 

强类型的优势:

1.错误更早暴露

2.代码更加智能,编码更准确

3.重构更牢靠,如删除对象中某成员,修改对象属性名(如果别地方用到了,无法定位到)

4.减少不必要的类型判断

function sun(a, b){
 // 如果是强类型则不需要下方的校验
 if(typeof a !=='number' || typeof b !== 'number'){
  throw '类型错误'
  }
}

你可能感兴趣的:(强弱类型、动态类型与静态类型初探)