Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyjaśnienie skryptu - wartość lub {}
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
esp
Witajcie.

Zacząłem ostatnio odświeżać wiadomości o JS i zatrzymałem się na problemie, którego rozkminić nie mogę i poszukiwania w google (może nieskuteczne) nie przyniosły wyjaśnienia.

Chodzi mianowicie o taki kod:


function repeat(options) {
options = options || {};
for (var opt in (repeat.defaultOptions || {})) {
if (!(opt in options)) {
options[opt] = repeat.defaultOptions[opt];
}
}
for (var index = 0; index < options.times; ++index) {
alert(options.rant);
}
}
repeat.defaultOptions = { times: 2, rant: 'IE6 must die!' };

rozumiem prawie całość oprócz 2 linijek:

options = options || {};

(repeat.defaultOptions || {})

moje pytanie jest o co chodzi z tym || {}?

Wydaje mi się, że trzeba to czytać "lub ..." ale nie wiem co dalej i jak to ugryźć.

Z góry dziękuje za pomoc
wookieb
Proszę wstawić bbcode.
[JAVASCRIPT] pobierz, plaintext
  1. var zmienna = cos || jakakolwiek_inna_wartosc;
[JAVASCRIPT] pobierz, plaintext

Oznacza, że jeżeli "cos" bedzie puste to zamiast niej będzie podstawiona wartośc jakakolwiek_inna_wartosc;
W skrócie można to przetłumaczyć na
[JAVASCRIPT] pobierz, plaintext
  1. var zmienna = cos;
  2. if (!cos) {
  3. zmienna = jakakolwiek_inna_wartosc
  4. }
[JAVASCRIPT] pobierz, plaintext
wszerad
Z tym lub masz racje, natomiast te klamry to definicja obiektu za pomocą JSON. Musisz też wiedzieć, że jeżeli zmienna jest undefined to wywali błąd ale kiedy obiekt nie ma danej własności(np: options.cos) to błędu już nie wywala, mało tego if(obj.undefined) bedzie false jeżeli obj.undefined == undefined/null/false/0 i true w przeciwnym wypadku.
  1. //{} == new Object();
  2. var obj = {name : 'Adam', old : 14};
  3. obj.old == 14;
  4.  
  5. var zmienna = cos || jakakolwiek_inna_wartosc; //jak napisałem wyżej wywali tu błąd i kod nie będzie dalej wykonywany jeżeli cos będzie niezdefiniowane dlatego wookieb może wprowadzać w błąd
  6. var zmienna = true || 9; //zmienna == true
  7. var zmienna = false || 9; //zmienna == 9


esp
Oki, super dzięki.

Więc tak:
[JAVASCRIPT] pobierz, plaintext
  1. options = options || {}
[JAVASCRIPT] pobierz, plaintext
oznacza do zmiennej options przypisz to co przychodzi z parametru lub ustal na pusty obiekt JSON, tak?

a ten drugi:
[JAVASCRIPT] pobierz, plaintext
  1. var opt in (repeat.defaultOptions || {})
[JAVASCRIPT] pobierz, plaintext
oznacza, że do opt w każdym kroku przypisuje klucz z repeat.defaultOptions lub tworze pusty obiekt? No ale kiedy w takim przypadku opt będzie pustym obiektem JSON?
wookieb
Nie. Najpierw decyduje czy iterować po pustym obiekcie czy też po repeat.defaultOptions;
Iteracja po pustym obiekcie = 0 wykonań kodu w bloku for smile.gif

Zrób coś takiego
[JAVASCRIPT] pobierz, plaintext
  1. for (var opt in ({some:'data'} || {})) {
  2. console.log(opt); // mam nadzieje, że wiesz co to console.log
  3. }
  4.  
  5. // a potem to
  6. for (var opt in (undefined || {})) {
  7. console.log(opt);
  8. }
[JAVASCRIPT] pobierz, plaintext

i zobacz rezultaty.
esp
Super dzięki wielkie, już pojąłem smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.