string.split()返回额外的项目(函数)

时间:2011-10-23 10:23:38

标签: javascript jquery

此代码:

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()

这些额外功能来自哪里?

5 个答案:

答案 0 :(得分:5)

It didn't happen for me

最有可能的是,您使用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.containsArray.prototype.removeDoublesArray.prototype.reversed,我不会感到惊讶。