javascript 学习笔记深入篇4

64 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 10 天,点击查看活动详情

get 和 defineProperty 有什么区别

除非你使用类,否则两者都有相似的结果。如果您使用get该属性将在对象的原型上定义,而使用Object.defineProperty()该属性将在它所应用的实例上定义。

Getters和Setters有什么优点

以下是 Getters 和 Setters 的好处列表,

  1. 它们提供更简单的语法
  2. 它们用于定义计算属性或 JS 中的访问器。
  3. 有助于提供属性和方法之间的等价关系
  4. 他们可以提供更好的数据质量
  5. 对于使用封装逻辑在幕后做事很有用。

我可以使用 defineProperty 方法添加 getter 和 setter

是的,您可以使用该Object.defineProperty()方法添加 Getters 和 Setters。例如,下面的计数器对象使用递增、递减、加减属性,

var obj = { counter: 0 };

// Define getters
Object.defineProperty(obj, "increment", {
  get: function () {
    this.counter++;
  },
});
Object.defineProperty(obj, "decrement", {
  get: function () {
    this.counter--;
  },
});

// Define setters
Object.defineProperty(obj, "add", {
  set: function (value) {
    this.counter += value;
  },
});
Object.defineProperty(obj, "subtract", {
  set: function (value) {
    this.counter -= value;
  },
});

obj.add = 10;
obj.subtract = 5;
console.log(obj.increment); //6
console.log(obj.decrement); //5

什么是 compose 和 pipe 函数?

“compose”和“pipe”是函数式编程中常用的两种技术,用于简化复杂的操作并使代码更具可读性。它们在 JavaScript 和高阶函数中不是原生的。从右到左将任意数量的compose()函数应用于前一个函数的输出。

什么是可选链?

根据 MDN 官方文档,可选的链接运算符 (?.) 允许读取位于连接对象链深处的属性值,而无需明确验证链中的每个引用是否有效。

这 ?。运算符就像 . 链接运算符,除了如果引用为空(null 或 undefined)时不会导致错误,表达式会短路并返回 undefined 值。与函数调用一起使用时,如果给定函数不存在,则返回 undefined。

 const adventurer = {
   name: 'Alice',
   cat: {
     name: 'Dinah'
   }
 };

 const dogName = adventurer.dog?.name;
 console.log(dogName);
 // expected output: undefined

 console.log(adventurer.someNonExistentMethod?.());
 // expected output: undefined

setTimeout、setImmediate 和 process.nextTick 之间有什么区别?

  1. 设置超时:  setTimeout() 是在 delay 毫秒后安排执行一次性回调。
  2. Set Immediate:  setImmediate 函数用于在当前事件循环完成后立即执行一个函数。
  3. Process NextTick: 如果在给定阶段调用 process.nextTick(),则在事件循环继续之前,传递给 process.nextTick() 的所有回调将被解析。如果递归调用 process.nextTick() ,这将阻止事件循环并创建 I/O 饥饿。

什么是可观察

Observable 基本上是一个函数,可以随着时间的推移同步或异步地向观察者返回值流。消费者可以通过调用subscribe()方法获取值。让我们看一个 Observable 的简单例子

import { Observable } from "rxjs";

const observable = new Observable((observer) => {
  setTimeout(() => {
    observer.next("Message from a Observable!");
  }, 3000);
});

observable.subscribe((value) => console.log(value));

observables.png

注意:  Observables 还不是 JavaScript 语言的一部分,但正在提议将它们添加到该语言中