返回

探寻 JavaScript 基础的第 76-85 个问题:剖析概念,解锁技术潜力

前端

JavaScript 基础:第 76-85 题深入解析

在 JavaScript 的广阔世界中,掌握其基础对于初学者来说至关重要。解决问题是巩固理解的最佳途径,因为它们揭示了语言背后的关键概念,为进一步的探索铺平了道路。本文深入探讨 JavaScript 基础的第 76-85 题,揭示其背后的原理,并提供深入的见解,帮助您掌握 JavaScript 的技术潜力。

76. 数据类型奇闻:null 的特殊性

问题: 输出是什么?

console.log(typeof null);

答案: object

解释:
尽管 null 在 JavaScript 中表示一个特殊值,但令人惊讶的是,它的类型为 object。这是 JavaScript 中的一个怪癖,可能令人困惑,但了解它对于理解 JavaScript 的行为至关重要。

77. 函数纯度:识别副作用

问题: 下面的函数是纯函数吗?

function add(a, b) {
  globalVariable += a + b;
  return a + b;
}

答案:

解释:
纯函数不应产生副作用,即不修改外部状态。然而,给定的函数通过修改全局变量 globalVariable 产生了副作用。因此,它不是一个纯函数。

78. 数组的稀疏性:跳过索引

问题: 输出是什么?

const arr = [1, 2, 3];
arr[10] = 4;
console.log(arr.length);

答案: 11

解释:
JavaScript 数组是稀疏的,这意味着可以跳过索引,而不会在数组中创建 undefined 值。当您设置 arr[10] 时,数组的长度会扩展到 11,即使中间的索引尚未被占用。

79. 对象引用:不可变性与可变性

问题: 输出什么?

const obj = { name: "John" };
const newName = obj.name;
obj.name = "Jane";
console.log(newName);

答案: John

解释:
变量 newName 存储了对象 objname 属性的引用。因此,当修改 obj.name 时,newName 的值不会受到影响,它仍指向原始值。

80. 集合的成员身份:存在性检查

问题: 输出是什么?

const mySet = new Set([1, 2, 3]);
mySet.delete(2);
console.log(mySet.has(2));

答案: false

解释:
Set 对象用于存储唯一值。delete() 方法从集合中删除指定的元素,而 has() 方法检查元素是否存在。删除元素后,has() 方法将返回 false,表示该元素不再是集合的一部分。

81. 映射的覆盖:键重复

问题: 输出是什么?

const myMap = new Map();
myMap.set("key1", 1);
myMap.set("key1", 2);
console.log(myMap.get("key1"));

答案: 2

解释:
Map 对象允许使用键来存储值。将相同的键与不同的值一起设置会覆盖以前的值。因此,当您将 "key1" 设置为 2 时,之前的键值对将被覆盖,并且 get() 方法将返回最新的值。

82. 弱映射的引用:避免内存泄漏

问题: 输出是什么?

const myWeakMap = new WeakMap();
const obj = {};
myWeakMap.set(obj, 1);
console.log(myWeakMap.get(obj));

答案: 1

解释:
WeakMap 对象是一种弱引用映射,这意味着键和值在不被任何其他变量引用时都会被垃圾回收。因此,在给定示例中,当 obj 不再被任何变量引用时,键和值都会被垃圾回收。

83. 异步编程:Promise 的力量

问题: 输出是什么?

const myPromise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve("Hello");
  }, 1000);
});
myPromise.then(res => console.log(res));

答案: Hello

解释:
Promise 对象表示一个异步操作。then() 方法在操作成功时执行。在给定示例中,Promise 在 1 秒后解析为 "Hello",然后在控制台打印结果。

84. 面向对象编程:实例化的本质

问题: 输出是什么?

class Person {
  constructor(name) {
    this.name = name;
  }
}
const person = new Person("John");
console.log(person instanceof Person);

答案: true

解释:
instanceof 运算符用于检查对象是否属于指定的类。在给定示例中,person 对象是 Person 类的实例,因此 instanceof 运算符返回 true。

85. 高阶函数:数组变换的力量

问题: 输出是什么?

const arr = [1, 2, 3];
const newArr = arr.map(x => x * 2);
console.log(newArr);

答案: [2, 4, 6]

解释:
map() 方法对数组中的每个元素执行回调函数,生成一个新数组。在给定示例中,回调函数将每个元素乘以 2,从而产生一个包含 [2, 4, 6] 的新数组。

结论

通过解决这些问题,我们深入了解了 JavaScript 基础的关键概念。从数据类型奇闻到异步编程,这些见解为您进一步探索 JavaScript 的旅程奠定了坚实的基础。记住,练习是掌握任何编程语言的关键,因此继续解决问题,提升您的技能,征服 JavaScript 的技术潜力。

常见问题解答

  1. 为什么 null 的类型是 object

    这是一个 JavaScript 怪癖,根源于语言的历史演变。

  2. 什么是纯函数?

    纯函数不产生副作用,即不修改外部状态。

  3. 数组中的稀疏性有什么好处?

    稀疏性允许高效地存储数据,即使存在跳过的索引。

  4. SetMap 对象有什么区别?

    Set 存储唯一值,而 Map 允许使用键来存储值。

  5. WeakMap 对象如何防止内存泄漏?

    WeakMap 对象的键和值在不被任何其他变量引用时会被垃圾回收,从而防止内存泄漏。