
本文介绍如何使用 for...in 循环遍历 javascript 对象,安全高效地修改嵌套对象中所有产品的 price 属性——统一降低 20%,适用于初学者理解对象遍历、属性访问与原地更新的核心技巧。
本文介绍如何使用 for...in 循环遍历 javascript 对象,安全高效地修改嵌套对象中所有产品的 price 属性——统一降低 20%,适用于初学者理解对象遍历、属性访问与原地更新的核心技巧。
在 JavaScript 中,当数据以对象字面量形式组织(如按 product1、product2 等键名存储多个产品)时,for...in 是最直观的遍历方式。它会枚举对象自身可枚举的字符串键,非常适合处理这种“键-值对集合”结构。
以下为完整实现代码:
const products = {
product1: {
name: 'Pasta',
price: 25,
quantity: 5, // 注:原文拼写为 quanity,已修正为标准 spelling 'quantity'
},
product2: {
name: 'Pizza',
price: 20,
quantity: 3,
},
product3: {
name: 'Cola',
price: 8,
quantity: 4,
},
};
// 使用 for...in 遍历 products 对象的每个键(如 'product1')
for (const key in products) {
// 确保只处理对象自身的属性(避免原型链污染)
if (products.hasOwnProperty(key)) {
const product = products[key];
// 安全检查:仅当 price 存在且为数字时执行计算
if (typeof product.price === 'number' && !isNaN(product.price)) {
product.price = Math.round(product.price * 0.8 * 100) / 100; // 保留两位小数,避免浮点误差
}
}
}
console.log(products);
// 输出示例:
// {
// product1: { name: 'Pasta', price: 20, quantity: 5 },
// product2: { name: 'Pizza', price: 16, quantity: 3 },
// product3: { name: 'Cola', price: 6.4, quantity: 4 }
// }
✅ 关键要点说明:
-
for (const key in obj)遍历的是对象的键名,需通过obj[key]获取对应值; - 建议始终配合
hasOwnProperty()检查,防止意外修改继承属性; - 对价格等敏感数值,推荐用
Math.round(... * 100) / 100控制精度,避免0.8 * 8 = 6.400000000000001类浮点误差; - 此操作是原地修改(mutating),不创建新对象。如需不可变更新(推荐用于 React 或函数式编程),应使用
Object.fromEntries()+map()构建新对象。
? 小结:掌握 for...in 遍历对象 + 属性动态访问(obj[key])+ 条件安全赋值,是处理配置型、分组型数据的基础能力。多加练习,你将轻松应对类似“批量打标”“统一启用/禁用”等常见需求。










