一、强弱类型
类型安全:强类型、弱类型;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 '类型错误'
}
}