gpt4 book ai didi

javascript - 如何将数组用作属性名称?

转载 作者:行者123 更新时间:2023-12-02 07:44:53 27 4
gpt4 key购买 nike

这段代码是如何工作的?

if (!(args in pad)) {
pad[args] = self.apply(obj, arguments);
}

args 是一个数组,但它不是一个字符串,因为它是 JS 对象的键吗?检查将如何工作? 对象中的数组?

完整上下文 here :

Function.prototype.memoize = function() {
var pad = {};
var self = this;
var obj = arguments.length > 0 ? arguments[i] : null;

var memoizedFn = function() {
// Copy the arguments object into an array: allows it to be used as
// a cache key.
var args = [];
for (var i = 0; i < arguments.length; i++) {
args[i] = arguments[i];
}

// Evaluate the memoized function if it hasn't been evaluated with
// these arguments before.
if (!(args in pad)) {
pad[args] = self.apply(obj, arguments);
}

return pad[args];
}

memoizedFn.unmemoize = function() {
return self;
}

return memoizedFn;
}

最佳答案

args 被转换为一个字符串,对于数组意味着:

[1,2,3].toString() == "1,2,3"; //true

中使用时会自动转为字符串:

( [1,2,3] in ( {"1,2,3":""} ) ) //true

发生这种情况是因为 in 运算符只接受左侧的字符串。

当您使用 pad[args] 时,同样的转换会再次发生,因为对象键只能是字符串。例如,当您使用 array[1] 时,实际发生的是 array["1"],因为数字已转换为字符串。

关于javascript - 如何将数组用作属性名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7788554/

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