Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript过滤函数的堆栈溢出_Javascript_Stack Overflow - Fatal编程技术网

使用JavaScript过滤函数的堆栈溢出

使用JavaScript过滤函数的堆栈溢出,javascript,stack-overflow,Javascript,Stack Overflow,嘿,伙计们,我试着用JavaScript模拟一个带有对象的数组。我原以为用getter模拟length函数很容易,但我的filter函数似乎导致了堆栈溢出。不知什么原因,我搞不清楚出了什么问题。你能发现错误吗 常数o={ 0:'你好', 1:'那里', 法克伦:=>{ 返回Object.keysthis.length }, 获取长度{ const keys=Object.keysthis; const filtered=keys.filterkey=>typeof this[key]!='fu

嘿,伙计们,我试着用JavaScript模拟一个带有对象的数组。我原以为用getter模拟length函数很容易,但我的filter函数似乎导致了堆栈溢出。不知什么原因,我搞不清楚出了什么问题。你能发现错误吗

常数o={ 0:'你好', 1:'那里', 法克伦:=>{ 返回Object.keysthis.length }, 获取长度{ const keys=Object.keysthis; const filtered=keys.filterkey=>typeof this[key]!='function'; 日志'filteredarray',filtered; 返回长度; } }; 控制台。记录“正确吗?”,o、 长度; 控制台。记录“错误”,o、 法克伦 正道

常数o={ fn:函数{}, 0:'你好', 1:'那里', fakeLen:函数{//不是箭头FN 返回Object.keysthis.length } }; //定义getter Object.definePropertyo,“长度”{ 可枚举:false, get:函数{ const keys=Object.keysthis; const filtered=keys.filterkey=>{ console.logthis[key],type of this[key] 此[键]的返回类型!=“函数” }; 日志'filteredarray',filtered; console.log'filtered.length',filtered.length 返回长度; } } 控制台。日志“长度”,o.长度; 控制台.日志'fakeLen',o.fakeLen 正道

常数o={ fn:函数{}, 0:'你好', 1:'那里', fakeLen:函数{//不是箭头FN 返回Object.keysthis.length } }; //定义getter Object.definePropertyo,“长度”{ 可枚举:false, get:函数{ const keys=Object.keysthis; const filtered=keys.filterkey=>{ console.logthis[key],type of this[key] 此[键]的返回类型!=“函数” }; 日志'filteredarray',filtered; console.log'filtered.length',filtered.length 返回长度; } } 控制台。日志“长度”,o.长度; 控制台.日志'fakeLen',o.fakeLen 当您对此调用Object.keys方法时,您将获得对象中的所有属性,因此键将如下所示:

["0", "1", "fakeLen", "length"]
然后,在筛选每个键时,对上述数组中的每个元素使用括号表示法。因此,您将执行以下操作:

typeof this["length"] != 'function'
由于length是get的getter,this[length]将导致再次调用length方法,从而重复该过程,直到出现堆栈溢出

常数o={ 获取长度{ 这个[长度]; } }; o、 length在此调用Object.keys方法时,将获得对象中的所有属性,因此键看起来像:

["0", "1", "fakeLen", "length"]
然后,在筛选每个键时,对上述数组中的每个元素使用括号表示法。因此,您将执行以下操作:

typeof this["length"] != 'function'
由于length是get的getter,this[length]将导致再次调用length方法,从而重复该过程,直到出现堆栈溢出

常数o={ 获取长度{ 这个[长度]; } };
o、 length.filter方法本身必须为length调用getter。filter方法本身必须为length调用getter!现在这是有道理的。我不知道是什么触发了长度函数!谢谢你,尼克!现在这是有道理的。我不知道是什么触发了长度函数!