返回

JavaScript 基础问题剖析(146-155):深挖核心概念,破解编程难题

前端

探索 JavaScript 中的有趣谜题:揭示令人惊讶的结果

JavaScript 以其动态特性和丰富的方法而闻名,它为开发人员提供了灵活性和表达力。然而,它也可能带来令人惊讶的结果,让人困惑不已。让我们通过一系列引人入胜的谜题来探索 JavaScript 中一些不那么明显的行为。

深入浅出,逐一攻破

谜题 1:typeof 之谜

console.log(typeof typeof 1);

答案: "string"。typeof 1 返回 "number",而 typeof "number" 返回 "string"。

谜题 2:this 的归属

function test() {
  console.log(this);
}

test();

答案: window 对象。在非严格模式下,test() 函数中的 this 指向 window 对象。

谜题 3:hasOwnProperty 的妙用

const obj = {
  name: "John",
  age: 30,
};

console.log(obj.hasOwnProperty("name"));

答案: true。hasOwnProperty() 方法用于检查对象是否包含指定的属性。

谜题 4:slice 的巧妙用法

const arr = [1, 2, 3, 4, 5];

console.log(arr.slice(1, 3));

答案: [2, 3]。slice() 方法返回一个新的数组,包含从给定开始索引到结束索引(不包括)的元素。

谜题 5:replace 的强大功能

const str = "Hello World!";

console.log(str.replace(/o/g, "a"));

答案: "HellW arld!"。replace() 方法用一个字符串替换另一个字符串的所有匹配项。

谜题 6:JSON.stringify 的妙处

const obj = {
  name: "John",
  age: 30,
};

console.log(JSON.stringify(obj));

答案: "{ "name": "John", "age": 30 }"。JSON.stringify() 方法将对象转换为 JSON 字符串。

谜题 7:filter 的过滤能力

const arr = [1, 2, 3, 4, 5];

console.log(arr.filter((item) => item > 2));

答案: [3, 4, 5]。filter() 方法创建一个包含通过测试函数的所有元素的新数组。

谜题 8:Object.keys 的洞察力

const obj = {
  name: "John",
  age: 30,
};

console.log(Object.keys(obj));

答案: ["name", "age"]。Object.keys() 方法返回一个数组,其中包含对象的所有可枚举属性的名称。

谜题 9:reduce 的累积效应

const arr = [1, 2, 3, 4, 5];

console.log(arr.reduce((acc, item) => acc + item, 0));

答案: 15。reduce() 方法将数组中的所有元素累积起来,并返回一个值。

谜题 10:has 的存在确认

const set = new Set([1, 2, 3, 4, 5]);

console.log(set.has(3));

答案: true。has() 方法检查 Set 对象是否包含给定元素。

结论:JavaScript 中的无限可能

这些谜题展示了 JavaScript 中令人着迷且有时令人惊讶的能力。它们强调了深入理解语言机制和掌握其微妙之处的重要性。通过解决这些谜题,开发人员可以提高他们的 JavaScript 技能,发现新的可能性,并为优雅且高效的解决方案打开大门。

常见问题解答

  1. 为什么 typeof typeof 1 返回 "string"?

因为 typeof 1 返回 "number",而 typeof "number" 返回 "string"。

  1. 在非严格模式下,this 在函数中指向什么?

它指向 window 对象。

  1. hasOwnProperty() 方法的用途是什么?

它用于检查对象是否包含指定的属性。

  1. slice() 方法如何工作?

它返回一个新的数组,包含从给定开始索引到结束索引(不包括)的元素。

  1. JSON.stringify() 方法有什么好处?

它将对象转换为 JSON 字符串。