JavaScript 基础问题剖析(146-155):深挖核心概念,破解编程难题
2024-02-24 19:06:50
探索 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 技能,发现新的可能性,并为优雅且高效的解决方案打开大门。
常见问题解答
- 为什么 typeof typeof 1 返回 "string"?
因为 typeof 1 返回 "number",而 typeof "number" 返回 "string"。
- 在非严格模式下,this 在函数中指向什么?
它指向 window 对象。
- hasOwnProperty() 方法的用途是什么?
它用于检查对象是否包含指定的属性。
- slice() 方法如何工作?
它返回一个新的数组,包含从给定开始索引到结束索引(不包括)的元素。
- JSON.stringify() 方法有什么好处?
它将对象转换为 JSON 字符串。