获得徽章 0
- Array.isArray() 检查传递的值是否为 Array。它不检查值的原型链,也不依赖于它所附加的 Array 构造函数。对于使用数组字面量语法或 Array 构造函数创建的任何值,它都会返回 true。这使得它可以安全地使用跨领域(cross-realm)对象,其中 Array 构造函数的标识是不同的,因此会导致 instanceof Array 失败。评论点赞
- 模块、提供者和控制器之间的关系可以通过以下几点来阐述:
- **模块用于组织和管理提供者和控制器**。模块将这些类聚合到一起,形成一个功能单元。
- **提供者被注入到控制器中**,为控制器提供必要的服务和功能。这样可以将控制器与业务逻辑解耦,使代码更易于维护和测试。
- **控制器依赖于提供者来处理请求和生成响应**。它们之间的==依赖关系通过依赖注入(DI)实现,从而保持代码的松耦合。==展开评论点赞 - 当我们访问一个对象的成员时:
首先看该对象自身是否拥有该成员,如果有直接使用;
如果没有再看该对象的隐式原型是否拥有该成员,如果有直接使用;
如果还没有就会继续查找原型对象的原型对象(该对象的隐式原型所指向的原型对象),直到找到为止;
这样形成的链条就被称为原型链(prototype chain)。展开评论点赞 - **在 Nest.js 中,装饰器有很多用途,以下是一些常见的装饰器类型:**
1. 类装饰器:*他会自动把class的构造函数传入到装饰器的第一个参数target
然后通过prototype可以自定义添加属性和方法*
用于在类级别添加元数据或行为。例如,`@Controller()`装饰器用于将类标记为控制器并定义基本路由前缀。
3. 方法装饰器:用于在方法级别添加元数据或行为。例如,`@Get()`、`@Post()`等装饰器用于将特定的 HTTP 动词(如 GET、POST)与类方法关联,并定义特定的路由。
4. 属性装饰器:用于在类属性上添加元数据或行为。例如,`@Inject()`装饰器用于将依赖项注入到类属性中。
5. 参数装饰器:用于在方法参数上添加元数据或行为。例如,`@Req()`、`@Res()`、`@Body()`等装饰器用于访问请求和响应对象,或者将请求主体解析为方法参数。展开评论点赞 - 当处于全局创建时期的时候JS引擎会
- 创建一个全局对象。
- 创建一个名为this的对象。
- 为变量和函数设置内存空间。
- 在将任何函数声明放入内存时,为变量声明赋值默认值"undefined"。
直到执行阶段,JavaScript引擎才开始逐行运行代码并执行。
在创建阶段,创建window和this,为变量声明(name和handle)分配默认值undefined,并且将所有函数声明(getUser)完全放入内存中。然后,一旦我们进入执行阶段,JavaScript引擎开始逐行执行代码,并将实际值分配给已经存在于内存中的变量。==--在创建阶段将变量声明赋值为默认值undefined的过程称为提升。==展开评论点赞 - 柯里化大多是情况下是为了减少重复传递的不变参数
函数柯里化封装:
- 返回一个新的函数
- 递归手机所有后置函数
- 最后调用普通函数
//function.length => 函数的形参个数
```js
//函数柯里化封装(这个封装可以直接复制走使用)
function curry(fn, args) {
var length = fn.length;
var args = args || [];
//封装一个新的函数,以便接受下一个参数
return function () {
newArgs = args.concat(Array.prototype.slice.call(arguments));
//判断当前参数是否已经完全收集
if (newArgs.length < length) {
return curry.call(this, fn, newArgs);
} else {
return fn.apply(this, newArgs);
}
}
}
//需要被柯里化的函数
function multiFn(a, b, c) {
return a * b * c;
}
//multi是柯里化之后的函数
var multi = curry(multiFn);
console.log(multi(2)(3)(4));
console.log(multi(2, 3, 4));
console.log(multi(2)(3, 4));
console.log(multi(2, 3)(4));
```展开评论点赞 - - declare:三方库需要类型声明文件
- `declare`关键字用于声明一个变量或标识符的类型,==告诉TypeScript编译器存在某个全局变量或函数,但不需要具体的实现或定义==。通常用于引入第三方库的类型声明文件。
- .d.ts:声明文件定义
- 用于==定义第三方库或模块的类型信息==。声明文件扩展名为`.d.ts`,其中包含了变量、函数、类、接口等的类型声明。这些声明文件提供了类型检查和提示,使得在使用第三方库时能够获得更好的开发体验。
- @types:三方库TS类型包
- `@types`是TypeScript社区维护的一系列第三方库的类型声明文件的存储库。通过使用`@types`包,可以在项目中安装相应第三方库的类型声明文件,从而使得TypeScript编译器能够正确地推断和检查相应库的类型。
- `tsconfig.json`:定义TS的配置
- `tsconfig.json`是TypeScript的配置文件,用于定义TypeScript编译器的行为和编译选项。在该配置文件中,可以指定编译目标版本、输出目录、源文件目录、模块解析方式、启用的编译选项等等。通过配置`tsconfig.json`,可以对TypeScript编译过程进行定制和管理,确保项目按照特定的编译规则进行构建。展开评论点赞 - 虽然类型本来就是相符合的,但是 TypeScript 编译器并不一定能够推断出类型的正确性。在这种情况下,我们可以使用类型断言来告诉编译器,某个值的类型是什么,从而避免在编译时出现类型错误。
例如,当我们从 DOM 中获取一个元素时,它的类型可能是 HTMLElement 或其子类,但是具体是哪个子类并不确定。如果我们想要调用子类特有的方法或属性,就需要使用类型断言将其转换为子类的类型,从而避免编译时出现类型错误。
另外,有些情况下,我们可能需要将一个值转换为一个特定的类型,例如将一个字符串转换为数字。虽然 TypeScript 可以自动将字符串转换为数字,但是在一些特殊情况下,自动转换可能会出现错误,这时就需要使用类型断言来确保类型的正确性。展开评论点赞 - # 改变原数组方法
==汇总==
1. push() 末尾添加数据
2. pop() 末尾出删除数据
3. unshift() 头部添加数据
4. shift() 头部删除数据
5. **reverse() 翻转数组**
6. sort() 排序
7. splice() 截取数组展开评论点赞