【typescript入门手册】为什么说js是动态类型语言呢?

简介: 【typescript入门手册】为什么说js是动态类型语言呢?

JavaScript被称为动态类型语言,是因为它的类型在运行时决定,并且可以在运行时动态改变变量的类型。以下是一些示例来说明JavaScript的动态类型特性:


  1. 变量类型的弱化:


let x = 10; // x被推断为number类型
x = "Hello"; // 现在x的类型变为string
x = true; // 这里x的类型变为boolean


在JavaScript中,变量的类型可以根据赋值的值自动推断,并且可以在运行时改变变量的类型。


  1. 动态属性:


let person = {
  name: "John",
  age: 30,
};
console.log(person.name); // 输出 "John"
person.name = "Jane";
console.log(person.name); // 输出 "Jane"
person.address = "New York";
console.log(person.address); // 输出 "New York"


在JavaScript中,对象的属性可以在运行时动态地添加或修改。


  1. 动态函数参数:


function add(a, b) {
  return a + b;
}
console.log(add(2, 3)); // 输出 5
console.log(add("Hello", "World")); // 输出 "HelloWorld"
console.log(add(2, "Hello")); // 输出 "2Hello"


在JavaScript中,函数的参数类型并没有在定义时指定,可以接受不同类型的参数并执行不同的操作。


这些示例展示了JavaScript的动态类型特性,变量可以根据赋值动态改变类型,对象的属性可以在运行时动态添加或修改,函数的参数可以接受不同类型的值。这种动态性赋予了JavaScript更大的灵活性,在某些情况下也增加了一些开发的挑战。

ts VS js (动态vs静态)


动态类型语言直接运行时对变量检测,无需声明变量类型

静态类型语言需声明变量类型,在编译时对变量类型检测


JavaScript被称为动态类型语言,因为它在运行时对变量的类型进行推断和处理。这意味着你可以在运行时改变变量的类型,而不需要提前进行类型声明。以下是一些JavaScript的动态类型示例:


let variable = 10; // 变量可以被赋予一个数字类型的值
console.log(variable); // 输出: 10
variable = "Hello"; // 变量可以被赋予一个字符串类型的值
console.log(variable); // 输出: Hello
variable = true; // 变量可以被赋予一个布尔类型的值
console.log(variable); // 输出: true


相比之下,TypeScript是静态类型语言,它在编译时就会对变量的类型进行检查,并在代码中明确声明变量的类型。这使得在开发阶段可以发现潜在的类型错误。以下是一些TypeScript的静态类型示例:


let variable: number = 10; // 变量被声明为数字类型
console.log(variable); // 输出: 10
variable = "Hello"; // 错误:不能将字符串类型赋给数字类型的变量
let greeting: string = "Hello";
console.log(greeting); // 输出: Hello
greeting = true; // 错误:不能将布尔类型赋给字符串类型的变量


在这些示例中,你可以看到TypeScript代码中的变量需要在声明时指定类型,并且在编译过程中会对类型错误进行检查。如果违反了类型规定,TypeScript编译器会发出错误提示。

这种类型检查能够在开发阶段捕获潜在的错误,帮助提高代码的健壮性和可靠性,减少运行时错误。


typeScript  强是型语言还是弱类型语言?

类型系统按照「是否允许隐式类型转换」来分类,可以分为强类型和弱类型。

TypeScript 是完全兼容 JavaScript 的,它不会修改 JavaScript 运行时的特性,所以它们都是弱类型

如下在typescript中运行:

console.log(1 + '1');
// 打印出字符串 '11'

python 是强类型语言,如下分别执行 1+1 、1+"1",1+1 相同类型计算正常运行,当运行 number 类型 1 + string 1 时,报错。

强制类型转换后 可正常输入

typescript 可以借助自身类型系统, 配合 eslint 的代码检查能力,跟进一步向强类型语言靠近。

相关文章
|
30天前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
232 2
|
4天前
|
JavaScript 安全 前端开发
TypeScript类型声明:基础与进阶
通过本文的介绍,我们详细探讨了TypeScript的基础与进阶类型声明。从基本数据类型到复杂的泛型和高级类型,TypeScript提供了丰富的工具来确保代码的类型安全和可维护性。掌握这些类型声明能够帮助开发者编写更加健壮和高效的代码,提高开发效率和代码质量。希望本文能为您在使用TypeScript时提供实用的参考和指导。
11 2
|
10天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
10天前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
17 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
19天前
|
监控 前端开发 JavaScript
React 静态网站生成工具 Next.js 入门指南
【10月更文挑战第20天】Next.js 是一个基于 React 的服务器端渲染框架,由 Vercel 开发。本文从基础概念出发,逐步探讨 Next.js 的常见问题、易错点及解决方法,并通过具体代码示例进行说明,帮助开发者快速构建高性能的 Web 应用。
50 10
|
18天前
|
JavaScript 开发者
在 Babel 插件中使用 TypeScript 类型
【10月更文挑战第23天】可以在 Babel 插件中更有效地使用 TypeScript 类型,提高插件的开发效率和质量,减少潜在的类型错误。同时,也有助于提升代码的可理解性和可维护性,使插件的功能更易于扩展和升级。
|
16天前
|
数据采集 存储 JavaScript
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
本文介绍了如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。Puppeteer作为一个强大的Node.js库,能够模拟真实浏览器访问,支持JavaScript渲染,适合复杂的爬取任务。文章详细讲解了安装Puppeteer、配置代理IP、实现爬虫代码的步骤,并提供了代码示例。此外,还给出了注意事项和优化建议,帮助读者高效地抓取和分析招生数据。
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
|
29天前
|
JavaScript 前端开发
TypeScript【类型别名、泛型】超简洁教程!再也不用看臭又长的TypeScript文档了!
【10月更文挑战第11天】TypeScript【类型别名、泛型】超简洁教程!再也不用看臭又长的TypeScript文档了!
|
1月前
|
JavaScript 前端开发 安全
TypeScript【基础类型】超简洁教程!再也不用看臭又长的TypeScript文档了!
【10月更文挑战第9天】TypeScript【基础类型】超简洁教程!再也不用看臭又长的TypeScript文档了!
|
17天前
|
JavaScript 前端开发 安全
TypeScript进阶:类型系统与高级类型的应用
【10月更文挑战第25天】TypeScript作为JavaScript的超集,其类型系统是其核心特性之一。本文通过代码示例介绍了TypeScript的基本数据类型、联合类型、交叉类型、泛型和条件类型等高级类型的应用。这些特性不仅提高了代码的可读性和可维护性,还帮助开发者构建更健壮的应用程序。
22 0