语言类型

简介: 语言类型

概述

TypeScript 是一门基于 Javascript 的编程语言,其重点解决了 Javascript 类型系统的问题,TypeScript 可以大大提高代码的可靠程度,这里重点探讨 Javascript 自有类型系统的问题。

类型系统

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

强类型与弱类型

从类型安全来说,编程语言分为强类型与弱类型。其中,

  • 强类型:语言层面限制函数的实参类型必须与形参类型相同
    网络异常,图片无法展示
    |
  • 弱类型:弱类型语言层面不会限制实参的类型
    网络异常,图片无法展示
    |

由于这种强弱类型之分根本不是某一个权威机构的定义,因此后人对于两者的界定细节会有不一样的理解。但整体上其界定方式基本是描述:强类型有更强的类型约束,而弱类型中几乎没有什么约束。或者说强类型语言中不允许任意的隐式类型转换,而弱类型语言中允许任意的隐式类型转换。

注意:变量类型允许随时改变的特点,不是强弱类型的差异。比如 python 是强类型语言,但是变量类型允许随时改变。

静态类型与动态类型

  • 静态类型:一个变量声明时它的类型就是明确的,声明过后,它的类型就不允许再修改。
  • 动态类型:运行阶段才能明确变量类型,而且变量的类型随时可以改变。动态类型语言中的变量没有类型,变量中存放的值是有类型的。

网络异常,图片无法展示
|
总结:从类型安全角度,语言类型分为强类型与弱类型,两者的区别就是是否允许随意的隐式类型转换。从类型角度,分为静态类型和动态类型,两者区别是是否允许随时修改变量的类型。

Javascript 自有类型系统的问题

javascript 是动态类型且弱类型的,在灵活多变的表象背后,却缺失了类型系统的可靠性,在代码中遇到变量会担心是否是需要的类型。

为什么 Javascript 不是强类型或者静态类型?

  • 1.早前的 Javascript 应用简单,类型限制很多余
  • 2.Javascript 没有编译环节,而静态类型是在编译阶段去做类型检查。

在大规模应用下,以上的“优势”就变成了短板。

弱类型的问题

  • 1.代码运行时才会发现类型异常
  • 2.由于允许隐式类型转换,就可能因为传入的参数类型不确定而造成结果跟预期不一样。
  • 3.在 js 中,普通对象的 key 会被转换成字符串,会容易造成对索引的用法错误
const obj = {}
obj[true]=1000
console.log(obj['true'])
复制代码

虽然弱类型的问题在代码量小的情况下可以通过约定方式去规避,而对于周期长的大规模项目,君子约定有隐患,强制要求有保障。

强类型的优势

  • 1.错误更早暴露
  • 2.代码更智能,编码更准确(比如智能提示插件)
  • 3.重构更牢靠
  • 4.减少不必要的类型判断



相关文章
|
安全 Cloud Native 数据安全/隐私保护
带你读《2022龙蜥社区全景白皮书》——5.1.5 AMD安全虚拟化的增强
带你读《2022龙蜥社区全景白皮书》——5.1.5 AMD安全虚拟化的增强
472 98
|
Java API Maven
一篇文章讲明白Jetty使用教程(一)——开始使用Jetty
一篇文章讲明白Jetty使用教程(一)——开始使用Jetty
817 0
|
Linux 虚拟化 Windows
嵌入式Linux开发环境搭建之三---网络的设置
嵌入式Linux开发环境搭建之三---网络的设置
344 0
|
安全 大数据 网络安全
阿里云国际版免实名注册账号,支持多种支付方式
阿里云国际版账号是需要通过阿里云渠道商来实现注册认证的,本篇文章就介绍一家这样的阿里云国际版渠道商1788yun.com,通过它,实现无需PayPal信用卡,无门槛注册买阿里云国际版的产品与服务。
阿里云国际版免实名注册账号,支持多种支付方式
|
XML JSON Java
利器 | REST Assured 实践(二):断言实现
![](https://ceshiren.com/uploads/default/original/3X/2/5/25afa1e0917e20f13ac561eaae3bbe63318959d1.jpeg) 在上一篇文章中,我们初步探讨了 REST Assured 的应用实践,还有很多丰富的用法需要慢慢探索研究。而 REST Assured 提供的完整断言手段,是测试工程师最常用最重要的功能之
|
Java API
Java如何实现“三天打鱼两天晒网”练习题?
Java如何实现“三天打鱼两天晒网”练习题?
343 0
|
Linux Android开发
【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限 | 进程对应的主线程寄存器读写 | 单步调试 |ptrace 函数族状态转换 )
【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限 | 进程对应的主线程寄存器读写 | 单步调试 |ptrace 函数族状态转换 )
422 0
【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限 | 进程对应的主线程寄存器读写 | 单步调试 |ptrace 函数族状态转换 )
|
弹性计算 大数据 Linux
飞天加速计划初体验
最近因需要使用云服务器来学习,老师让我们用这个阿里云类进行相关的学习,让我们先进行免费的使用进行学习,慢慢了解,毕竟对于首次接触的事物都是了解为主不会投入大量资金。阿里云平台有详细的教程,让初学者能十分轻松的进行学习。飞天加速计划是个好想法,可以让我们这些学生进行学习,制作出自己的网站。让我在暑假对计算机有了浓厚的兴趣,于是在阿里云我选择了飞天加速计划,学习大数据和服务器啥的,让自己get到更多的知识~
|
存储 API 调度
[工作流]一个任务的一辈子
参考: [https://yuque.antfin-inc.com/hanjun.hw/yvmten2/ido5af](https://yuque.antfin-inc.com/hanjun.hw/yvmten2/ido5af) 引擎相关技术文档 | **流程引擎到平台的mq消息链路** | [https://yuque.antfin-inc.com/hanjun.hw/yvmten2/id
559 0

热门文章

最新文章