【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 的代码检查能力,跟进一步向强类型语言靠近。

相关文章
|
13天前
|
JavaScript 前端开发 开发者
如何在 JavaScript 中处理不同类型的错误?
【10月更文挑战第29天】通过对不同类型错误的准确识别和恰当处理,可以提高JavaScript程序的可靠性和稳定性,减少错误对程序运行的影响。
|
1月前
|
JavaScript 前端开发 安全
深入理解TypeScript:增强JavaScript的类型安全性
【10月更文挑战第8天】深入理解TypeScript:增强JavaScript的类型安全性
45 0
|
12天前
|
JavaScript 前端开发 Java
除了 JavaScript,还有哪些编程语言支持 Set 类型
【10月更文挑战第30天】这些编程语言中的 `Set` 类型虽然在语法和具体实现细节上有所不同,但都提供了类似的集合操作功能,方便开发者在不同的编程场景中处理集合相关的数据和逻辑。
|
13天前
|
存储 JavaScript 前端开发
js的基础类型和引用类型
【10月更文挑战第29天】理解 JavaScript 中的基础类型和引用类型的区别对于正确地编写代码和理解程序的行为非常重要。在实际开发中,需要根据具体的需求合理地选择和使用不同的数据类型,以避免出现一些意想不到的错误和问题。同时,在处理引用类型数据时,要特别注意对象的引用关系,避免因共享引用而导致的数据不一致等问题。
|
17天前
|
Web App开发 JavaScript 前端开发
探索Deno:新一代JavaScript/TypeScript运行时环境
【10月更文挑战第25天】Deno 是一个新兴的 JavaScript/TypeScript 运行时环境,由 Node.js 创始人 Ryan Dahl 发起。本文介绍了 Deno 的核心特性,如安全性、现代化、性能和 TypeScript 支持,以及开发技巧和实用工具。Deno 通过解决 Node.js 的设计问题,提供了更好的开发体验,未来有望进一步集成 WebAssembly,拓展其生态系统。
|
21天前
|
JavaScript 安全 前端开发
探索Deno 1.x:安全JavaScript/TypeScript运行时的新篇章
【10月更文挑战第21天】Deno 1.x 是由Node.js创始人Ryan Dahl发起的项目,旨在解决Node.js的安全和模块化问题。Deno 1.x 版本带来了统一的运行时、默认安全、ES模块支持和内置TypeScript支持等新特性。其安全模型基于最小权限原则、沙箱环境和严格的远程代码执行控制,适用于Web服务器、命令行工具、桌面和移动应用及微服务开发。本文探讨了Deno 1.x的核心特性、安全模型及其在现代Web开发中的应用。
|
27天前
|
JavaScript 安全 前端开发
掌握Deno:新一代安全的JavaScript和TypeScript运行时
【10月更文挑战第15天】Deno是由Node.js创始人Ryan Dahl发起的新一代JavaScript和TypeScript运行时,旨在解决Node.js的设计问题,提供更安全、现代的开发体验。本文介绍Deno的核心特性、优势及使用方法,包括安全性、统一的运行时、现代Web标准和内置工具等,帮助开发者快速上手Deno,适用于Web开发、工具开发和教育等领域。
|
25天前
|
JavaScript 前端开发 安全
探索Deno:现代JavaScript/TypeScript运行时的崛起
【10月更文挑战第17天】Deno是由Node.js创始人Ryan Dahl发起的现代JavaScript/TypeScript运行时,强调安全性、TypeScript原生支持、统一的运行时环境和现代HTTP客户端。本文深入探讨了Deno的特性、优势及其在业界的应用,展示了它如何提升开发效率和代码安全性。
|
26天前
|
JavaScript 前端开发 安全
探索Deno 1.x:新一代JavaScript/TypeScript运行时
【10月更文挑战第16天】Deno 1.x是由Node.js创始人Ryan Dahl发起的新一代JavaScript/TypeScript运行时,自2018年首次亮相以来备受关注。本文介绍了Deno 1.x的新特性,如标准化模块、更严格的安全模型、改进的TypeScript支持和插件系统,探讨了其在现代Web开发中的潜在影响,并提供了如何开始使用Deno进行开发的指南。
|
29天前
|
JavaScript 前端开发 测试技术
JavaScript与TypeScript:为何TypeScript成为大型项目的首选
JavaScript与TypeScript:为何TypeScript成为大型项目的首选
28 1