Pracuję nad tym animation function, ale mam problem. Nie mogę wykonać zadania, które powinno być łatwe, nie mogę uzyskać długości obiektu. Jeśli sprawdzisz, że jsFiddle widać, że jestem uruchomiony alert(properties.length);
i wraca undefined
. Czy ktokolwiek może zrozumieć, dlaczego tak się dzieje?Długość literału obiektu JavaScript === niezdefiniowana?
Odpowiedz
obiekt JavaScript prostu zrobić nie mają właściwość length
tylko Arrays
zrobić. Jeśli chcesz poznać liczbę właściwości, które są zdefiniowane w obiekcie, musisz wykonać iterację i policzyć je.
Ponadto, pętla for in
jest podatny na błędy z powodu przedłużenia Object.prototype
ponieważ w będą przemierzać pełną prototyp łańcuch i wyliczyć wszystkie właściwości, które są na łańcuchu.
Przykład
// Poisoning Object.prototype
Object.prototype.bar = 1;
var foo = {moo: 2};
for(var i in foo) {
console.log(i); // logs both 'moo' AND 'bar'
}
trzeba stosować metody hasOwnProperty od obiektu w celu odfiltrowania tych niepożądanych właściwości.
// still the foo from above
for(var i in foo) {
if (foo.hasOwnProperty(i)) {
console.log(i); // only logs 'moo'
}
}
Wiele środowisk JavaScript tam przedłużyć prototyp, nie używając hasOwnProperty
często prowadzi do strasznych błędów.
Aktualizacja
chodzi o rzeczywisty problem, że kod nie jest animacja zarówno właściwości.
for(var p in properties) {
...
for(var i = 0; i <= frames; i++)
{
setTimeout((function(exti, element) {
return function() {
// p gets overriden by for outer for in loop
element.style[p] = original + (pixels * exti) + 'px';
}
// you need to pass in a copy of the value of p here
// just like you do with i and element
})(i, element), i * (1000/60), element);
}
....
}
Na tej samej liczbie wiele bibliotek tam (takich jak jQuery) rozpadnie się strasznie, jeśli rozszerzysz object.prototype, więc jeśli użyjesz jednej z nich hasOwnProperty to po prostu marnowanie cykli procesora. –
@Martin Jespersen Sprzedajesz więc kod z napisem "OSTRZEŻENIE WYKORZYSTUJESZ WYŁĄCZNIE Z RAMAMI A, B, C"? Przykro nam, ale używanie 'hasOwnProperty' * jest ** dobrą praktyką. –
Nie mam już dość sieci wypełnionej kodem javascript, który jest tak daleki od zoptymalizowania, że nawet chromowane dławiki na nim, to znowu, myślę, że powinienem być wdzięczny, ponieważ zarabiam pieniądze na sprzątaniu bałaganu, który inni robią: P –
Obiekty nie mają długości, w razie potrzeby należy użyć tablicy.
Jeśli trzeba znaleźć liczbę właściwości w obiekcie istnieje tylko jeden sposób:
var length =0;
for(var i in obj) length++;
Użyj hasOwnProperty, proszę. –
Dlaczego, jak? Do czego ma zastosowanie hasOwnProperty? – Olical
Lepiej po prostu * nie * zaktualizować Object.prototype? Kto tak robi? To naprawdę świetny przykład! –
Jeśli używasz Underscore.js, można użyć _.size()
:
_.size({one : 1, two : 2, three : 3});
=> 3
Nie widziałem jeszcze źródła, ale mam nadzieję, że 'size()' bierze pod uwagę 'hasOwnProperty'. – RaphaelDDL
ten jest obsługiwany w środowiskach node.js i nowszych.
var obj = {a: "a", b: "b"};
Object.keys(obj).length // 2
Brak obsługi w IE8, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys#Browser_compatibility –
Oto ogólna funkcja @Junaid Qadir Shekhanzai dla „znalezienie długość obiektu” (który, jak powiedziano nam, powinny być właściwie zwanego „liczenie właściwości obiektu”). Łączy on w sobie rozwiązania z @Ivo Wetzel i @Martin Jespersen:
function countProperties(myObj){
var length = 0;
if(typeof myObj != 'object'){
return false;
}
for(var i in myObj) {
length++;
}
return length;
}
- 1. JavaScript - Zalety literału obiektu
- 2. Głębokie przypisanie literału obiektu JavaScript
- 3. Długość obiektu w maszynopisie?
- 4. Jak zwrócić wartość z literału obiektu na podstawie klucza?
- 5. javascript window.URL jest niezdefiniowana funkcja
- 6. JavaScript: zmienna TypeError jest niezdefiniowana
- 7. długość całkowita w javascript
- 8. Dlaczego ta właściwość obiektu jest niezdefiniowana?
- 9. Jak uzyskać dostęp do elementu zewnętrznego z literału obiektu zagnieżdżonego?
- 10. Czy tworzenie instancji literału obiektu jest szybsze niż ustawianie właściwości?
- 11. JavaScript przyciąć ciąg na długość
- 12. Reguły niecytowanych kluczy literackich obiektu JavaScript?
- 13. Dlaczego funkcja mapy javascript jest niezdefiniowana?
- 14. Jaka jest maksymalna długość obiektu NSString?
- 15. Statyczny ciąg literału?
- 16. Czy mogę ograniczyć długość tablicy w JavaScript?
- 17. Aktualizacja właściwości obiektu javascript?
- 18. Typ JavaScript obiektu niestandardowego
- 19. JavaScript - budowa obiektu JSON
- 20. javascript: ustawienie właściwości obiektu
- 21. zrozumienie obiektu obietnicy javascript
- 22. Porównanie obiektu daty JavaScript
- 23. Prototyp obiektu JavaScript Poisoning
- 24. Javascript - inicjator obiektu?
- 25. JavaScript właściwość obiektu cytuje
- 26. Identyfikator obiektu JavaScript
- 27. Usuwanie pojedynczego obiektu z obiektu JavaScript
- 28. jQuery TypeError: $ jest niezdefiniowana
- 29. Tworzenie obiektu JavaScript z dwóch tablic
- 30. Dodaj obiekt JavaScript do obiektu JavaScript
możliwe duplikat [Długość JavaScript asocjacyjna] (http://stackoverflow.com/questions/5223/length-of-javascript-associative-array) – ripper234