[英]javascript prototype loop for in array
我正在研究一個使用大量“javascript”的項目。 我有很多“ajax”調用,它總是返回“json”數組。 由於有用的原因,我創建了兩個Array對象的原型(“in_array”函數和“shuffle”函數)。
由於我做了原型,我的所有“for in”循環都被打破了(兩次顯示“未定義”......)我調查了谷歌和stackoverflow,我現在知道我的錯誤。 當然,如果我刪除我的原型,“undefined”就會消失。
但是,我沒有找到我所有的答案。
首先,我看到很多次,使用“for in”循環是不好的,為什么?
我在“PHP”或“蟒蛇”開發過,我是愛“中”或“的foreach”循環。
其次,我得到了很多“for in”循環,所以我更喜歡改變我的原型,而不是改變我的循環。 將我的原型切換到正常函數並保持“for in”循環是否非常臟?
第三,我讀到JQuery可以糾正這個錯誤。 我的項目確實得到了JQuery,解決方案是什么(我只讀了JQuery可以糾正這個,而不是如何)。
謝謝,
編輯:我的原型代碼:
// FONCTIONS ARRAY
Array.prototype.shuffle = function () {
for (var i = this.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var tmp = this[i];
this[i] = this[j];
this[j] = tmp;
}
return this;
}
Array.prototype.in_array = function (needle) {
for(var i = 0; i < this.length; i++) {
if(this[i] == needle)
return true;
}
return false;
}
這是地圖功能的樣子。 我把它寫在了我的頭頂,所以可能有錯誤。
function object_map(object, callback) {
var key, ret = {};
for (key in object) {
if (Object.prototype.hasOwnProperty.call(object, key)) {
ret[key] = callback(key, object[key]);
}
}
return ret;
}
你的問題出現了:
因為你要向Array.prototype
添加(可枚舉的)函數,這些函數會在你枚舉任何數組時出現。
因為你不應該使用for ... in
來枚舉數組,僅用於枚舉對象鍵。
如果您知道自己在ES5瀏覽器上運行,則可以使用Object.defineProperty
安全地向Array.prototype
添加函數:
Object.defineProperty(Array.prototype, 'shuffle', {
value: function() {
...
}
});
默認為創建非可枚舉屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.