gpt4 book ai didi

javascript - 如果在 javascript 中以不同方式访问属性,性能会有所不同吗?

转载 作者:行者123 更新时间:2023-11-30 11:37:34 24 4
gpt4 key购买 nike

想象一个树状对象obj1,您希望以这种方式访问​​它

obj1[prop1"]["prop1_1"]["prop1_1_1"]//做点什么

但是我不想直接访问它,所以我写了一个递归函数来帮助我访问这个对象的任何子元素的任何属性,就像这样:

function getProperty(obj, path) {
if(path.length == 1)
return obj[path[0]];
return getProperty(obj[path[0]], path.slice(1));
}

现在我这样调用它:getProperty(obj1, ["prop1", "prop1_1", "prop1_1_1"])

直接访问它和使用我的递归函数而不是函数调用(和切片)访问它之间有什么性能差异吗?

PS:我需要这个的原因是,我想访问嵌套属性,但我不知道这些属性是否存在,如果不存在,我想返回一个默认值。为了便于阅读,我没有在上面的函数中实现它。

最佳答案

因此直接访问它比使用函数和递归具有更好的性能。这是有道理的,因为在调用函数时,操作系统必须为您做一些准备。如果您了解汇编,它实际上会在调用函数之前先复制必要的内存数据。以下基准显示了结果。

'use strict';

var obj = {
prop1: {
prop1_1: {
prop1_1_1: 'hi'
}
}
};

var start = new Date();
for (var i = 0; i < 1000000; i++) {
obj["prop1"]["prop1_1"]["prop1_1_1 "];
}
var duration1 = new Date() - start;

function getProperty(obj, path) {
if (path.length == 1)
return obj[path[0]];
return getProperty(obj[path[0]], path.slice(1));
}

var start = new Date();
for (var i = 0; i < 1000000; i++) {
getProperty(obj, ["prop1", "prop1_1", "prop1_1_1"]);
}
var duration2 = new Date() - start;

// duration1 < duration2
console.log(duration1);
console.log(duration2);

关于javascript - 如果在 javascript 中以不同方式访问属性,性能会有所不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43812584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com