TypeScript跟js,es6这些的区别
TypeScript
一、TypeScript 是什么
想象 JavaScript 是一个自由奔放的艺术家,它在创作(编写代码)时不受太多约束,非常灵活,但有时也容易犯错且难以调试。而 TypeScript 就像是给这位艺术家配备了一套精确的工具和规范,让创作更加严谨、有序。TypeScript 是 JavaScript 的超集,由微软开发,它在 JavaScript 的基础上增加了静态类型系统,能够在代码编译阶段就发现很多类型相关的错误,提高代码的可靠性和可维护性。
二、语法对比
1. 变量声明
- JavaScript:
在 JavaScript 中,变量声明使用var、let或const,变量的类型是动态的,在运行时才能确定。
// 使用 var 声明变量
var num = 10;
num = 'hello'; // 变量类型在运行时改变,不会报错// 使用 let 声明变量
let str = 'world';
str = 20; // 同样可以改变类型,不会报错
- TypeScript:
在 TypeScript 中,你可以为变量指定类型,一旦指定,就不能随意赋值为其他类型的值(除非类型兼容)。
// 指定变量为 number 类型
let num: number = 10;
// num = 'hello'; // 报错,不能将字符串赋值给 number 类型的变量// 指定变量为 string 类型
let str: string = 'world';
// str = 20; // 报错,不能将数字赋值给 string 类型的变量
- ES6:
ES6 引入了let和const来声明变量,主要是解决var存在的变量提升和块级作用域问题,变量类型仍然是动态的。
// 使用 let 声明块级作用域变量
{let blockVar = 10;console.log(blockVar); // 输出 10
}
// console.log(blockVar); // 报错,blockVar 只在块级作用域内有效// 使用 const 声明常量
const PI = 3.14;
// PI = 3.1415; // 报错,常量一旦赋值不能再修改
2. 函数声明
- JavaScript:
JavaScript 中的函数对参数和返回值类型没有严格要求,非常灵活。
function add(a, b) {return a + b;
}
console.log(add(1, 2)); // 输出 3
console.log(add('1', '2')); // 输出 '12',不会报错
- TypeScript:
TypeScript 可以明确函数的参数类型和返回值类型,增强代码的可读性和安全性。
function add(a: number, b: number): number {return a + b;
}
console.log(add(1, 2)); // 输出 3
// console.log(add('1', '2')); // 报错,参数类型不匹配
- ES6:
ES6 引入了箭头函数,使函数的语法更加简洁。
// 传统函数
function multiply(a, b) {return a * b;
}// 箭头函数
const multiplyArrow = (a, b) => a * b;console.log(multiply(2, 3)); // 输出 6
console.log(multiplyArrow(2, 3)); // 输出 6
三、对象对比
1. 对象定义
- JavaScript:
JavaScript 中的对象是动态的,可以随时添加、删除和修改属性。
let person = {name: 'John',age: 30
};
person.gender = 'male'; // 可以动态添加属性
delete person.age; // 可以动态删除属性
- TypeScript:
TypeScript 可以使用接口(interface)来定义对象的结构,确保对象的属性和类型符合要求。
interface Person {name: string;age: number;gender?: string; // 可选属性
}let person: Person = {name: 'John',age: 30
};
// person.address = '123 Main St'; // 报错,对象中不能有接口未定义的属性
- ES6:
ES6 引入了对象解构赋值和扩展运算符等新特性,方便操作对象。
let person = {name: 'John',age: 30
};// 对象解构赋值
let { name, age } = person;
console.log(name); // 输出 'John'
console.log(age); // 输出 30// 扩展运算符
let newPerson = { ...person, gender: 'male' };
console.log(newPerson); // 输出 { name: 'John', age: 30, gender: 'male' }
2. 类和继承
- JavaScript:
在 JavaScript 中,类是在 ES6 才引入的,本质上还是基于原型的继承。
// ES6 类
class Animal {constructor(name) {this.name = name;}sayHello() {console.log(`Hello, I'm ${this.name}`);}
}class Dog extends Animal {bark() {console.log('Woof!');}
}let dog = new Dog('Buddy');
dog.sayHello(); // 输出 'Hello, I'm Buddy'
dog.bark(); // 输出 'Woof!'
- TypeScript:
TypeScript 中的类功能更强大,支持类型注解、访问修饰符(如public、private、protected)等。
class Animal {public name: string; // 公共属性constructor(name: string) {this.name = name;}sayHello(): void {console.log(`Hello, I'm ${this.name}`);}
}class Dog extends Animal {private breed: string; // 私有属性constructor(name: string, breed: string) {super(name);this.breed = breed;}bark(): void {console.log('Woof!');}getBreed(): string {return this.breed;}
}let dog: Dog = new Dog('Buddy', 'Labrador');
dog.sayHello(); // 输出 'Hello, I'm Buddy'
dog.bark(); // 输出 'Woof!'
console.log(dog.getBreed()); // 输出 'Labrador'
// console.log(dog.breed); // 报错,私有属性不能在类外部访问
- ES6:
ES6 类主要是提供了一种更简洁的语法来实现基于原型的继承。
class Shape {constructor(color) {this.color = color;}getColor() {return this.color;}
}class Circle extends Shape {constructor(color, radius) {super(color);this.radius = radius;}getArea() {return Math.PI * this.radius * this.radius;}
}let circle = new Circle('red', 5);
console.log(circle.getColor()); // 输出 'red'
console.log(circle.getArea()); // 输出约 78.54
四、方法对比
1. 方法参数和返回值类型
- JavaScript:
JavaScript 方法的参数和返回值类型没有明确的定义,比较灵活但也容易出错。
function calculateArea(width, height) {return width * height;
}
console.log(calculateArea(2, 3)); // 输出 6
console.log(calculateArea('2', '3')); // 输出 NaN,不会报错
- TypeScript:
TypeScript 可以为方法的参数和返回值指定类型,提高代码的安全性。
function calculateArea(width: number, height: number): number {return width * height;
}
console.log(calculateArea(2, 3)); // 输出 6
// console.log(calculateArea('2', '3')); // 报错,参数类型不匹配
- ES6:
ES6 方法同样没有类型检查,主要关注语法的简洁性。
const calculateArea = (width, height) => width * height;
console.log(calculateArea(2, 3)); // 输出 6
console.log(calculateArea('2', '3')); // 输出 NaN,不会报错
总结
JavaScript 是一种非常灵活的动态类型语言,适合快速开发和小型项目。ES6 在 JavaScript 的基础上引入了很多新的语法特性,让代码更加简洁和易读。而 TypeScript 通过添加静态类型系统,增强了代码的可靠性和可维护性,尤其适合大型项目和团队协作开发。
相关文章:
TypeScript跟js,es6这些的区别
TypeScript 一、TypeScript 是什么 想象 JavaScript 是一个自由奔放的艺术家,它在创作(编写代码)时不受太多约束,非常灵活,但有时也容易犯错且难以调试。而 TypeScript 就像是给这位艺术家配备了一套精确的工具和规范…...
flink-cdc同步数据到doris中
1 创建数据库和表 1.1 数据库脚本 这样直接创建数据库是有问题,因为后面发现superset连接使用doris://root:12345610.101.12.82:9030/internal.eayc?charsetutf8mb4 -- 创建数据库eayc create database if not exists ods_eayc; -- 创建数据表2 数据同步 2.1 f…...
Kubernetes:EKS 中 Istio Ingress Gateway 负载均衡器配置及常见问题解析
引言 在云原生时代,Kubernetes 已经成为容器编排的事实标准。AWS EKS (Elastic Kubernetes Service) 作为一项完全托管的 Kubernetes 服务,简化了在 AWS 上运行 Kubernetes 的复杂性。Istio 作为服务网格领域的佼佼者,为微服务提供了流量管理…...
Golang教程
1. go 环境与命令 1.1 go 环境搭建 SDK 安装 Go 官网:golang.orgGo 中文社区:https://studygolang.com/dlGo API文档:https/golang.org 或 https://studygolang.com/pkgdoc 目录 api :api 存放bin:go命令src&#…...
AI 百炼成神:线性回归,预测房价
我们开始第一个项目——线性回归:预测房价。这是一个经典的机器学习入门项目,可以帮助你理解如何使用线性回归模型来预测连续的数值。 第一个项目:线性回归预测房价 项目目标 学习线性回归的基本概念。使用历史房价数据建立一个预测模型。理解如何评估模型的性能。项目步骤…...
企业软件合规性管理:构建高效、安全的软件资产生态
引言 在数字化转型的浪潮下,企业的软件使用方式日益多元化,涉及云端、订阅制、永久授权及浮动许可等多种模式。然而,随着软件资产的增多,企业面临着合规性管理的严峻挑战:非法软件使用、许可证管理不当、软件资产闲置…...
每日一题——编辑距离
编辑距离 参考资料题目描述示例 解题思路动态规划(DP)方法 代码实现复杂度分析示例详解示例1:"nowcoder" → "new"示例2:"intention" → "execution" 总结与心得 参考资料 建议先参考下…...
TensorFlow项目GPU运行 安装步骤
以下是在 Linux 系统 下搭建完整 GPU 加速环境的详细流程(适配 CUDA 11.2 和 Python 3.9): 1. 前置检查 1.1 验证 NVIDIA 驱动 # 检查驱动版本(需 ≥ 450.80.02) nvidia-smi 输出示例: CUDA Version: 11.2…...
c++进阶———继承
1.引言 在一些大的项目中,我们可能要重复定义一些类,但是很麻烦,应该怎么办呢?举个简单的例子,我要做一个全校师生统计表,统计学号,教师编号,姓名,年龄,电话…...
FreeSwitch的mod_translate模块详细,附带场景案例及代码示例
mod_translate 模块详细介绍 mod_translate 是 FreeSWITCH 中的一个拨号计划应用程序模块,用于对电话号码或字符串进行格式转换和翻译。它可以根据预定义的规则对输入的内容进行匹配和转换,常用于号码格式化、路由选择、号码屏蔽等场景。 主要功能 号码…...
前端504错误分析
前端出现504错误(网关超时)通常是由于代理服务器未能及时从上游服务获取响应。以下是详细分析步骤和解决方案: 1. 确认错误来源 504含义:代理服务器(如Nginx、Apache)在等待后端服务响应时超时。常见架构:前端 → 代理服务器 → 后端服务,问题通常出在代理与后端之间。…...
在 .NET 8/9 中使用 AppUser 进行 JWT 令牌身份验证
文章目录 一、引言二、什么是 JSON Web 令牌?三、什么是 JSON Web 令牌结构?四、设置 JWT 令牌身份验证4.1 创建新的 .NET 8 Web API 项目4.2 安装所需的 NuGet 软件包4.3 创建 JWT 配置模型4.4 将 JWT 配置添加到您的 appsettings.json 中4.5 为 Config…...
基于python实现机器学习的心脏病预测系统
以下是一个基于 Python 实现的简单心脏病预测系统代码示例,我们将使用 Scikit - learn 库中的机器学习算法(这里以逻辑回归为例),并使用公开的心脏病数据集。 步骤: 数据加载与预处理:加载心脏病数据集&a…...
使用 NVM 随意切换 Node.js 版本
安装nvm https://github.com/coreybutler/nvm-windows/releases nvm安装详细教程(卸载旧的nodejs,安装nvm、node、npm、cnpm、yarn及环境变量配置)-CSDN博客 验证 NVM 是否安装成功-查看版本 nvm --version安装指定版本的 Node.js nvm i…...
【Prometheus】prometheus结合pushgateway实现脚本运行状态监控
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...
SpringBoot 项目配置动态数据源
目录 一、前言二、操作1、引入依赖2、配置默认数据库 13、定义数据源实体和 Repository4、定义动态数据源5、配置数据源6、定义切换数据源注解7、定义切面类8、使用注解切换数据源 一、前言 通过切面注解方式根据不同业务动态切换数据库 二、操作 1、引入依赖 <dependen…...
CSS基本选择器
1. 通配选择器 作用:可以选中所有的 HTML 元素。 语法: * { 属性名: 属性值; } 举例: <!DOCTYPE html> <html lang"zh-cn"> <head><meta charset"UTF-8"><meta name"viewport" …...
idea-代码补全快捷键
文章目录 前言idea-代码补全快捷键1. 基本补全2. 类型匹配补全3. 后缀补全4. 代码补全 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。 而且听说点赞的人每天的运气都不会太差,…...
基于SpringBoot+vue粮油商城小程序系统
粮油商城小程序为用户提供方便快捷的在线购物体验,包括大米、面粉、食用油、调味品等各种粮油产品的选购,用户可以浏览商品详情、对比价格、下单支付等操作。同时,商城还提供优惠活动、积分兑换等福利,让用户享受到更多实惠和便利…...
挪车小程序挪车二维码php+uniapp
一款基于FastAdminThinkPHP开发的匿名通知车主挪车微信小程序,采用匿名通话的方式,用户只能在有效期内拨打车主电话,过期失效,从而保护车主和用户隐私。提供微信小程序端和服务端源码,支持私有化部署。 更新日志 V1.0…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
