gpt4 book ai didi

javascript - 代理索引被转换为字符串

转载 作者:行者123 更新时间:2023-11-29 21:14:47 26 4
gpt4 key购买 nike

尝试新的 Proxy objects ,令我惊讶的是,当设置代理时, key 会自动转换为字符串:

var arr = ['a', 'b', 'c'];

arr = new Proxy(arr, {
get: (original, key) => {
alert(typeof key);
return original[key];
}
});

arr[1]; // expected an alert with 'number'; got 'string' instead

我希望 typeof keynumber,因为我传递给它的是一个数字。但是,它会以某种方式在 Proxy 中转换为字符串,而实际的警报类型是 string。你可以see a small JSFiddle here这表明了问题。 arr 即使在通过代理传递之后仍然是一个数组。

那么,我如何区分传递一个字符串和一个数字?我可以像在 /\d+/.test(key) 中那样使用正则表达式,但是它不会区分这些情况,感觉就像一个 hack:

arr['1'];
arr[1];

最佳答案

属性键只能是字符串或符号。如果您使用不同的东西,比如数字,它总是首先被转换为字符串。因此,在使用 Proxy 时,您无法区分这两种操作:

arr['1'];
arr[1];

它们都将触发以 '1' 作为属性键的 Proxy get 处理程序。


此外,您使用数组这一事实不会改变任何东西——它对数组(特殊类型的对象)的作用与对普通对象的作用相同。


另见 The Object Type in the specification .

关于javascript - 代理索引被转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39880064/

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