Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyjaśnienie skryptu - wartość lub {}
esp
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 1
Dołączył: 18.09.2006
Skąd: Skarżysko

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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
Go to the top of the page
+Quote Post
wszerad
post
Post #3





Grupa: Zarejestrowani
Postów: 106
Pomógł: 18
Dołączył: 11.12.2008

Ostrzeżenie: (0%)
-----


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




Ten post edytował wszerad 1.11.2011, 23:07:27
Go to the top of the page
+Quote Post
esp
post
Post #4





Grupa: Zarejestrowani
Postów: 11
Pomógł: 1
Dołączył: 18.09.2006
Skąd: Skarżysko

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
wookieb
post
Post #5





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Nie. Najpierw decyduje czy iterować po pustym obiekcie czy też po repeat.defaultOptions;
Iteracja po pustym obiekcie = 0 wykonań kodu w bloku for (IMG:style_emoticons/default/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.
Powód edycji: [wookieb]:
Go to the top of the page
+Quote Post
esp
post
Post #6





Grupa: Zarejestrowani
Postów: 11
Pomógł: 1
Dołączył: 18.09.2006
Skąd: Skarżysko

Ostrzeżenie: (0%)
-----


Super dzięki wielkie, już pojąłem (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 19:11