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

Javascript 为什么不可枚举属性';不影响阵列内置方法吗?

Javascript 为什么不可枚举属性';不影响阵列内置方法吗?,javascript,arrays,object,defineproperty,Javascript,Arrays,Object,Defineproperty,我在玩描述符参数的方法和可枚举属性。在MDN上,您可以阅读以下说明: 可枚举:true当且仅当此属性在枚举相应对象上的属性时显示。默认值为false 然而,我想知道为什么它不影响遍历iterable对象的方法,比如。在下一个示例中,您可以看到使用for。。。对于。。。在中 让arr=[1,2,3,4,5]; defineProperty(arr,“4”,{value:99,可枚举:false}); log(“用于遍历不可枚举属性的…”); 用于(arr的常数) { 控制台日志(ele); }

我在玩
描述符
参数的方法和
可枚举
属性。在
MDN
上,您可以阅读以下说明:

可枚举:
true
当且仅当此属性在枚举相应对象上的属性时显示。默认值为
false

然而,我想知道为什么它不影响遍历iterable对象的方法,比如。在下一个示例中,您可以看到使用
for。。。对于。。。在

让arr=[1,2,3,4,5];
defineProperty(arr,“4”,{value:99,可枚举:false});
log(“用于遍历不可枚举属性的…”);
用于(arr的常数)
{
控制台日志(ele);
}
log(“For…in不遍历不可枚举属性:”;
用于(arr中的常量键)
{
console.log(arr[key]);
}
.as控制台{背景色:黑色!重要;颜色:石灰;}
.作为控制台包装器{最大高度:100%!重要;顶部:0;}
这是因为。虽然最常见的是定义每个键的密集数组,但也支持稀疏数组,其中只定义了少数键。为了支持这一点,数组迭代需要能够迭代实际不存在的键。例如:

const arr=[];
arr[0]=0;
arr[10]=10;
console.log('has 0',arr.hasOwnProperty(0))
console.log('has 1',arr.hasOwnProperty(1))
对于(让val of arr){
控制台日志(val);

}
我不确定我是否理解您的问题,可能需要稍加重写,以便更清楚地了解您实际提出的问题:提出您的问题,然后展示您在自己的测试中使用的代码,然后解释您希望看到的内容、您看到的内容以及原因(针对每个差异)这不是你所期望的吗?@Mike'Pomax'Kamermans首先,如果我不太清楚,很抱歉。英语不是我的母语,所以我滥用谷歌翻译。我只是想了解为什么遍历数组的数组
内置方法不会受到
不可枚举属性的影响(毕竟,数组是特殊对象)。到目前为止,我认为配置只会影响一些对象方法。相关文档感谢您的解释,这和注释中提到的
迭代器
链接帮助我理解。因此,基本上,
non-enumerable
属性不影响使用迭代器遍历特殊对象(如数组、映射或集合)的方法,它们只影响遍历对象的可枚举属性的方法。