使用 'Object.keys().forEach()' 遍历对象会更改值类型



请考虑以下示例代码:

let obj = {a: '1', b: '2'};
Object.keys(obj).forEach(function(key, val){
console.log(typeof val);    //returns: number
});
console.log(typeof obj['a']);   //returns: string

我觉得这种行为非常有趣。为什么要这样做?我认为这在某些情况下与 JavaScript 自动解析变量(例如将数字连接到字符串(并将所述变量传递给回调函数有关。

我也很好奇是否有一种简单的方法来保留原始值类型?我知道你可以强制使用特定类型,但它有一种方法可以让它根据最初传递的内容保留一个数字或字符串,而不是添加一个变量,然后设置为变量类型?

Array.prototype.forEach的回调被赋予三个参数,即当前值、索引和数组本身。val是第二个参数(实际上应该给它一个更合适的名称(,所以它是索引,它是一个数字。

这可能有助于您了解:

let obj = {a: '1', b: '2'};
Object.keys(obj).forEach(function(key, idx, arr){
console.log("Key:", key);
console.log("Index:", idx);
console.log("Original Array:", arr);
console.log("Value:", obj[key]);
});

或者,您可以使用Object.entries直接访问值(带解构(:

let obj = {a: '1', b: '2'};
Object.entries(obj).forEach(function([key, val], idx, arr){
console.log("Key:", key);
console.log("Index:", idx);
console.log("Original Array:", arr);
console.log("Value:", val);
});

val只是一个 foreach 迭代器索引号。您需要使用obj[key]来获取值

forEach 中的第一个参数是一个值,第二个参数是数组的索引

let obj = {a: '1', b: '2'};
Object.keys(obj).forEach(function(key, index){
console.log(typeof index);    //returns: number
console.log(typeof key);      //returns: string
});
console.log(typeof obj['a']);   //returns: string

最新更新