JavaScript 匿名函数
JavaScript 中的匿名函数,也称为无名函数或拉姆达函数,是指没有明确指定名称的函数。它可以在需要时直接定义并立即使用,无需预先声明。匿名函数的特点和应用场景包括:
-
定义:
function() { // 函数体 }
-
赋值给变量:
匿名函数可以被赋值给变量,通过变量名来调用。var myFunction = function() { console.log('Hello, world!'); }; myFunction(); // 输出 "Hello, world!"
-
作为参数传递:
在事件处理、回调函数、高阶函数等场景中,匿名函数常作为参数传递给其他函数。document.getElementById('myButton').addEventListener('click', function() { alert('Button clicked!'); });
-
立即调用(IIFE, Immediately Invoked Function Expression):
匿名函数后紧跟一对括号()
,实现定义后立即执行。(function() { console.log('This anonymous function is self-invoked.'); })();
-
与
new
操作符结合:
匿名函数可以用作构造函数,通过new
关键字创建新对象实例。var obj = new function() { this.message = 'Created by an anonymous constructor.'; }; console.log(obj.message); // 输出 "Created by an anonymous constructor."
JavaScript 在数组中的对象调用
当数组中包含对象时,可以通过索引来访问这些对象,并调用其方法或访问属性:
const arr = [
{ name: 'Alice', age: 25, sayHello: function() { console.log('Hi, I am Alice!'); } },
{ name: 'Bob', age: 30, sayHello: function() { console.log('Hey, it’s Bob here!'); } }
];
// 调用数组中对象的方法
arr[0].sayHello(); // 输出 "Hi, I am Alice!"
arr[1].sayHello(); // 输出 "Hey, it’s Bob here!"
// 访问数组中对象的属性
console.log(arr[0].name); // 输出 "Alice"
console.log(arr[1].age); // 输出 30
JavaScript 遍历对象
JavaScript 中的对象通常以键值对的形式存储数据。遍历对象的方式有多种,常见的包括:
-
for...in
循环:
用于遍历对象自身的(非继承的)可枚举属性。const person = { name: 'John', age: 30, city: 'New York' }; for (let key in person) { if (person.hasOwnProperty(key)) { console.log(`${key}: ${person[key]}`); } }
注意,
for...in
也可能遍历到原型链上的可枚举属性,因此有时需要配合hasOwnProperty
方法来确保只遍历对象自身的属性。 -
Object.keys(obj).forEach(key)
:
使用Object.keys
获取对象的所有自身可枚举属性名,再通过forEach
遍历。Object.keys(person).forEach(key => { console.log(`${key}: ${person[key]}`); });
-
Object.entries(obj).forEach(([key, value])
:
使用Object.entries
获取对象的所有自身可枚举属性及其对应的值,以键值对数组形式,再遍历。Object.entries(person).forEach(([key, value]) => { console.log(`${key}: ${value}`); });
JavaScript 遍历数组
遍历数组的方法有多种,根据需求选择合适的方式:
-
for
循环:
通过索引来遍历数组。const numbers = [1, 2, 3, 4, 5]; for (let i = 0; i < numbers.length; i++) { console.log(numbers[i]); }
-
forEach()
:
提供一个回调函数,对数组中的每个元素依次执行。numbers.forEach((num, index, array) => { console.log(`Element at index ${index}: ${num}`); });
-
map()
:
创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后的返回值。const squared = numbers.map(num => num * num); console.log(squared); // 输出 [1, 4, 9, 16, 25]
-
for...of
循环:
直接遍历数组的值,而非索引。for (let num of numbers) { console.log(num); }
-
避免使用
for...in
循环遍历数组:
for...in
主要用于遍历对象的属性,虽然也可用于数组,但由于可能遍历到非整数索引的属性(如数组的自定义方法),且效率较低,因此不推荐用于遍历数组。
总结起来,JavaScript 中的匿名函数是一种灵活的函数定义方式,适用于多种场景;在数组中调用对象的方法或访问属性,需通过索引来定位对象;遍历对象和数组时,有多种内置方法和循环结构可供选择,应根据具体需求选择最适合的遍历方式。