Otázky na pohovor Javascript. Výzva na pochopenie JavaScriptu. Buzzword - kari

  • 18.04.2019

Na pohovoroch sa často radi pýtajú rovnaký typ otázok, na ktoré sú odpovede už dávno naučené.

Dnes zvážime tie otázky, ktoré sa zriedka spomínajú.

Takže, začnime!

1. Čomu sa rovná foo.x?

var foo = (n: 1);
var bar = foo;
foo.x=foo=(n:2);

Túto otázku si kladú 3 % najlepších spoločností (Apple, Google, Facebook).

Hlavná vec, ktorú treba poznamenať, je, že foo, na ktoré odkazuje foo.x, je „nastavené“ pred zmenou foo. foo.x odkazuje na starú hodnotu foo.

  • Nechaj lref byť výsledkom hodnotenia Výraz na ľavej strane.
  • Nechaj ref byť výsledkom hodnotenia Výraz priradenia.

To znamená, že v starom foo bude nová vlastnosť x rovná (n: 2) . A bude napísané nové foo (n: 2) .

Hodnota starého foo je v baroch:

// bar
{
n: 1
X:(
n: 2
}
}

Keďže pri ďalšom odvodení foo.x, náš foo odkazuje na svoju novú hodnotu, ktorá neobsahuje x , potom bude foo.x podľa toho nedefinovaný -  undefined .

Odpoveď: nedefinované

2. Napíšte funkciu sčítania ako add(num1)(num2)..

Poznámka: Počet termínov nie je obmedzený

V origináli je tento problém vyriešený takto:

Const add = (a) => (
nech súčet = a;
const func = (b) => (
ak (b) (
súčet += b;
funkcia návratu;
) inak (
návratnosť;
}
};
funkcia návratu;
); pridať(2)(3)(); // 5;

Ale potom si dáte jednu podmienku.

Odstráňte nadbytočné zátvorky na konci
pridať(2)(3) // 5 pridať(1)(2)(5) // 8 ...

Teraz sa úloha stala ťažšou. Riešenie spočíva v prekonaní metódy hodnota .

Const add = (a) => (
nech súčet = a;
const func = (b) => (
súčet += b;
funkcia návratu;
};
func.valueOf = () => suma; funkcia návratu;
); console.log(add(2)(3)); // 5;

Keď zavoláme console.log , očakáva, že uvidí reťazec, ak tam nie je, tak sa to pokúsi urobiť z prijatej hodnoty Reťazec.

Vo vyššie uvedenom príklade je po vykonaní add(2)(3) vrátená funkcia, ktorú console.log zmení na String, počas týchto akcií sa zavolá metóda valueOf na konverziu funkcie na primitívnu, a tak predefinované túto metódu, potom vráti našu hodnotu súčtu namiesto predvolenej hodnoty.

Poznámka:

Tento príklad nefunguje so všetkými konzoly.

3. Čo bude výstup do konzoly? Vysvetli prečo.

var a=(),
b=(kľúč:"b"),
c=(kľúč:"c");

a[b] = 123;
a[c]=456;

console.log(a[b]);

Čo sa deje? Keď je na objekte nastavená nová vlastnosť, JavaScript to implicitne urobí stringify hodnoty. Vo vyššie uvedenom kóde sú b a c oba objekty, takže sú oba skonvertované na "" (String). Pretože stringify hodnoty sú rovnaké, ukáže sa, že priraďujeme novú hodnotu rovnakú nehnuteľnosť.

Je to ekvivalentné písať:

Var a=(),
b="objekt",
c="objekt";

a[b] = 123;
a[c]=456;

4. Napíšte jednoduchú funkciu, aby ste zistili, či sa jeden zo vstupov rovná 3.

Tu sa kladie dôraz na testovanie vedomostí o argumentoch, ale niekedy idú ešte ďalej a pýtajú sa, ako to funguje Array.prototype.slice.call(argumenty).

Funkcia isThreePassed()(
const args = Array.prototype.slice.call(arguments);
return args.indexOf(3) != -1;
) isThreePassed(1,2) //false
isThreePassed(9,3,4,9) //pravda

Ako vieme, argumenty nie pole, ale obyčajný objekt, takže taký nemá užitočná metóda ako indexOf. Na tento účel sa používa Array.prototype.slice.call(argumenty), ktorý robí z argument -> pole.

Ale napriek tomu, ako to funguje?

.call() a. použiť() vám umožňujú explicitne nastaviť toto vo funkcii. A ak prejdete argument ako tento, potom plátok bude s ním pracovať ako s bežným poľom.

Tu je zaujímavý experiment:

Konšt. o = (
"0": "nula",
"1": "jeden"
); .slice.call(o); // ; const oo = (
"0": "nula",
"1": "jeden",
dĺžka: 2
); .slice.call(oo); // ["nula", "jedna"];

5. Skombinujte dve polia s vnorením

], ] ->

Problém sa dá vyriešiť rôzne cesty. Väčšinou chcú vedieť, či opýtaný pozná takú metódu ako znížiť .

Cieľom je iterovať cez všetky prvky pôvodného poľa a jeho „podpolí“, aby sa vrátili nájdené hodnoty v nové pole. Toto sa deje rekurzívne, kým sa nedostaneme k poslednému prvku.

Pomáha nám to aj pri vytváraní nového poľa konkat .

Const flatten = (arr) => arr.reduce((flat, toFlatten) => flat.concat(Array.isArray(toFlatten) ? flatten(toFlatten) : toFlatten), );

To je všetko! 🙏🏼 👍

Dobrý deň, milý hosť! Som rád, že vás môžem privítať na stránkach môjho blogu.

Dnes budeme rozprávať o tom, aké otázky sú kladené na technickom pohovore pre kandidáta na pozíciu Javascript developer. Cieľom je skontrolovať požadovaná úroveň znalosť jazyka kandidáta a teoretickú prípravu.

Chcel by som vyjadriť svoju vďaku Senior Frontend Developer Grechenok Evgeny a Senior Backend Developer Gizzatov Marcel za pomoc pri vytváraní tohto článku. Tie otázky, ktoré idú ďalej, sú z ich školiaceho manuálu, ktorý používajú na pohovory s kandidátmi „za 30 tisíc aj za 130“. Mnohokrat dakujem Chlapci, za čas, ktorý mi venovali, a myslím si, že na pohovore bol pre mňa dobrý podnet odstrániť medzery vo vlastných vedomostiach a urobiť ďalší krok k tomu, aby som sa stal profesionálom.

Otázky týkajúce sa JavaScriptu (funkcie syntaxe a jazyka)

1. Ak potrebujete skontrolovať, či je vlastnosť definovaná na samotnom objekte... (hasOwnProperty)
2. Ako to funguje (http://bonsaiden.github.io/JavaScript-Garden/en/#function.this)
3. Uzávierky (http://bonsaiden.github.io/JavaScript-Garden/ru/#function.closures)
4. Definícia premenných (plávajúce)
5. Premenné let, const, var (https://learn.javascript.ru/let-const)
6. Rovnosť a porovnanie (operátor == a ===)
7. Operátory Typeof a instanceof (pre ktoré sa používajú http://bonsaiden.github.io/JavaScript-Garden/ru/#types.instanceof)
8. Prečo nemôžete použiť eval (http://bonsaiden.github.io/JavaScript-Garden/en/#core.eval)
9. Deštrukturalizácia (https://learn.javascript.ru/destructuring)
10. Reťazce šablón (https://learn.javascript.ru/es-string)
11. Triedy (prototypy, moderné)
12. Iterátory (https://learn.javascript.ru/iterator)
13. Generátory (https://learn.javascript.ru/generator)
14. Nové typy údajov (https://learn.javascript.ru/set-map)
15. Čo je to Eventloop? Vysvetlite, ako to funguje.

Všeobecné programovacie otázky

  1. Rozdiel medzi kompilovaným jazykom a interpretovaným jazykom
    Ako sa kompilácia C líši od Java
  2. Rozdiel medzi statickým písaním a dynamickým písaním
  3. Rozdiel medzi dedičstvom a zložením (https://habrahabr.ru/post/325478/)
  4. Algoritmy a ich zložitosť (JS https://tproger.ru/translations/algorithms-and-data-structures/)
    a. V prílohe k akémukoľvek jazyku uveďte príklady štandardných metód na triedenie / prechádzanie stromom / vyhľadávanie v poli, diktát s vysvetlením ich zložitosti a spôsobu fungovania.
  5. FIFO, LIFO
  6. Dátové štruktúry (JS https://learn.javascript.ru/data-structures)
    a. Čísla, reťazce
    b. Objekty (asociatívne polia), prechádzajúce odkazom (to, čo odovzdáva hodnota)
    c. Polia
    d. Stromy, zoznamy (prepojené, referenčné)
  7. Architektúra (aký je rozdiel)
    a. asynchrónne,
    b. viacvláknové
  8. Mikroslužby
    a. Budú mikroslužby distribuovanou architektúrou prostredníctvom spoločnej dátovej zbernice
    b. Požiadavky na mikroslužby
    i. horizontálne škálovanie
    ii. odolnosť proti chybám
  9. Výhody mikroslužieb:
    i. ľahká podpora(malé služby sú jednoduchšie)
    ii. neexistujú žiadne obmedzenia na jazyky a knižnice na riešenie problému
    iii. Zjednodušené testovanie, možnosť uzamknutia interakcií
    iv. jednoduché rolovanie a vracanie nových verzií
    v. môžete experimentovať s technológiou

Agilné metodiky

  1. Prečo potrebujeme
  2. Aké prístupy existujú
  3. Identifikácia problémov vo vývoji, prečo potrebujeme retrospektívu v scrume
  4. Rozdelenie úloh vývojármi
    • termíny horia
    • plánovanie

A nakoniec...

Výzva na pochopenie JavaScriptu

Úloha 1. Čo bude výstupom tohto kódu?

Var b = 5; var a = function() ( alert(b); ); a();

Účel úlohy: skontrolovať pochopenie uzáveru.

Téma: Uzavretie.

Odpoveď: Na základe definície uzáveru – schopnosti funkcie zapamätať si rozsah premennej, v ktorej bola deklarovaná, je správna odpoveď 5. Funkcia a si zapamätal obsah predtým deklarovanej premennej mimo funkcie a po výstupe funkcie ju odovzdal do výstrahy 5.

Koľko len chcete.

  • 3 sekundy po spustení skriptu je potrebné zobraziť nejakú správu s upozornením. Ako to spraviť?

Takže:

Alebo takto:

  • Ako sa líši dedičnosť v JavaScripte od dedenia v PHP?

Na rozdiel od PHP, kde je možné dedičstvo vykonať jedným spôsobom, v JavaScripte existuje veľa takýchto spôsobov. Na jazykovej úrovni sa implementuje dedenie na prototypoch.

V JavaScripte môže mať každý objekt asociáciu s iným objektom – takzvaný „prototyp“ (prototyp). V prípade hľadania nejakej vlastnosti (alebo metódy) v pôvodný objekt skončí neúspešne, interpret sa pokúsi nájsť rovnomennú vlastnosť (metódu) vo svojom prototype, potom v prototype prototypu atď. Napríklad, ak by sme požadovali volanie obj.prop (alebo, čo je úplne rovnaké, obj["prop" ]), JavaScript začne hľadať vlastnosť prop v samotnom obj, potom v prototype obj, prototype prototypu obj a tak ďalej až do konca.

  • Uveďte príklad dedenia v JavaScripte.

Nechajte napríklad objekt „mačka“ zdediť objekt „zviera“.Pri dedení na prototypoch je to implementované ako referencia

Alebo tu je trochu podrobnejší príklad. MyType je zdedený z Obj:


  • Pár slov o objektoch v JavaScripte?

Objekty (sú to aj asociatívne polia, hashe) a práca s nimi v JavaScripte sú implementované inak ako vo väčšine jazykov. Objekt v JavaScripte je regulárny asociatívne pole alebo inými slovami „hash“. Ukladá ľubovoľný kľúč => zhody hodnôt a má niekoľko štandardných metód.

  • Čo je to metóda objektu v JavaScripte?

Objektová metóda v JavaScripte je jednoducho funkcia, ktorá sa pridáva do asociatívneho poľa.

  • Prečo písať var pred premennou v JavaScripte?

Ak vytvoríte premennú prostredníctvom normálneho priradenia, vytvorí sa „globálna premenná“. Príklad:

Ak vytvoríte premennú pomocou slova var, potom sa vytvorí „lokálna premenná“, ktorá po ukončení funkcie prestane existovať. Príklad:

  • Existujú dve funkcie:funkcia f(a,b) ( návrat a+b ) a var f = funkcia (a,b) ( návrat a+b ).Je medzi nimi rozdiel? Ak existuje, ktorý?

Je rozdiel vo viditeľnosti funkcie. Variant funkcie bez var je viditeľný všade v aktuálnom rozsahu. Vrátane až samotnej definície funkcie. Variant var priraďuje funkciu k premennej, takže funkcia je viditeľná až po jej definovaní.

  • Ako vytvoriť pole v JavaScripte?

Tu je niekoľko spôsobov.

  • Je možné použiť funkciu ako konštruktor v JavaScripte?

Páči sa ti to:

  • Koľko a ktoré slučkové konštrukty sú v JavaScripte?

Tri: na, kým a do... kým.

  • Čo kód robí: značka zlomu; ?

Opustí prúdovú slučku alebo blok spínača na štítku " značka“.

  • Je možné definovať pole takto: var a = "a,b".split(",")?

Áno môžeš.

  • Čo bude upozornenie (typeof null); ?

Vytlačí správu "objekt".

  • A toto: alert(null instanceof Object); ?

Vytlačí správu „false“.

  • 0.1 + 0.2 == 0.3 ?

Nie, pretože vypočítaná hodnota bude 0,30000000000000004. Ide o akt výpočtovej presnosti a nezobrazuje sa len v JavaScripte.

  • Čo bude varovať (typ NaN); ?

"číslo"

  • Čo upozorní (NaN === NaN); ?

"falošný"

  • Aký je rozdiel medzi vlastnosťami innerHTML a externalHTML?

Vlastnosť innerHTML ľubovoľného prvku DOM obsahuje kód HTML, ktorý sa nachádza vo vnútri tohto prvku. Pri nastavovaní novej hodnoty pre túto vlastnosť prehliadač znova vykreslí interný kód HTML.

externalHTML je takmer rovnaké ako innerHTML, rozdiel je v tom, čo vracia úplné html prvok.

Tiež je dôležité poznamenať, že innerHTML podporujú všetci moderné prehliadače, zatiaľ čo externalHTML je podporovaný v IE (s určitými rozdielmi od iných prehliadačov), v najnovšom verzie Opery a v prehliadačoch založených na najnovšom WebKit (Safari, Chrome), ale nie je podporovaný vo Firefoxe.

Pre kód:

innerHTML vráti:

externalHTML vráti:


  • Aký je rozdiel medzi operátormi == a ===?

Operátor == porovnáva pre rovnosť, ale === porovnáva pre identitu. Výhodou operátora === je, že nevnucuje dve hodnoty rovnakého typu. Preto sa bežne používa.

  • Aký je rozdiel medzi Object.getOwnPropertyNames() a Object.keys()?

Object.getOwnPropertyNames() vracia vymenovateľné a nespočítateľné vlastnosti z objektu alebo poľa.

Object.keys() vracia vymenovateľné vlastnosti z objektu alebo poľa.

  • Aký jazykový konštrukt možno použiť na riadenie toku vykonávania skriptu a sledovanie chýb?

To je možné pomocou konštrukcie try()... catch().

  • Prečo volať a(); uspeje a volanie funkcie b(); zobrazí chybové hlásenie?

Funkcia a() sa inicializuje vo fáze načítania skriptu, ako keby sa „vznášala“ a funkcia b sa inicializuje, keď je deklarovaná premenná b

  • Čo sú globálne premenné? Ako vznikajú? Aké sú problémy spojené s používaním globálnych premenných?

Globálna premenná je premenná, ktorá je dostupná (viditeľná) v celom dokumente, na rozdiel od lokálnej premennej (obmedzenej na blok programový kód, v rámci ktorej je definovaný)

Väčšina Vývojári JavaScriptu vyhýba sa použitiu globálnych premenných. Jedným z dôvodov je možný konflikt medzi názvami globálnych a lokálnych premenných. Kód využívajúci globálne premenné môže byť tiež náročnejší na údržbu a testovanie.

  • Čo sú uzávery v JavaScripte?

Jednoducho povedané, ide o vnútornú funkciu, t.j. funkcia v rámci funkcie.

Uzavretie (uzavretie) sa nazýva preto, že po exekúcii materskej resp vonkajšia funkcia, interný kód stále „žije“ v interpretači a je možné ho spustiť. K chybám nedôjde ani vtedy, ak vnútorná funkcia (uzáver) používa premenné z vonkajšej funkcie.Túto funkciu možno použiť napríklad na vytvorenie funkcií obsluhy udalostí:


  • Napíšte funkciu, ktorá vezme reťazec s názvom súboru a vráti príponu (fragment za poslednou bodkou).

    • Čo je prototyp v javascripte?

    Vo všeobecnosti je prototyp vlastnosť, ktorá vám umožňuje pridávať vlastnosti k už existujúcim objektom a používa sa aj na emuláciu dedenia tried v JavaScripte. Podrobná odpoveď je napísaná tu. Ďalšou možnosťou je spomenúť Prototype.js. Toto je populárna knižnica, ktorá do programov JavaScript pridáva pohodlné funkcie OOP.

    • Aké spôsoby zavesenia obsluhy udalostí poznáte?

    Udalosti je možné pridať tromi spôsobmi:

    • htmlElement.onclick = function(event) ( .... ) - týmto spôsobom môžete pridať iba jeden handler
    • htmlElement.addEventListener("click", ...) - týmto spôsobom môžete zavesiť niekoľko handlerov, zachová poradie handlerov
    • htmlElement.attachEvent("on"+event_name, handler) - môžete pripojiť aj niekoľko, nezachováva poradie handlerov, nie je prístup k prvku, na ktorom sa udalosť spustila.

Na pohovory ma pozývajú dobrovoľne, neviem, dôvodom je pekná fotografia v životopise alebo jeho obsah. Pokiaľ ide o životopis, potom strávim dve alebo tri hodiny opisom technológií používaných v každej súčasnej práci. Niekedy sa pozerám cez ostatných, ako sú navrhnuté, a zrazu nájdem niečo užitočné pre seba ...

Úlohy

Začnime niečím jednoduchším.

1. Existuje nejaký reťazec (var str = "fgfggg";), čo sa stane, ak vezmeme str?

Odpoveď

str vráti znak reťazca, ktorý má index nula. Reťazec v js je nemenný, to znamená, že znak z neho možno prečítať, ale nie zapísať.


2. Implementujte metódy, ktoré by v procese vykonávania riadku (2).plus(3).mínus(1) dali na výstupe 4.

Odpoveď

Keďže pracujeme s číslami, musíme prototyp Number rozšíriť o nové metódy.

Number.prototype.plus = funkcia (hodnota) (vráti túto + hodnotu; ) Number.prototype.mínus = funkcia (hodnota) (vráti túto - hodnotu; )
Dvojka bude dostupná cez toto vo funkcii plus. Z nej vrátime výsledok sčítania čísla, na ktoré ukazuje toto, a čísla odovzdaného ako argument. Rovnako tak do mínusu.


3. Teraz zriedkavé, ale stále sa pýtate: „Prečo je zlé písať priamo do prototypov základných typov?“

Odpoveď

Array.prototype.sort = funkcia () () var t = ; zoradiť ()
Očakávaný výsledok je a vráti sa nedefinované.
To očakávame štandardné metódy pracovať podľa dokumentácie, ale niektorí vývojári môžu túto metódu prepísať a vráti úplne neočakávaný výsledok.
To je dôvod, prečo knižnica prototype.js ustúpila jQuery.


4. Daná funkcia berie reťazce "*", "1", "b", "1c" ako argumenty, implementuje ju tak, aby vrátila reťazec "1*b*1c"

Odpoveď

Dá sa to vyriešiť priamo na čele, triedením všetkých argumentov v slučke, ale budeme konať múdrejšie.

Funkcia getStr() ( return .slice.call(arguments, 1).join(arguments) )


5. Daný strom, musíte nájsť súčet všetkých vrcholov.

Odpoveď

Problém som vyriešil rekurziou, potom sme riešenie zjednodušili a potom sme ho prepísali do frontu.

Rekurzia.

var sum = 0; function getSum(obj) (sum += obj.valueNode; if (obj.next != null) (for (var i = 0; i< obj.next.length; i++) { getSum(obj.next[i]); } } return sum; } var tree1 = { valueNode: 1, next: [ { valueNode: 3, next: null }, { valueNode: 2, next: null } ] } var tree = { valueNode: 3, next: [{ valueNode: 1, next: null }, { valueNode: 3, next: null }, { valueNode: 2, next: null }, { valueNode: 2, next: [ { valueNode: 1, next: null }, { valueNode: 5, next: null } ] }] }; console.log(getSum(tree1)); sum = 0; console.log(getSum(tree));
Otočte sa.

Funkcia getSum(obj) ( var arr = , suma = 0, aktuálny; while(dĺžka arr > 0) ( aktuálny = arr.shift(); suma += aktuálny.valueNode; if (aktuálny.next != null) ( pre (var i = 0; i< current.next.length; i++) { arr.push(current.next[i]); } } } return sum; } var tree = { valueNode: 3, next: [{ valueNode: 1, next: null }, { valueNode: 3, next: null }, { valueNode: 2, next: null }, { valueNode: 2, next: [ { valueNode: 1, next: null }, { valueNode: 5, next: null } ] }] }; getSum(tree)


6. Je možné zmeniť hodnoty v pred, po od js?

Odpoveď

Nie, jediné, čo môžeme urobiť, je odstrániť triedu, ktorá má pred alebo po zadanú, alebo ju naopak pridať.


Urobme niečo na vyloženie mozgu, otázka na rozloženie.

7. Umiestnite tri bloky 20X20px za sebou do bloku so šírkou 60px, pričom bloky musia mať okraje.

8. Ako sa aplikujú zaoblené rohy na prvky a štýly na text (font, typ písma, farby atď.)?

Odpoveď

Vlastnosti štýlu sa použijú na všetky prvky s textom, ak značky nemajú špecifikované pravidlá štýlu. Odkazy majú napríklad predvolenú farbu textu a tá má prednosť pred farbou, ktorú sme definovali v tele. Faktom je, že pre mnohé vlastnosti je predvolená hodnota zdediť, teda ako rodič. Ukazuje sa, že stúpa, kým nedosiahne telo.
Pre vlastnosť border-radius naopak platí len pre tag, že chceme mať zaoblené rohy.


9. Čo je to obnovenie štýlu?

Odpoveď

Mnoho tagov je štylizovaných predvolene, pri rozložení ich musíme predefinovať. Aby sa to nerobilo zakaždým, „masívne“ ich „vyhadzujeme“. Za týmto účelom spustíme súbor pre štýly, zahrnieme ho ako prvý alebo do prvého súboru štýlov, úplne hore špecifikujeme naše štýly pre základné značky.
Napríklad. Na rozloženie ponuky často používame zoznam ul, preto sme nútení zakaždým resetovať výplň, okraj a typ štýlu. Štýly môžete nastaviť raz a zoznamy budú bez vonkajších a vnútorných hraníc a bez značiek.


10. Vyskakovacie okno je potrebné rozmiestniť v strede, poznáme jeho rozmery, ale nechceme, aby sa posúvalo spolu so stránkou a na výšku nemusí zodpovedať výške obrazovky.

Odpoveď

telo ( pretečenie: skryté; ) .wrap ( poloha: pevná; hore: 0; vľavo: 0; šírka: 100 %; výška: 100 %; pretečenie-y: auto; farba pozadia: rgba(230, 230, 230, .1); ) .popup ( pozícia: absolútna; šírka: 400 pixelov; výška: 300 pixelov; vpravo: 0; vľavo: 0; hore: 0; dole: 0; okraj: auto; )


11. Nakreslite polkruh so štýlmi.

Odpoveď

šírka: 100px výška: 100px; border-right: 1px solid #f00; okraj-polomer: 0 50 % 50 % 0;


12. Existuje pole, v ktorom ležia objekty s dátumami, zoradené podľa dátumov.

Odpoveď

var arr = [(dátum: "01/10/2017"), (dátum: "11/05/2016"), (dátum: "13/21/2002")]; arr.forEach(funkcia(položka) ( var arrDate = item.date.split("."), dátum = nový Dátum (Číslo (Dátum arr), Číslo (Dátum arr), Číslo (Dátum arr)); item.time = dátum. getTime(); )); arr.sort(funkcia (a, b) ( if (a.time - b.time< 0) { return false; } else { return true; } }); var res = arr.map(function (item) { return {date: item.date}; }); console.log(res);


13. Existuje niekoľko slov, zistite, či pozostávajú z rovnakých písmen ("cat", "current", "oct")

Odpoveď

var arr = ["kot", "tok", "okt"], arr1 = ["kot", "tok", "ott"]; funkcia sameWords(arr) ( var slovo1, slovo2; for (var i = 0; i< arr.length-1; i++) { word1 = 0; word2 = 0; if (arr[i].length !== arr.length) { return false; } else { for (var j = 0; j < arr[i].length; j++) { word1 += arr[i][j].charCodeAt(0); word2 += arr[j].charCodeAt(0); } if (word1 !== word2) { return false; } } } return true; } console.log(sameWords(arr)); console.log(sameWords(arr1));

O sľuboch

AT nedávne časyľudia sa často začali pýtať na sľub, čo to je, aké metódy riešenia chýb, či je možné sa bez nich zaobísť. (14, 15, 16)

Odpoveď

Začnem z diaľky, keďže js je asynchrónny, potom v dôsledku sledovania dokončenia určitých funkcií spätného volania boli odovzdané ako argumenty, ktoré boli volané hneď, ako boli pripravené. Reťazec asynchrónnych metód rástol, čo viedlo k Callback Hell, čo sťažovalo prácu s kódom, ladili chyby a nahradili ich sľuby.

Var promis = new Promise(funkcia (vyriešiť, odmietnuť) ( ... setTimeout(function () ( resolve(res); ), 5000); ));
Viaceré sľuby je možné spojiť a získať z nich odpoveď naraz
var sľubyObrázky = ; pre (nech i = 0; i< count; i++) { promisesImages.push(new Promise((resolveImg, rejectImg) =>( nech img = new Image(), startTime = Date.now(); img.src = this.imgUrl + "?" + Math.floor(Math.random() * 100000000); img.onload = () => ( resolveImg(Date.now() - startTime); ); img.onerror = cancelImg; ))); ) Promise.all(promisesImages) .then((timings) => (...))


17. A samozrejme otázka na doplnenie: „Ako sa zaobídete bez sľubov?“.

Odpoveď

Starým spôsobom bola zavedená premenná počítadla a hneď ako prišiel koniec ďalšej asynchrónnej akcie, premenná bola porovnaná s celkovou.


18. Tiež som si spomenul na otázku o riešení chýb v sľuboch. Na server máme tri požiadavky, jedna nám vráti používateľské meno, druhá jeho údaje a tretia obrázok pre avatara, pre každú požiadavku použijeme prísľub, spojíme ich do reťazca, čo sa stane, ak sa v jednej vyskytne chyba zo žiadostí, bude reťaz dokončená?

Odpoveď


Sľuby stále pribúdajú a Callback Hell je nahradený Promise Hell. Čo robiť?

Odpoveď

function test() ( return new Promise(function (resolve) ( setTimeout (function () ( resolve(1); )) )) ) async function test1() ( var res = wait test(); console.log(res + jeden);)
V skutočnosti sa vykonávanie test1, ako to bolo, „zastaví“ až do tohto momentu, kým nedostaneme odpoveď z testu. Už som o týchto metódach čítal, ale nevenoval som tomu veľkú pozornosť, ale akosi v rozhovore, ktorý sme o nich hovorili, ma prekvapilo: „Ako to, vykonávanie sa zastaví, nie je jasné, akú funkciu, kde je definované, keď je spätné volanie - tu je všetko jasné, môžete vidieť, čo sa stane vo funkcii po dokončení operácie, alebo môžeme vždy hľadať podľa názvu, opäť ako obvykle o kontexte. Na čo mi odpovedali, že mám javascript mozgu a som tak zvyknutý na asynchróniu, že synchrónne vykonávanie mi pripadá niečo za hranicami, ale v obláčiku, na ktorom som kedysi všetko synchrónne programoval, aj keď som čítal zo súboru, kým skončí, ďalej to nebude pokračovať.


(19) Tu je ďalší príklad asynchrónnosti. Vysvetlite, v akom poradí sa budú čísla zobrazovať a prečo.
denník konzoly (1); setTimeout(function() ( console.log(2); ), 0) console.log(3);
Docela populárne, musím povedať. Tu som to dostal znova. Už rozpracovaná začala odpovedať: „1, 3, 2. Keďže js je asynchrónny, no v jeho vnútri je front spustenia a setTimeout a setInterval, ak sú nastavené na 0, dajte volanie funkcie na koniec frontu.”
Tu treba povedať, že chalani neuspeli s tým, že som odpovedal správne, asi 132, ale nevysvetlili prečo.

(20) Vo všeobecnosti sú otázky o setTimeout a setInterval veľmi relevantné. Dostal som otázku: „Aký je minimálny čas, ktorý je možné nastaviť?“

Odpoveď

Každý prehliadač má svoje vlastné minimum, ak zadáte menej, potom oneskorenie stále nebude menšie ako minimum. Niekedy aj viac, ako je určený čas, keďže úloha sa dostane do frontu a čas je súčtom zadaného času plus nákladov na vykonanie úloh vo fronte pred ňou.

Kde bez uzáverov

Nie je to tak dávno, čo bol pre tento príklad pridelený celý článok (), čitatelia maľovali v komentároch všelijakými spôsobmi riešenia, od tradičných po fantastické. To sú tie, o ktorých zvyčajne hovorím na rozhovoroch.
pre (var i = 0; i< 10; i++) { setTimeout(function () { console.log(i); }, 100); }
21. Čo bude výstup do konzoly, ako sa dá upraviť príklad, aby vrátil správny výsledok (vymenujte čo najviac spôsobov)?

Odpoveď

Najčastejšie zabaľte do uzáveru

Pre (var i = 0; i< 10; i++) { (function (i) { setTimeout(function () { console.log(i); }, 100); })(i) }
Nie každý venoval pozornosť tomu, že v i môžete prejsť nielen kontextom

Pre (var i = 0; i< 10; i++) { setTimeout(function (i) { console.log(i); }.bind(this, i), 100); }
Môžete tiež odovzdať argumenty metódam setInterval a setTimeout, ktoré budú odovzdané ako argumenty funkcii spätného volania
pre (var i = 0; i< 10; i++) { setTimeout(function (i) { console.log(i); }, 100, i); }
es6

Pre (nech i = 0; i< 10; i++) { setTimeout(function () { console.log(i); }, 100); }
Jedna z funkcií es6, in tento prípad bude fungovať trochu neočakávane, nech nie je v bloku ().


Urobme niečo ťažšie.

22. Musíme napísať funkciu, ktorá vráti " ahoj svet“, no zároveň sa v tele funkcie nedajú použiť čísla ani písmená a dajú sa použiť cykly, polia, objekty, ale bez čísel.

Odpoveď

Bohužiaľ, títo zaujímaví ľudia mi nepovedali, ako to vyriešiť, takže po premýšľaní doma môžem len hádať.

Var nula = .dĺžka, jedna = [()].dĺžka, dva = [,].dĺžka, sedem = [,].dĺžka; console.log(String.fromCharCode(Číslo(Reťazec(sedem) + Reťazec(dva))));
Dostal som teda písmeno H, ale toto je stále tá istá zvrátenosť, zostáva urobiť zvyšných 10 znakov ...


(23) Od nich. Čísla od 1 do 100 ležia v poli, sú náhodne zmiešané, jedno číslo bolo odtiaľ odstránené, musíte zistiť, o aký druh čísla ide. algoritmus by nemal prekročiť zložitosť O(n^2).

Odpoveď

Prejdite cez pole a pridajte tam všetky číslice a odpočítajte od čísla získaného vzorcom (n + 1) / (n / 2).

Napadlo ma exotickejšie riešenie. Deti a osoby so slabým srdcom by sa nemali pozerať.

Var sum = 101*50, sumArr = eval(.join("+").replace("++", "+")), res; res = suma-sumArr;


Len som si spomenul, že sa raz pýtali: „Aký je najrýchlejší spôsob, ako nájsť súčet prvkov poľa?

Odpoveď

eval(.join("+")


Vtedy som si spomenul a neprišiel ani nič lepšie.

(24) Tu je ďalší problém zlyhania. Budem citovať doslovne, napíšu ako mi napísali.

Funkcia Book(meno, autor) ( this.name = meno; this.author = autor; return this; ) function Foo(Book, "Javascript Tutorial", "Peter Sergeev")
Implementujte Foo

Odpoveď

Bol som zrazený touto riadkovou funkciou Foo (Kniha, "Výukový program JavaScript", "Peter Sergeev"). Som jediný, kto tu vidí niečo zlé? Bolo mi ponúknuté riešenie cez Object.create (), ale nesúhlasím. Vlastnosti a metódy zapísané do samotnej funkcie konštruktora Object.create „neskopíruje“.

Function Book(meno, autor) ( this.name = meno; this.author = autor; return this; ) function Foo(Cclass, name, author) ( return Object.create(Cclass.prototype); ) var book = Foo( kniha, "js", "petr"); console.log(book.name); -> nedefinované
Samozrejme, nevzali ma a nakoniec mi poradili, aby som lepšie študoval teóriu. Vzlyk vzlyk.
V každom prípade by som sa radšej rozhodol tak.

Function Book(meno, autor) ( this.name = meno; this.author = autor; return this; ) function Foo(Cclass, name, author) ( return Cclass.call((), name, author); ) var book = Foo(kniha, "js", "petr"); console.log(book.name);
Chcem poradiť chalanom, aby sa lepšie pripravili na pohovory.

Hádanka palindrómu

(25) Áno, stále sa jej pýtajú. A párkrát ma dostala. Prvýkrát som začala riešiť v cykle, zdalo sa, že to ide, len bol problém s rôzne postavy, písanie nahradiť pre každý znak nie je možnosť a nie som silný v regulárnych výrazoch a bude to fungovať až do prvého vhodného výskytu. Nezvyknem nechávať za chrbtom niečo nepochopiteľné, a tak som prišiel na to, ako funkciu implementovať.

Funkcia jePalindrom1(str) ( if (str.toLowerCase().replace(/[^a-zA-ZoE]/g, "") === str.toLowerCase().replace(/[^a-zA-ZoE ] ]/g, "").split("").reverse().join("")) (vrátiť hodnotu true; ) else (vrátiť hodnotu false; ) )
Krásne, jednoduché, elegantné.

Je to smiešne, ale asi po roku som narazil na rovnakú otázku. Potešil som sa: "To je v pohode." Ako sa ukázalo, nie. Bolo potrebné ho vyriešiť pomocou cyklu a regulárny výraz bolo možné použiť len pre jeden znak. Hovorca to motivoval skutočnosťou, že nahradenie regulárnym výrazom v celom riadku je príliš náročné na zdroje.

Doma som rozmýšľal a prišiel som na toto:
function isPalindrom(str) ( var str = str.toLowerCase(), lim = str.length - 1, i = 0, j = str.length - 1; while (i<= lim) { if (/[^а-яА-ЯёЁ]/.test(str[i])) { i += 1; } if (/[^а-яА-ЯёЁ]/.test(str[j])) { j -= 1; } if (str[i] != str[j]) { return false; } i += 1; j -= 1; } return true; } console.log(isPalindrom("А роза упала на лапу Азора"));
26. Ako zahrnúť js, css? Výhody a nevýhody rôznych spôsobov?

Odpoveď

Dá sa urobiť pomocou značiek

priamo na stránke resp

V dátume, šup s týmto riadkom
");upozornenie (document.cookie);"

Pre dátové miesto môžete vrátiť nejaký kód, ktorý zatvorí volanie funkcie a spustí ho užívateľ.
Teraz to už opravili, ale predtým sa v json vyskytla kritická zraniteľnosť, s pomocou znaku prerušenia riadku sa zlomil.


32. Urýchlite načítanie stránky.

Odpoveď

1 minifikujte a zlúčte všetky súbory js do jedného
2 to isté s css
3 zbierajte obrázky do škriatkov
4 ukladanie do vyrovnávacej pamäte
a) súbory js a css sa ukladajú do vyrovnávacej pamäte navždy (alebo na dlhé obdobie, napríklad na rok), keď sa v nich vykonajú nejaké zmeny, v dôsledku vývoja sa zmení číslo verzie, prehliadač to považuje za nové súbory a nahrá ich. Čas vyrovnávacej pamäte je obsiahnutý v hlavičke expirácie.
b) súbor sa uloží do vyrovnávacej pamäte, kým sa nezmení. Keď používateľ navštívi stránku prvýkrát, ešte nemá vyrovnávaciu pamäť, súbory sa stiahnu a pri ďalšej výmene hlavičiek sa analyzuje ETag (haš súčtu obsahu súboru alebo hash času poslednej úpravy alebo číslo verzie) Ak sa zmenil, potom sa stiahne, inak sa vezme z hashu.
Môžete tiež vziať hlavičky s dátumom poslednej úpravy (Last_Modifed), ale je to menej spoľahlivé.
c) pred odoslaním môžete komprimovať dáta, rieši sa to nastavením konfigurácie v nginx. Príklad. Kódovanie obsahu: gzip
d) môžete rozdeliť js na moduly a podľa potreby ich pripojiť na rôznych stránkach.

Môžete ich nájsť ešte niekoľko, no sú menej populárne alebo zastarané.


33. CommonJS a AMD alebo modularita?

Odpoveď

Jeden princíp architektúry je asynchrónny a druhý je synchrónny. Ako príklad možno uviesť RequaerJ, podľa vzhľadu sa dá povedať, že je asynchrónny

Define([ mod1, mod2, mod3 ], funkcia (Mod1, Mod2, Mod3) ( new Mod1(); .... ));
define je vlastne jednoduchá funkcia, všetko, čo je napísané mimo nej, sa vykoná bez ohľadu na to, čo sa deje v define, takže funkcia spätného volania má jeden argument. Hneď ako sa načítajú všetky závislosti uvedené v poli, stanú sa interne dostupnými prostredníctvom argumentov funkcie spätného volania.
Modulový systém v Node.Js je naopak synchrónny. Píšeme:

varmod = requaer("modul");
a hneď pod modom môžete pracovať, všetko sa zastaví, kým sa modul nenačíta


34. Ďalší zaujímavý príklad. Implementujte metódy sedem, plus, jeden, päť, mínus, dva. sedem(plus(jeden())) -> 8. päť(mínus(dva())) -> 3

Odpoveď

Na pohovore som začal rozmýšľať takto:

Funkcia jedna(argument)( if (typeof arg === "funkcia") ( return arg(1); ) else ( return 1; ) ) funkcia sedem (argument) ( if (typeof arg === "funkcia") ( return arg(7); ) else ( return 7; ) ) function plus(arg) ( return function (a) ( return a + arg; ) )
Podobne sa píšu aj funkcie pre päť, mínus, dva. Už doma, rozmýšľajúc v pokojnej atmosfére, sa objavilo takéto rozhodnutie

Funkcia jedna(argument) ( return 1 + (argument || 0); ) funkcia dva(argument) ( return 2 + (argument || 0); ) funkcia päť(argument) ( return 5 + (argument || 0); ) funkcia sedem (argument) ( return 7 + (arg || 0); ) funkcia plus(arg) ( return arg; ) funkcia minus(arg) ( return -arg; )


35. Bublinové triedenie.

Áno, áno, stále sa jej pýtajú.

Odpoveď

var m = , počet = m.dĺžka - 1, max; pre (var i = 0; i< count; i++) { for (var j = 0; j < count - i; j++) { if (m[j] >m) (max = m[j]; m[j] = m; m = max; )))


36. Obrátená poľská notácia.

Základný princíp. Vzhľadom na riadok 23 + 1- sa po ňom začneme pohybovať, akonáhle dosiahneme prvé aritmetické znamienko, vezmeme pred ním dve čísla a namiesto nich zapíšeme výsledok výpočtu. Získajte 51-. Všetko začíname od začiatku.
Pre záujemcov tu je článok z wikipedie

Odpoveď

var zápis = "23+1-", zápis1 = "7 2 3 * -", zápis2 = "1 2 + 4 * 3 +"; funkcia getComputation(notation) ( var queue = , tmp, num1, num2; for (var i = 0; i< notation.length; i++) { if (/\d+/.test(notation[i]) === true) { queue.push(Number(notation[i])); } else { switch (notation[i]) { case "+": tmp = queue.pop() + queue.pop(); queue.push(tmp); break; case "-": num1 = queue.pop(); num2 = queue.pop(); if (num1 >num2) ( tmp = num1 - cislo2; ) else ( tmp = num2 - cislo1; ) queue.push(tmp); prestávka; case "*": tmp = queue.pop() * queue.pop(); fronta.push(tmp); prestávka; case "/": tmp = queue.pop() / queue.pop(); fronta.push(tmp); prestávka; ) ) ) návratový front; ) console.log(getComputation(notation)); console.log(getComputation(notation1)); console.log(getComputation(notation2));
Bolo mi povedané jeho princíp, takže implementujte iba mechanizmus.


37. Existuje div, má ďalší div, druhý má výplň 50 %, ako to bude celé vyzerať?

Odpoveď

Zalomenie (šírka: 200px; orámovanie: 1px plná zelená; ) .block (šírka: 200px; vypchávka dole: 50%; orámovanie: 1px plná červená; )


Spolubesedník mi navrhol, aby som videl, ako to funguje doma, hoci ma to veľmi zaujímalo.
Myslíte si, že je správne, aby ste si na pohovore odpovedali sami, ak sa s tým kandidát nevyrovnal?

38. Existuje riadok pozostávajúci z rôznych zátvoriek, skontrolujte, či sú všetky zatvorené. Príklad reťazca: "())(())(()]["

Odpoveď

function validBraces(str) ( var arrOpenSymbols = , vysledok = false, countOpenSymbols; if (str.length > 0) ( for (var i = 0; i< str.length; i++) { if (str[i] === "{" || str[i] === "[" || str[i] === "(") { arrOpenSymbols.push(str[i]); } else { countOpenSymbols = arrOpenSymbols.length; if ((str[i] === "}" && arrOpenSymbols[(countOpenSymbols-1)] === "{") || (str[i] === "]" && arrOpenSymbols[(countOpenSymbols-1)] === "[") || (str[i] === ")" && arrOpenSymbols[(countOpenSymbols-1)] === "(")) { arrOpenSymbols.pop(); } } } if (arrOpenSymbols.length === 0) { result = true; } else { result = false; } } return result; } console.log(""); console.log(validBraces("()")); console.log(validBraces("[)")); console.log(validBraces("{}()")); console.log(validBraces("([{}])")); console.log(validBraces("())({}}{()]["));
Ak boli odovzdané reťazce zo zátvoriek "(", "[", "]", ")".

Funkcia validBraces(str) ( try ( eval(str); return true; ) catch (err) ( return false; ) )


39. Napíšte kód, ktorý po kliknutí na ľubovoľný div v koreňovom adresári zobrazí jeho id v konzole.

koreň id1
id2
id3

Odpoveď

$("#root").on("kliknutie", funkcia (udalosť) ( event.stopPropogation(); console.log($(event.target).attr("id")); ))


40. Napíšte kód na vytvorenie objektu z poľa
// vstup poľa
var arr = [ (názov: "šírka", hodnota: 10), (názov: "výška", hodnota: 20) ]
// výstupný objekt
(šírka: 10, výška: 20)

Odpoveď

function getObj(arr) ( var obj = (); arr.forEach(function(item)( obj = item.value; )); return obj; )


41. Aký bude výsledok?

Vari = 10; var pole = ; while (i--) ( (funkcia (i) ( var i = i; array.push(function() ( return i + i; )); ))(i); ) console.log([ array(), pole(), ])

Odpoveď

Keďže kvôli funkcii

(funkcia (i) ()) (i);
vytvára uzáver, var i = i - sú už zahrnuté v uzáveroch.

Function() ( return i + i; )
na začiatku bude hľadať vo svojom dosahu i, nie ho nájsť, vystúpi na vyššiu úroveň a tam ho nájde. Funkcia vráti sumu, ktorú do poľa vloží posledný prvok.


42. Existuje funkcia a predmet. Napíšte všetky spôsoby, ktoré poznáte, ako zobraziť hodnotu x z objektu v konzole pomocou funkcie

Funkcia f() ( console.log(this.x); ) var obj = (x: "bar");

Odpoveď

f.call(obj, a, b); f.apply(obj, ); obj.funk = funkcia f() ( console.log(this.x); ) obj.funk(); funkcia f() ( console.log(this.x); ).bind(obj, a, b); f();


43.
function Book() ( this.name = "foo" ) Book.prototype = ( getName: function() ( return this.name; ) ); var kniha = new Book(); Book.prototype.getUpperName = function() ( return this.getName().toUpperCase(); ) book.getUpperName();
Čo metóda vráti?
a) chyba, pretože metóda je deklarovaná neskôr ako inštancia
b) vráti "FOO"

Odpoveď


44. V js sú premenné deklarované takto:
a = 3; b="ahoj"; function showBlock() ( var block1 = document.getElementsByClassName("block1"), block2 = document.getElementsByClassName("block2"); if (!(block1.childNodes.length > 0)) ( block2.style.display = "blok "; ) ) document.addEventListener("DOMContentLoaded", funkcia () ( showBlock(); ));

Samozrejme, toto nie sú všetky úlohy, ktoré som mal možnosť vyriešiť, niektoré som bezpečne zabudol, niektoré sú príliš banálne, veľa otázok len pre teóriu zostalo v zákulisí.

Iné

Tu je niekoľko ďalších otázok, ktoré sa priamo netýkajú frontu, ale pravdepodobne nie je zbytočné vedieť.
Ideálne rozhranie z vášho pohľadu?
Ako by ste vytvorili webovú stránku zabezpečenú proti poruchám?
Aké typy zraniteľností poznáte?

Štítky: Pridajte štítky

Koľko len chcete.

  • 3 sekundy po spustení skriptu je potrebné zobraziť nejakú správu s upozornením. Ako to spraviť?

Takže:

Alebo takto:

  • Ako sa líši dedičnosť v JavaScripte od dedenia v PHP?

Na rozdiel od PHP, kde je možné dedičstvo vykonať jedným spôsobom, v JavaScripte existuje veľa takýchto spôsobov. Na jazykovej úrovni sa implementuje dedenie na prototypoch.

V JavaScripte môže mať každý objekt asociáciu s iným objektom – takzvaný „prototyp“ (prototyp). Ak vyhľadávanie nejakej vlastnosti (alebo metódy) v zdrojovom objekte zlyhá, interpret sa pokúsi nájsť vlastnosť (metódu) rovnakého mena v jeho prototype, potom v prototype prototypu atď. Ak sme napríklad požadovali volanie na obj.prop (alebo, čo je presne to isté, obj["prop")], JavaScript začne hľadať vlastnosť prop v samotnom objekte obj, potom v prototype obj, prototype prototypu obj, a tak ďalej až do konca.

  • Uveďte príklad dedenia v JavaScripte.

Nechajte napríklad objekt „mačka“ zdediť objekt „zviera“.Pri dedení na prototypoch je to implementované ako referencia

Alebo tu je trochu podrobnejší príklad. MyType je zdedený z Obj:


  • Pár slov o objektoch v JavaScripte?

Objekty (sú to aj asociatívne polia, hashe) a práca s nimi v JavaScripte sú implementované inak ako vo väčšine jazykov. Objekt v JavaScripte je len asociatívne pole alebo inými slovami „hash“. Ukladá ľubovoľný kľúč => zhody hodnôt a má niekoľko štandardných metód.

  • Čo je to metóda objektu v JavaScripte?

Objektová metóda v JavaScripte je jednoducho funkcia, ktorá sa pridáva do asociatívneho poľa.

  • Prečo písať var pred premennou v JavaScripte?

Ak vytvoríte premennú prostredníctvom normálneho priradenia, vytvorí sa „globálna premenná“. Príklad:

Ak vytvoríte premennú pomocou slova var, potom sa vytvorí „lokálna premenná“, ktorá po ukončení funkcie prestane existovať. Príklad:

  • Existujú dve funkcie:funkcia f(a,b) ( návrat a+b ) a var f = funkcia (a,b) ( návrat a+b ).Je medzi nimi rozdiel? Ak existuje, ktorý?

Je rozdiel vo viditeľnosti funkcie. Variant funkcie bez var je viditeľný všade v aktuálnom rozsahu. Vrátane až samotnej definície funkcie. Variant var priraďuje funkciu k premennej, takže funkcia je viditeľná až po jej definovaní.

  • Ako vytvoriť pole v JavaScripte?

Tu je niekoľko spôsobov.

  • Je možné použiť funkciu ako konštruktor v JavaScripte?

Páči sa ti to:

  • Koľko a ktoré slučkové konštrukty sú v JavaScripte?

Tri: na, kým a do... kým.

  • Čo kód robí: značka zlomu; ?

Opustí prúdovú slučku alebo blok spínača na štítku " značka“.

  • Je možné definovať pole takto: var a = "a,b".split(",")?

Áno môžeš.

  • Čo bude upozornenie (typeof null); ?

Vytlačí správu "objekt".

  • A toto: alert(null instanceof Object); ?

Vytlačí správu „false“.

  • 0.1 + 0.2 == 0.3 ?

Nie, pretože vypočítaná hodnota bude 0,30000000000000004. Ide o akt výpočtovej presnosti a nezobrazuje sa len v JavaScripte.

  • Čo bude varovať (typ NaN); ?

"číslo"

  • Čo upozorní (NaN === NaN); ?

"falošný"

  • Aký je rozdiel medzi vlastnosťami innerHTML a externalHTML?

Vlastnosť innerHTML ľubovoľného prvku DOM obsahuje kód HTML, ktorý sa nachádza vo vnútri tohto prvku. Pri nastavovaní novej hodnoty pre túto vlastnosť prehliadač znova vykreslí interný kód HTML.

externalHTML je takmer rovnaké ako innerHTML, rozdiel je v tom, že vracia úplné HTML prvku.

Je tiež dôležité poznamenať, že innerHTML podporujú všetky moderné prehliadače, zatiaľ čo vonkajšie HTML podporuje IE (s určitými rozdielmi od iných prehliadačov), najnovšie verzie Opera a v prehliadačoch založených na najnovšom WebKit (Safari, Chrome), ktoré však Firefox nepodporuje.

Pre kód:

innerHTML vráti:

externalHTML vráti:


  • Aký je rozdiel medzi operátormi == a ===?

Operátor == porovnáva pre rovnosť, ale === porovnáva pre identitu. Výhodou operátora === je, že nevnucuje dve hodnoty rovnakého typu. Preto sa bežne používa.

  • Aký je rozdiel medzi Object.getOwnPropertyNames() a Object.keys()?

Object.getOwnPropertyNames() vracia vymenovateľné a nespočítateľné vlastnosti z objektu alebo poľa.

Object.keys() vracia vymenovateľné vlastnosti z objektu alebo poľa.

  • Aký jazykový konštrukt možno použiť na riadenie toku vykonávania skriptu a sledovanie chýb?

To je možné pomocou konštrukcie try()... catch().

  • Prečo volať a(); uspeje a volanie funkcie b(); zobrazí chybové hlásenie?

Funkcia a() sa inicializuje vo fáze načítania skriptu, ako keby sa „vznášala“ a funkcia b sa inicializuje, keď je deklarovaná premenná b

  • Čo sú globálne premenné? Ako vznikajú? Aké sú problémy spojené s používaním globálnych premenných?

Globálna premenná je premenná, ktorá je dostupná (viditeľná) v celom dokumente, na rozdiel od lokálnej premennej (obmedzená na blok kódu, v ktorom je definovaná)

Väčšina vývojárov JavaScriptu sa vyhýba používaniu globálnych premenných. Jedným z dôvodov je možný konflikt medzi názvami globálnych a lokálnych premenných. Kód využívajúci globálne premenné môže byť tiež náročnejší na údržbu a testovanie.

  • Čo sú uzávery v JavaScripte?

Jednoducho povedané, ide o vnútornú funkciu, t.j. funkcia v rámci funkcie.

Uzavretie (uzavretie) sa nazýva preto, lebo po vykonaní nadradenej alebo vonkajšej funkcie kód vnútornej stále „žije“ v interpretači a možno ho vykonať. K chybám nedôjde ani vtedy, ak vnútorná funkcia (uzáver) používa premenné z vonkajšej funkcie.Túto funkciu možno použiť napríklad na vytvorenie funkcií obsluhy udalostí:


  • Napíšte funkciu, ktorá vezme reťazec s názvom súboru a vráti príponu (fragment za poslednou bodkou).

    • Čo je prototyp v javascripte?

    Vo všeobecnosti je prototyp vlastnosť, ktorá vám umožňuje pridávať vlastnosti k už existujúcim objektom a používa sa aj na emuláciu dedenia tried v JavaScripte. Podrobná odpoveď je napísaná tu. Ďalšou možnosťou je spomenúť Prototype.js. Toto je populárna knižnica, ktorá do programov JavaScript pridáva pohodlné funkcie OOP.

    • Aké spôsoby zavesenia obsluhy udalostí poznáte?

    Udalosti je možné pridať tromi spôsobmi:

    • htmlElement.onclick = function(event) ( .... ) - týmto spôsobom môžete pridať iba jeden handler
    • htmlElement.addEventListener("click", ...) - týmto spôsobom môžete zavesiť niekoľko handlerov, zachová poradie handlerov
    • htmlElement.attachEvent("on"+event_name, handler) - môžete pripojiť aj niekoľko, nezachováva poradie handlerov, nie je prístup k prvku, na ktorom sa udalosť spustila.