四、TypeScript 泛型与常用工具类型
泛型用于复用类型之间的关系,工具类型用于从已有类型生成新类型。它们能减少重复,也能保留具体的类型信息。 泛型:让输入与输出保持关联123456function first<T>(items: T[]): T | undefined { return items[0];}const name = first(["小明", "小林"]); // string | undefinedconst score = first([90, 80]); // number | undefined T 是类型参数,通常由调用参数推断。如果改成 any[],返回值也会失去类型信息。这里保留 undefined,因为数组可能为空。 泛型也常用于复用响应结构: 1234567891011121314interface Page<T> { list: T[]; total: number;}interface User { id: number; name: string;...
三、TypeScript 接口与函数
对象类型反复出现时,可以用 interface 或 type 为它命名。函数类型则约定输入和输出,让这些对象在代码中安全地传递。 用 interface 描述对象12345678910111213interface User { readonly id: number; name: string; nickname?: string;}const user: User = { id: 1, name: "小明" };user.name = "小林";// user.id = 2; // 报错:只读属性function displayName(user: User): string { return user.nickname ?? user.name;} ? 表示属性可以省略,读取时需要考虑 undefined。readonly 限制通过该类型修改属性,不会冻结对象,也不会让嵌套属性自动只读。 TypeScript 按结构判断兼容性:对象具备所需字段,就可以使用。但直接传...
二、TypeScript 基础类型
类型回答两个问题:这个值可以是什么,能对它做什么。先掌握常用类型,再理解如何处理不确定的值。 常用类型与推断123456const enabled: boolean = true;const count: number = 10;const message: string = "hello";const scores: number[] = [80, 90];const point: [number, number] = [10, 20]; // 元组:按位置描述类型const user: { id: number; name: string } = { id: 1, name: "小明" }; 能从初始值推断时,可以省略标注: 1234567let count = 10; // numberconst fixed = 10; // 字面量类型 10let state: "loading" | "success" | "error" = &...
一、TypeScript 介绍与安装
TypeScript 是加上类型检查的 JavaScript,能在运行前发现传错参数、访问不存在的属性等问题。类型检查不会替代运行时的数据校验。 123456function greet(name: string): string { return `你好,${name}`;}greet("小明");// greet(123); // 报错:参数需要 string 这个系列用五篇介绍日常开发需要的知识。示例以 TypeScript 4.1 为基线,开启 strict;各代码块独立练习,多文件示例会标明路径。 安装准备好 Node.js 和 npm,在终端执行: 12345mkdir ts-democd ts-demonpm init -ynpm install --save-dev typescript@4.1.3npx tsc --init 固定版本是为了复现本文环境,新项目应使用工具链支持的版本。编译器安装在项目内,npx tsc 调用该版本,无需全局安装。 配置把生成的 tsconfig.json 改成: 1...
Git 基础与常用命令
GIT 的一些基础命令基本常识 一般配置 123456git --version // 查看git版本内心戏git config --global user.name // 获取当前登录的用户git config --global user.email // 获取当前登录用户的邮箱git config -l // 查看当前git的配置git config --system --list // 查看系统配置git config --global --list // 查看用户自己设置的配置 登录 git 123/* 如果刚没有获取到用户配置,则只能拉取代码,不能修改 要是使用git,你要告诉git是谁在使用 */git config --global user.name 'louhaojie' //设置git账户,louhaojie为你的git账号,git config --global user.email '851681631@qq.com' 初始化 git 仓库 1git init // ...
十九、Promise 与异步编程
封装 AJAX ajax 使用起来太麻烦,因为每次都要写很多的代码 那么我们就封装一个 ajax 方法来让我们使用起来简单一些 确定一下使用的方式 因为有一些内容可以不传递,我们可以使用默认值,所以选择对象传递参数的方式 1234567// 使用的时候直接调用,传递一个对象就可以ajax({ url: "", // 请求的地址 type: "", // 请求方式 data: "", // 携带的参数 success: function () {}, // 成功以后执行的函数}); 确定好使用方式以后,就开始书写封装函数 封装123456789101112131415161718192021function ajax(options) { // 先准备一个默认值 var defInfo = { url: "", // 地址不需要默认值 type: "GET", // 请求方式的默认值是 G...
十八、Ajax 与前后端交互
AJAX ajax 全名 async javascript and XML 是前后台交互的能力 也就是我们客户端给服务端发送消息的工具,以及接受响应的工具 是一个 默认异步 执行机制的功能 AJAX 的优势 不需要插件的支持,原生 js 就可以使用 用户体验好(不需要刷新页面就可以更新数据),可以实现局部刷新 减轻服务端和带宽的负担 缺点: 搜索引擎的(seo)支持度不够,因为数据都不在页面上,搜索引擎搜索不到 AJAX 的使用 在 js 中有内置的构造函数来创建 ajax 对象 创建 ajax 对象以后,我们就使用 ajax 对象的方法去发送请求和接受响应 创建一个 ajax 对象12345// IE9及以上const xhr = new XMLHttpRequest();// IE9以下const xhr = new ActiveXObject("Mricosoft.XMLHTTP"); 上面就是有了一个 ajax 对象 我们就可以使用这个 xhr 对象来发送 ajax 请求了 配置链接信息12345678const xhr = new XML...
十七、浏览器 Cookie 基础
通信协议定义:通信协议是指双方实体完成通信或服务所必须遵循的规则和约定。协议定义了数据单元使用的格式,信息单元应该包含的信息与含义,连接方式,信息发送和接收的时序,从而确保网络中数据顺利地传送到确定的地方。总结一句话:交流的规则。比如:汉语、英语、德语、日语等。在计算机通信中,通信协议用于实现计算机与网络连接之间的标准,网络如果没有统一的通信协议,电脑之间的信息传递就无法识别。 通信协议是指通信各方事前约定的通信规则,可以简单地理解为各计算机之间进行相互会话所使用的共同语言。两台计算机在进行通信时,必须使用的通信协议。常见的协议有:TCP/IP 协议、HTTP 协议等等。 HTTP http 是我们前后台交互的时候的传输协议(即超文本传输协议) HTTP 的工作流程 和服务器建立链接 建立链接后,发送一个请求给服务器(请求 request- req) 服务器接受到请求以后进行相应的处理并给出一个回应(响应 response-res) 断开于服务器的链接 和服务器建立链接 怎么和服务器建立链接呢? 需要保证客户端的接受和发送正常,服务器端的接受和发送正常 这里就涉...
十六、JSON 与本地存储(localStorage)
JSON 字符串和对象的转换JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 [ECMAScript] (欧洲计算机协会制定的 js 规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率 注意 json 字符串中的属性名只能是字符串,并且只能用双引号。属性值如果是字符串的话,也只能使用双引号 1234let str = '{"name":"李四","age":18}'let productsStr = '[{"pname":"iphone11","price":1000},{"pname":"iphone12","pric...
十五、JavaScript 面向对象编程
面向对象 首先,我们要明确,面向对象不是语法,是一个思想,是一种 编程模式 面向: 面(脸),向(朝着) 面向过程: 脸朝着过程 =》 关注着过程的编程模式 面向对象: 脸朝着对象 =》 关注着对象的编程模式 实现一个效果 在面向过程的时候,我们要关注每一个元素,每一个元素之间的关系,顺序,。。。 在面向过程的时候,我们要关注的就是找到一个对象来帮我做这个事情,我等待结果 例子 🌰: 我要吃面条 面向过程 用多少面粉 用多少水 怎么和面 怎么切面条 做开水 煮面 吃面 面向对象 找到一个面馆 叫一碗面 等着吃 面向对象就是对面向过程的封装 我们以前的编程思想是,每一个功能,都按照需求一步一步的逐步完成 我们以后的编程思想是,每一个功能,都先创造一个 面馆,这个 面馆 能帮我们作出一个 面(完成这个功能的对象),然后用 面馆 创造出一个 面,我们只要等到结果就好了 创建对象的方式 因为面向对象就是一个找到对象的过程 所以我们先要了解如何创建一个对象 调用系统内置的构造函数创建对象 js 给我们内置了一个 Object 构造函数 这个构造函...
十四、JavaScript ES5 与 ES6
ES5 和 ES6 我们所说的 ES5 和 ES6 其实就是在 js 语法的发展过程中的一个版本而已 比如我们使用的微信 最早的版本是没有支付功能的 随着时间的流逝,后来出现了一个版本,这个版本里面有支付功能了 ECMAScript 就是 js 的语法 以前的版本没有某些功能 在 ES5 这个版本的时候增加了一些功能 在 ES6 这个版本的时候增加了一些功能 因为浏览器是浏览器厂商生产的 ECMAScript 发布了新的功能以后,浏览器厂商需要让自己的浏览器支持这些功能 这个过程是需要时间的 所以到现在,基本上大部分浏览器都可以比较完善的支持了 只不过有些浏览器还是不能全部支持 这就出现了兼容性问题 所以我们写代码的时候就要考虑哪些方法是 ES5 或者 ES6 的,看看是不是浏览器都支持 ES5 增加的数组常用方法数组方法之 forEach forEach 用于遍历数组,和 for 循环遍历数组一个道理 语法: 数组.forEach(function (item, index, arr) {}) 1234567891011var arr = ["a&qu...
十三、JavaScript 正则表达式(RegExp)
正则表达式 - Regexp1:正则的概念 正则表达式(regular expression)是一个描述字符规则的对象。可以用来检查一个字符串是否含有某个子字符串,将匹配的子字符串做替换或者从某个字符串中取出符合某个条件的子串等。为什么要用正则:前端往往有大量的表单数据校验工作,采用正则表达式会使得数据校验的工作量大大减轻。常用效果:邮箱、手机号、身份证号等。 2:创建方式 第一种方式: 1var reg = new RegExp(“study”,“ig”); // 第二个参数为修饰符 i:表示忽略大小写 ignore。g:表示全局匹配,查找所有匹配而非在找到第一个匹配后停止 global。 第二种方式: 1var reg = /study/gi; 3:正则对象方法 test: 正则实例对象的 test 方法返回一个布尔值,表示当前模式是否能匹配参数字符串 1234/cat/.test('cats and dogs') // true上面代码验证参数字符串之中是否包含cat,结果返回true。如果正则表达式带有g修饰符,则每一次test方...
十二、JavaScript 事件(下)
事件 Event事件的默认行为及阻止 浏览器的默认行为 JavaScript 事件本身所具有的属性,例如 a 标签的跳转,Submit 按钮的提交,右键菜单,文本框的输入等。 1234567阻止默认行为的方式1、w3c的方法是e.preventDefault()2、IE则是使用e.returnValue = false;3、函数内部return false;自定义右键菜单 oncontextmenu DOM2 级事件处理程序添加事件监听器 添加事件监听器:ele.addEventListener(事件名,处理函数,布尔值) 注意:适用于现代浏览器(IE9、10、11 | ff, chorme, safari, opera) 注意:事件名不带 on,处理函数为函数引用,布尔值代表冒泡(内到外)或捕获(外到内) element.addEventListener(“click”,function(){},false);//false 事件冒泡 element.addEventListener(“click”,function(){},true);/...
十一、JavaScript 事件(上)
事件 Event事件基础123JavaScript 事件是由访问 Web 页面的用户引起的一系列操作。当用户执行某些操作的时候,再去执行一系列代码。或者用来获取事件的详细信息,如鼠标位置、键盘按键等。 事件处理函数12javaScript可以处理的事件类型为:鼠标事件、键盘事件、HTML事件所有的事件处理函数都会都有两个部分组成,on + 事件名称 常用鼠标事件(重点)1234567onclick: 用户单击鼠标按钮ondblclick: 当用户双击主鼠标按钮时触发onmousedown: 当用户按下鼠标还未弹起时触发onmouseup: 当用户释放鼠标按钮时触发onmouseover: 当鼠标移到某个元素上方时触发onmouseout: 当鼠标移出某个元素上方时触发onmousemove: 当鼠标指针在元素上移动时触发 常用 HTML 事件(重点)1234567onload: 当页面或者资源完全加载后在 window 上面触发onselect: 当用户选择文本框(input 或 textarea)中的一个或多个字符触发onchange: 当文本框(inpu...
十、DOM 操作进阶
DOM(下) DOM 树就是我们 html 结构中一个一个的节点构成的 不光我们的标签是一个节点,我们写的文本内容也是一个节点,注释,包括空格都是节点 DOM 节点 DOM 的节点我们一般分为常用的三大类 元素节点 / 文本节点 / 属性节点 什么是分类,比如我们在获取元素的时候,通过各种方法获取到的我们叫做元素节点(标签节点) 比如我们标签里面写的文字,那么就是文本节点 写在每一个标签上的属性,就是属性节点 元素节点 我们通过 getElementBy... 获取到的都是元素节点 属性节点 我们通过 getAttribute 获取的就是元素的属性节点 文本节点 我们通过 innerText 获取到的就是元素的文本节点 获取节点 childNodes:获取某一个节点下 所有的子一级节点 1234567891011121314151617181920<body> <div> <p>hello</p> </div> <script> // 这个 oDiv 获取的是页...






