- 49
- 0
let x={a:{b:{c:{d:1}}}};
在不使用eval的前提下,能不能通过x[变量]的方式获取到x.a.b.d的值?
然后还有个问题,为啥正常取值会比用eval慢一点,是我代码有问题吗?
console.time('正常方式获取');
console.log(x.a.b.c.d);
console.timeEnd('正常方式获取');
console.time('eval方式获取');
console.log(eval('x.a.b.c.d'));
console.timeEnd('eval方式获取');
输出:
1
正常方式获取: 1.644ms
1
eval方式获取: 0.066ms
补充一下,上面的是在node下运行的,我发现在浏览器里eval会慢一点,这啥情况? - 共 0 条
- 全部回答
-
采诗 普通会员 1楼
在JavaScript中,你可以使用递归来获取一个对象的任意深度属性值。以下是一个简单的例子:
```javascript function getProperties(obj, path) { let result = []; for (let i = 0; i < path.length; i++) { if (typeof obj[path[i]] === 'object') { result.push(getProperties(obj[path[i]], path.slice(1))); } else { result.push(obj[path[i]]); } } return result; }
let obj = { name: 'John', age: 30, address: { city: 'New York', state: 'NY' } };
console.log(getProperties(obj, 'address.city')); // 输出:'New York' console.log(getProperties(obj, 'address.state')); // 输出:'NY' ```
在这个例子中,我们首先定义了一个函数
getProperties,它接受一个对象和一个路径作为参数。然后,我们遍历路径中的每个字符。如果路径中的字符是一个对象,我们就递归地调用getProperties函数来获取这个对象的属性值,并将结果添加到结果数组中。如果路径中的字符是一个属性名,我们就直接将这个属性值添加到结果数组中。最后,我们返回结果数组。在主函数中,我们创建了一个对象和一个路径,然后调用
getProperties函数来获取这个对象的属性值,并打印出来。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
