var tab2 =
{
["1791","1891", "1465", "1936"],
["Nil","Amazonka","Missisipi","Yang Cy"];
}
Jeśli nie kombinujesz czegoś z Destructuring Assignment z ES6, to powyższy zapis jest błędny - w taki sposób nie stworzysz literału obiektu (konsola wyrzuci SyntaxError). Zapoznaj się z metodyką tworzenia obiektów w formie literałów. Sądząc po pętli for, chciałeś raczej zrobić dwuwymiarową tablicę.
Próbując jednak dobrać się do pól tych zagnieżdżonych tablic, również popełniasz parę błędów:
for(var i = 0; i < = tab2.length; i++) {
document.getElementById("c").innerHTML = tab2[0];
document.getElementById("d").innerHTML = tab2[1];
document.getElementById("p").innerHTML = tab2[2];
document.getElementById("t").innerHTML = tab2[3];
}
Drugim wyrażeniem wewnątrz składni pętli for jest warunek jej trwania. Gdy chcesz, aby pętla działała, dopóki X jest mniejsze lub równe Y, to musisz zapisać go w formie dwóch znaków, bez spacji: <=
Wewnątrz pętli (a proponuję zrobić dwie, gdyż zmienna tab2 jest tablicą składającą się z tablic) prawa strona wyrażenia przypisania:
document.getElementById("c").innerHTML = tab2[0];
wyciągnie Ci pierwszy element z tablicy tab2, a więc całą zagnieżdżoną tablicę, a przecież chcesz iterować po elementach tejże tablicy - więc musisz zrobić drugą pętlę (jeśli nadal na instrukcji for, to dla spójności utwórz w niej iterator o nazwie j)
Jeszcze, co do pierwszej tablicy:
var tab1 = ["W którym roku powstała Konstytucja 3 Maja ?", "Jaka jest najdłuższa rzeka świata ?"];
, wewnątrz funkcji sp(check) korzystasz z pętli, wewnątrz której robisz (moim zdaniem - oceniając Twój zamiar) błąd:
ekran.innerHTML = tab1[i];
, ponieważ pętla wykona się 2 razy, a Ty każdorazowo przypisujesz na nowo wartość (napis) jako treść HTML. Powinieneś tutaj użyć raczej operatora przypisania addycyjnego.