JavaScript类型系统特征、强类型与弱类型、静态类型与动态类型

TypeScript

解决JavaScript类型系统的问题

类型系统
强类型与弱类型(类型安全)
静态类型与动态类型(类型检查)

它们分别从类型安全与类型检查两个维度去区分了不同的编程语言

强、弱类型区别
  • 强类型–语言层面限制函数的实参类型必须与形参类型相同。
  • 弱类型–语言层面不会限制实参的类型。
  • 由于这种强弱类型之分根本不是某一个权威机构的定义。
  • 强类型有更强的类型约束,而弱类型中几乎没有什么约束。
  • 强类型语言中不允许任意的数据隐式类型转换。
  • 弱类型语言中允许任意的数据隐式类型转换。

运行阶段出现报错的语法错误,不是强类型,强类型的语言层面指的是语法上就是错误的,不用运行就会报错。

变量类型允许随时改变的特点,不是强弱类型的差异。

静态、动态类型区别
  • 静态类型–一个变量声明时它的类型就是明确的。声明过后,它的类型就不允许再修改。
  • 动态类型–运行阶段才能够明确变量的类型,而且变量的类型随时可以改变。其实,动态类型语言中的变量没有类型,变量当中存放的值是有类型的。JavaScript就是一门动态类型的语言。
    在这里插入图片描述
弱类型问题
  • JavaScript语言是一门动态的语言,所以在享受灵活多变的优势时,缺失了类型系统的可靠性。
    原因:1.语言特点,语言设计时没有考虑JavaScript能发展成如今这种“盛况”,且早起应用简单,加入类型校验显得多余。2.JavaScript是脚本语言,没有编译环节,所以设计成静态类型语言没有意义的,因为JavaScript根本不会编译(静态语言,会在编译时检查语法,不用等到运行时才抛出语法错误)。
    举个栗子:JavaScript中对象的属性名会自动转化为字符串类型–体现出了弱类型的语言特点。
强类型优势
  • 错误更早暴露 – 可能在编码阶段消灭一大堆语法异常。
  • 代码更智能,编码更准确 – 比如使用编辑器时JavaScript中的智能提示,但是有时编辑器的智能提示识别不出来一个变量中具体的成员,因为不知道这个变量的类型。而使用强类型的话,编辑器时时刻刻都能知道每一个变量的类型,所以可以提供更准确的智能提示。
  • 重构更牢靠 – 比如修改两个月前定义个一个对象当中的属性名,可以快速定位哪些地方用到了这个对象的该属性(一旦修改名称,用到的地方就会报错,可以快速定位到)。
  • 减少不必要的类型判断

待更新…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值