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

相关文章
|
3月前
|
前端开发 JavaScript 开发者
JavaScript:无处不在的Web语言
JavaScript:无处不在的Web语言
|
3月前
|
JavaScript 前端开发 安全
TypeScript 终极入门指南:从零到精通 🚀
TypeScript是JavaScript的超集,添加静态类型系统,提升代码健壮性与可维护性。本教程涵盖基础类型、高级特性、面向对象编程及最佳实践,配代码示例与图解,助你快速掌握TS核心概念,轻松进阶前端开发!🎉
456 2
TypeScript 终极入门指南:从零到精通 🚀
|
5月前
|
JavaScript 前端开发
揭秘 TypeScript 条件类型:超越简单类型检查
揭秘 TypeScript 条件类型:超越简单类型检查
|
5月前
|
JavaScript 安全 索引
TypeScript 高级类型工具:Partial, Required, Record 的妙用与陷阱
TypeScript 高级类型工具:Partial, Required, Record 的妙用与陷阱
|
5月前
|
JavaScript 安全 IDE
TypeScript 类型体操:别让 `any` 毁了你的安全网!
TypeScript 类型体操:别让 `any` 毁了你的安全网!
|
3月前
|
JavaScript 前端开发 IDE
TypeScript vs. JavaScript:技术对比与核心差异解析
TypeScript 作为 JavaScript 的超集,通过静态类型系统、编译时错误检测和强大的工具链支持,显著提升代码质量与可维护性,尤其适用于中大型项目和团队协作。相较之下,JavaScript 更灵活,适合快速原型开发。本文从类型系统、错误检测、工具支持等多维度对比两者差异,并提供技术选型建议,助力开发者合理选择。
652 1
|
9月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
474 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
5月前
|
JavaScript 安全 编译器
TypeScript 类型守卫:让你的类型系统更智能
TypeScript 类型守卫:让你的类型系统更智能
|
10月前
|
存储 安全 JavaScript
TypeScript-内置应用程序类型-Recode
通过使用 `Record` 类型,开发者可以显著提升代码的安全性和可维护性。无论是配置对象、字典结构还是动态表单,`Record` 类型都提供了一个简洁、类型安全的解决方案。
443 82
|
9月前
|
JSON JavaScript 前端开发
菜鸟之路Day23一一JavaScript 入门
本文介绍了 JavaScript 的基础内容,包括 JS 的引入方式、基础语法、数据类型、运算符、类型转换、函数、对象(如 Array、String、自定义对象、JSON、BOM 和 DOM)、事件监听,以及 Vue 框架的初步使用。重点讲解了内部和外部脚本的引入、变量声明(var、let、const)、常见输出语句、数组与字符串的操作方法、DOM 操作及事件绑定,并通过实例展示了 Vue 的双向数据绑定和常用指令(v-bind、v-model、v-on、v-if、v-for 等)。
228 7

热门文章

最新文章