您的位置:首页 > 娱乐 > 八卦 > 株洲关键词优化_东易日盛装饰公司口碑_seo优化工作_免费建站免费推广的网站

株洲关键词优化_东易日盛装饰公司口碑_seo优化工作_免费建站免费推广的网站

2024/12/23 2:11:44 来源:https://blog.csdn.net/m0_72035166/article/details/142531572  浏览:    关键词:株洲关键词优化_东易日盛装饰公司口碑_seo优化工作_免费建站免费推广的网站
株洲关键词优化_东易日盛装饰公司口碑_seo优化工作_免费建站免费推广的网站

day37

一、review

        npm包管理器+ 常见问题=> 包下载出错-> 镜像源地址问题,是默认在国外,由于网速问题导致下载不下来,有时候下载一些包,然后由于各种的原因,一直下载不出来,需要清除缓存-> npm config set registry https://registry.npm.taobao.org=> 使用某些npm工具的时候发现报错-> node版本问题-> 如果有版本问题,你升级自己的node版本,换其他的工具=> 在实际开发中,一些比较老的项目,你使用npm i的时候下载包出错-> node版本太高了,需要降node版本-> nvm npm管理工具,你需要先使用npm按照nvm,然后就可以使用nvm下载不同的node版本,最终可以使用nvm随意切换不同的node版本+ nrm npm切换镜像源的工具=> 查看各个镜像源的网速=> 可以切换到不同的镜像源 nrm use 镜像源 === npm config set registry https://registry.npm.taobao.org+ 常见的镜像源地址=> npm 官方原始镜像网址是:https://registry.npmjs.org/=> 淘宝 NPM 镜像:http://registry.npmmirror.com=> 阿里云 NPM 镜像:https://npm.aliyun.com=> 腾讯云 NPM 镜像:https://mirrors.cloud.tencent.com/npm/=> 华为云 NPM 镜像:https://mirrors.huaweicloud.com/repository/npm/=> 网易 NPM 镜像:https://mirrors.163.com/npm/=> 中国科学技术大学开源镜像站:http://mirrors.ustc.edu.cn/=> 清华大学开源镜像站:https://mirrors.tuna.tsinghua.edu.cn/node+ node是一个后端环境+ 使用的语言是JavaScriptapi接口类型+ get=> get接口一般用于一些免费的接口=> get请求可以直接在浏览器地址栏发送请求,查看接口+ post+ put+ delete

二、TypeScript

        + 这个语言是从JavaScript语言上升级而来的,解决了js本身存在的一些问题,js最大的问题就是没有类型检测系统,一个数据类型有没有问题只能到最终查看结果的时候才能知道+ TypeScript,简称ts,增加了类型检测系统,可以让数据类型在编译阶段就能发现是否存在问题+ HarmonyOS里面使用的语言是arkTS,而arkTS就是使用了TypeScript+ TypeScript最终还是需要编译成JavaScript来使用,因为浏览器只能识别JavaScript+ TypeScript其实就是对js代码最终的运行提供了一种保障,类似于生活中的社保ts使用+ 把之前的后缀名为.js现在改成.ts+ ts不能直接在浏览器里面运行,所以需要安装插件,把ts编译成js代码,再去运行
​vite脚手架+ vite是一个自动化构建工具+ 作用=> 帮助咱们快速创建一个项目=> 自身存在服务器,如果发送请求什么的话,不需要使用live server插件=> 可以打包压缩代码

三、垃圾回收机制

1.标记清理 垃圾回收程序运行时,会标记内存中存储的所有变量(标记方法有多种).然后他会将所有在作用域的变量,以及被变量引用的变量的标记去掉.在此之后,被标记的变量就等待被删了.随后垃圾回收机制会运行一次,清理标记的值且收回被占用的内存.

2.引用计数 对每个值都记录它被引用的次数,但是弊端太多已经被放弃.

// 创建一个对象person, person指向一块内存空间, 该内存空间的引用数 +1
let person = {age: 22,name: 'ifcode'
}
​
let p = person   // 两个变量指向一块内存空间, 该内存空间的引用数为 2
person = 1       // 原来的person对象被赋值为1,对象内存空间的引用数-1,// 但因为p指向原person对象,还剩一个对于对象空间的引用, 所以对象它不会被回收
​
p = null         // 原person对象已经没有引用,会被回收

但它却存在一个致命的问题:循环引用。

如果两个对象相互引用,尽管他们已不再使用,垃圾回收器不会进行回收,导致内存泄露。

function cycle() {let o1 = {}let o2 = {}o1.a = o2o2.a = o1 return "Cycle reference!"
}
​
cycle()

四、ts的相关类型

1.类型注解(就是给一个变量添加类型约束。每声明一个变量,必须给变量添加类型,这个特性和java或者c里面很像) 当有了类型注解后,如果重新赋值的数据类型和类型注解的不一样,会给咱们一个提示 当有了类型注解后,直接赋值的时候也会进行类型检测,如果不满足给一个提示 注意点: + 当类型注解触发是,检测到赋值的类型和类型注解的不同时,给了一个温馨提示。如果执意要查看结果,其实也可以正常编译,得到结果 + ts只是在过程中给提示,让你避免代码错误,起了一个劝导的作用

2.函数类型(函数类型指定类型主要是给形参和函数返回值指定类型,并不是直接给函数本身指定类型)

注意点:①如果函数指定了返回值类型,那么必须按照要求返回对应的数据类型 ②如果一个函数指定的返回值类型是void,那么不要写返回值 ③? 表示可选参数,这个参数可以有,也可以没有

3.联合类型(可以一次性指定一个变量同时可以有几个不同的类型,让类型有一个范围) let desc: number | string | boolean = 10

4.数组类型(数组类型限定的是数组元素的类型,而不是数组本身的类型) let arr1: number[] = [10, 20, 30] let arr5: Array<string | number> = [10, 'hello'] let arr6: any[] = [10, 20, 'hello']

5.类型别名和对象类型(可以给一个类型取名称,达到复用的目的,类似于声明变量)

    // 声明了一个类型别名,但是实现了复用的目的type zt_number = numberlet num: zt_number = 10let price: zt_number = 12.66let count: zt_number = 10

对象类型(如果一个变量或者属性类型没有指定的话,那么它的类型就是默认推论出来的)

let person1: {name: string,age: number,sex: string
} = {name: '张',age: 18,sex: '男'
}
let person2: {name: string,age: number,sex: string
} = {name: '陈',age: 20,sex: '男'
}

6.never类型(never 是其它类型,代表从不会出现的值,表示永远也不会出现的值,一般用于处理错误信息)

    // 注意点:throw new Error表示抛出错误信息,已经发送异常啦,因此符合never类型的规范// function errFn(): never{//     throw new Error('报错了')// }// let desc: never// desc = errFn()

7.interface接口(和类型别名作用是一样的,但是语法和特性不一样,接口可以继承,类型别名无法继承)

在工作中,如果遇到既可以使用接口也可以使用类型别名的情况,你自己分析是否存在继承的情况,如果有就使用接口,没有就使用类型别名

        interface Person {name: stringage: numbersex: stringsay?(): number}interface Person2 extends Person {like: string}let obj3: Person2 = {name: '陈',age: 18,sex: '男',like: '篮球',say(){return 10}}console.log(obj3)

8.类型推论(有些类型不写,ts系统会默认给你进行推论它到底是什么类型的,因此工作中很多的情况下,可以偷懒)

        //声明变量并初始化时,推荐使用类型 let timertimer = 10timer = 'hello'timer = true

决定函数返回值时,返回值类型可以偷懒不写,自己进行推论。但是函数形参的类型不能省略,因为它也属于变量初始化 注意点:所谓的推论机制,是建立在已经有初始值的情况下进行的。

9.类型断言(有时候你会比 TS 更加明确一个值的类型,此时,可以使用类型断言来指定更具体的类型)

    // 类型断言:有时候你会比 TS 更加明确一个值的类型,此时,可以使用类型断言来指定更具体的类型let link = document.querySelector('.link') as HTMLAnchorElementconsole.log(link)使用console.dir()查看标记的详细信息console.dir(link)let a = document.querySelector('a')

10.字面量和枚举

①字面量

 type Direction = '上' | '下' | '左' | '右'
​function fn(direction: Direction){console.log(direction)}fn('上')fn('下')fn('右')fn('左')

②枚举(定义一组命名常量。它描述一个值,该值可以是这些命名常量中的一个,定义的这些常量,如果不进行赋值操作,默认值是从0开始的)

// enum Direction {Up, Down, Left, Right}
// enum Direction {Up=2, Down, Left, Right}
enum Direction {Up='上', Down='下', Left='左', Right='右'}
function fn(direction: Direction){console.log(direction)
}
// fn(Direction.Up)
fn(Direction.Down)

11.typeof类型推断(根据你传递进来的数据来推导你的值的类型的,typeof没有把类型固定化,是根据你自己传递的值来确定值的类型)

function formatPoint(point: typeof p) {// console.log(point)
}
formatPoint(p)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com