Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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_Hasownproperty - Fatal编程技术网

Javascript 测试自身属性的模糊方法

Javascript 测试自身属性的模糊方法,javascript,hasownproperty,Javascript,Hasownproperty,在David Flanagan第147页的《Javascript:the definitive Guide第六版》一书中,作者讨论了在循环中使用for..遍历数组时的注意事项,下面是一段引文(粗体是我的) …因此,不应在数组上使用For/in循环,除非 您将包括一个附加测试以过滤掉不需要的属性。 您可以使用以下任一测试: for(var i in a) { if (!a.hasOwnProperty(i)) continue; // Skip inherited properties

在David Flanagan第147页的《Javascript:the definitive Guide第六版》一书中,作者讨论了在循环中使用for..遍历数组时的注意事项,下面是一段引文(粗体是我的)

…因此,不应在数组上使用For/in循环,除非 您将包括一个附加测试以过滤掉不需要的属性。 您可以使用以下任一测试:

for(var i in a) {
   if (!a.hasOwnProperty(i)) continue; // Skip inherited properties
   // loop body here
}

for(var i in a) {
   // Skip i if it is not a non-negative integer
   if (String(Math.floor(Math.abs(Number(i)))) !== i) continue;
}
现在,第一个代码片段对我来说很清楚了,继承的属性将被跳过

然而,第二段代码对我来说一点也不清楚

据我所知,第二个代码段将跳过数组的任何非数字属性(无论它是否为自有属性(与第一个代码段不同))

但是如果是这样的话,你就不能使用一个简化的测试,比如:

if (Number(i) != i) continue;
那么,作者为什么要使用如此复杂的表达方式呢


我在这里遗漏了什么吗?

不,这里有一些失败的例子:

浮点数:
var a=[1,2,3];
a['1.5']='busted';
对于(a中的var i){
如果(数字(i)!=i)继续;
document.getElementById('output1')。textContent+=i+'\n';
}
对于(a中的var i){
if(String(Math.floor(Math.abs(Number(i)))!==i)继续;
document.getElementById('output2')。textContent+=i+'\n';
}
编号(i)!=我
字符串(Math.floor(Math.abs(Number(i)))!=我

实际上,它将跳过评论中所说的所有非负数。(例如,将跳过-5)。不仅仅是非数值。第二个问题是原型继承的数值属性(如果有人这样做的话)是否需要数字和字符串转换以及严格相等?难道下面的人不会做同样的事吗<代码>数学地板(数学abs(i))!=我@Danield我想你在这种情况下使用非严格平等是可以的。就个人而言,我试图避免非严格的平等,就像许多开发者一样。对于那些使用负浮点数作为属性名的人来说,有没有一种特殊的地狱级别?@toniedzwiedz。还有在电影院和油炸松饼上聊天的人。