此代码:
allUID = $("#allservices_"+categoryUID).attr("value").split(',');
使用
应用于元素value="
1298698f-62a0-41da-9303-563e317f97a1,
75b79dc8-873f-4e80-9174-64e3bf0b7e7b,
7add7028-dd32-40cc-baa3-a8dbdfe36dc0,
0b136659-19e5-4b58-9b58-23a5ba7383fe,
73a6a712-4aae-4101-ad36-77feea188aad,
8f5d7f01-b854-4a6f-9cf6-cc6554835c8a,
f0c1d8dc-a96d-402a-b41b-74f753a4c313,
770d1178-8c17-4e9d-8a31-bff8a15097b3
"
返回:
0 "1298698f-62a0-41da-9303-563e317f97a1"
1 "75b79dc8-873f-4e80-9174-64e3bf0b7e7b"
2 "7add7028-dd32-40cc-baa3-a8dbdfe36dc0"
3 "0b136659-19e5-4b58-9b58-23a5ba7383fe"
4 "73a6a712-4aae-4101-ad36-77feea188aad"
5 "8f5d7f01-b854-4a6f-9cf6-cc6554835c8a"
6 "f0c1d8dc-a96d-402a-b41b-74f753a4c313"
7 "770d1178-8c17-4e9d-8a31-bff8a15097b3"
contains function()
removeDoubles function()
reversed function()
这些额外功能来自哪里?
答案 0 :(得分:5)
最有可能的是,您使用for ( in )
迭代生成的数组。不要那样做;使用普通的for
循环或jQuery的each()
。
代码中的其他位置可能会扩充Array
原型,并且不会将属性指定为不可枚举(仅适用于defineProperty()
和朋友的最新JavaScript版本。)
jsFiddle(不要这样做)。
您应该使用val()
,而不是attr('value')
。
答案 1 :(得分:1)
它们是添加到数组原型中的函数(可能是您在页面上包含的脚本)。它们不是数组的一部分,但是当使用for .. in迭代数组时它们可能是个问题。
大多数人认为扩展内置对象的原型并不是一个好习惯,所以如果可以,我建议更换它们。否则,使用常规for循环for .. in。
答案 2 :(得分:0)
您的代码库中的其他内容是将这些函数添加到Array实例中。我不知道是什么,因为jQuery和Prototype都没有添加这些功能。
注意一些答案表明数组的原型已经改变 - 可能不是这种情况。根据你输出它们的方式,一些库可能已经将这些函数添加到数组本身,而不是它的原型(这是坏的)。
答案 3 :(得分:0)
用这个迭代你的数组:
for (var i = 0, len = allUID.length; i < len; i++) {
console.log(allUID[i]);
}
以这种方式迭代数组时,您将看不到任何这些额外的属性。
这些额外的项目是因为您使用for (i in allUID) {}
迭代数组,并且将获取已使用某些框架或填充程序添加到Array对象的额外属性。您永远不应该使用for (x in array)
迭代数组。使用该表单仅用于迭代对象的所有属性。
答案 4 :(得分:-1)
可能来自jQuery。如果jQuery添加Array.prototype.contains
,Array.prototype.removeDoubles
和Array.prototype.reversed
,我不会感到惊讶。