尝试新的代理对象时,我很惊讶当设置代理时,键会自动转换为字符串:
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 key
会是number
,因为我传递了一个数字。但是,它会以某种方式转换为内部字符串,Proxy
并且实际的警报类型是string
. 您可以在此处看到一个展示问题的小型 JSFiddle 。arr
即使通过代理,它仍然是一个数组。
那么,我如何区分传递字符串和数字呢?我可以像 in 一样将其正则表达式/\d+/.test(key)
,但是它不会区分这些情况,而且感觉就像一个 hack:
arr['1'];
arr[1];