JavaScript

Java Collections
3 уровень , 1 лекция
Открыта

— Привет, Амиго!

— Привет, Билаабо!

— Рад тебя видеть. Сегодня у нас небольшое, но очень познавательное занятие. Сегодня я расскажу тебе о языке JavaScript.

JavaScript - 1

— Новый язык? Как интересно…

— JavaScript сейчас популярен благодаря интернету. Дело в том, что это единственный язык, который умеют исполнять все браузеры. Если ты хочешь добавить анимацию или некоторую логику в свою интернет-страницу, то ты можешь сделать это с помощью JavaScript.

— А правда, что JavaScript – самый популярный язык?

— Да, но тут правильнее было бы сказать, что он самый популярный «второй язык». Программисты на C++, Java, C#, PHP вынуждены писать небольшие скрипты на JavaScript, чтобы оживить свои интернет-страницы. В то же время, людей, которые пишут только на JavaScript гораздо меньше.

— А почему у него такое название – JavaScript? Звучит почти как Java.

— На самом деле сначала он назывался LiveScript, но когда Java начала набирать популярность, его переименовали в JavaScript.

Java и JavaScript — это два совершенно разных языка, не стоит их путать.

JavaScript, в отличие от Java, не имеет классов, не поддерживает статическую типизацию, многопоточность и много чего еще. И если Java – это скорее большой набор строительных инструментов, то JavaScript – это швейцарский нож. JavaScript создан для решения маленьких задач, а Java – для больших и очень больших.

Вот тебе несколько фактов о JavaScript:

Факт первый – в JavaScript есть функции, но нет классов

Просто пишешь логику программы в нескольких функциях и все. Пример:

JavaScript
function min(a, b)
{
 return a
}
Java
public static int min(int a, int b)
{
return a
}

Новые функции объявляются с помощью конструкции «function+имя».

Еще пример:

JavaScript
function min(ab)
{
 return a<b ? ab;
}

function main()
{
 var s = 3;
 var t = 5;
 var min = min(s, t);
}
Java
public static int min(int a, int b)
{
 return a<b ? ab;
}

public static void main()
{
 int s = 3;
 int t = 5;
 int min = min(s,t);
}

Факт второй – в JavaScript есть переменные, но у них нет типов

JavaScript – это язык с динамической типизацией. Это значит, что у переменных, по факту, нет типов. Любой переменной можно присвоить значение любого типа (у значений типы есть). Пример:

JavaScript
function main()
{
 var s = "Bender";
 var k = 1;
 var n = s.length;
}
Java
public static void main()
{
 String s ="Bender";
 int k = 1;
 int n = s.length();
}

Но динамическая типизация увеличивает риск ошибок во время работы программы:

JavaScript
function main()
{
 var s = "Bender";
 var k = 1;
 var n = k.length;
}
Java
public static void main()
{
 String s ="Bender";
 int k = 1;
 int n = k.length();
}

В примере выше, мы подставили вместо s (строки), переменную k (число). В случае с Java ошибка будет обнаружена на этапе компиляции, в случае с JavaScript – позже: уже во время исполнения этого кода.

Если хочешь объявить переменную в JavaScript, надо написать «var+имя». Типов у переменных нет, так же нет типов у методов/функций и их аргументов.

В JavaScript очень мало строгих правил и очень много анархии.

Можно объявить функцию с 5 аргументами, а вызвать с двумя – остальные будут равны null. Можно объявить функцию с двумя аргументами, а при вызове передать пять. Три просто отбросятся. Контроль за ошибками, опечатками, изменениями – минимальный.

Факт третий – в JavaScript есть if, for, while

В JavaScript есть if, for, while и это – хорошая новость. Смотрим примеры:

JavaScript
function main()
{
 var s = "Bender";

 var result = "";

 for(var i=0;i<s.length;i++)
 {
  result += s[i]+ "";
 }
 if(result.length>10)
 {
  alert (result);
 }
 else 
 {
  while(result.length <= 10)
  {
   result += " ";
  }
  alert(result);
 }
}
Java
public static void main()
{
 String s = "Bender";
 char[] s2 = s.toCharArray(); 
 String result = "";

 for(int i=0;i<s.length();i++)
 {
  result += s2[i]+ "";
 }
 if(result.length()>10)
 {
  System.out.println(result);
 }
 else 
 {
  while (result.length() <= 10)
  {
   result += " ";
  }
  System.out.println(result);
 }
}

— Довольно похоже. Думаю, я смог бы разобраться, как работает код, написанный на JavaScript.

— Оптимизм – это хорошо.

Факт четвёртый – в JavaScript есть try-catch-finally

В JavaScript есть исключения (Error) и это хорошо. checked исключений нет, только unchecked – аналог RuntimeException. try-catch-finally работает так же, как и в Java. Пример:

JavaScript
function main()
{
 try
 {
  var s = null;
  var n = s.length;
 }
 catch(e) 
 {
  alert(e);
 }
}
Java
public static void main()
{
 try
 {
  String s = null;
  int n = s.length();
 }
 catch(Exception e) 
 {
  System.out.println(e);
 }
}

При попытке узнать длину строки будет выкинуто исключение, т.к. переменная ссылается на null.

Факт пятый – в JavaScript есть массивы

Хорошая новость. В JavaScript есть массивы. Плохая – там нет ни списков, ни коллекций.

Еще одна хорошая новость – массивы могут динамически растягиваться, при добавлении новых элементов и уменьшаться при их удалении. Больше похоже на гибрид массива и списка.

Пример:

JavaScript
function main()
{
 var m = [1,3,18, 45, 'c', "roma", null];
 alert(m.length); //7

 m.push("end");
 alert(m.length); //8

 for (var i=0;i<m.length;i++)
 {
  alert(m[i]);
 }
}
Java
public static void main()
{
 List m = Arrays.asList(1,3,18, 45,'c', "roma", null);
 System.out.println(m.size());//7

 m.add("end");
 System.out.println(m.size());//8

 for (int i=0;i<m.size();i++)
 {
  System.out.println(m.get(i));
 }
}

— А что это за квадратные скобки при объявлении массива?

— Это и есть «объявление массива». Чтобы объявить массив надо написать квадратные скобки, а между ними перечислить элементы массива. Пустой массив объявляется просто парой скобок.

Пример
var m = [];

Факт шестой – в JavaScript есть объекты

В JavaScript есть объекты. На самом деле все в JavaScript является объектом, примитивные типы тоже. Каждый объект представлен в виде набора пар «ключ-значение». Грубо говоря, каждый объект JavaScript – это аналог HashMap в Java. Пример объявления объекта:

JavaScript
function main()
{
 var m = {
  first_name : "Bill",
  last_name: "Gates",
  age: 54,
  weight: 67,
 children: ["Emma", "Catrin"],
 wife: {
  first_name : "Melinda",
  last_name: "Gates",
  age: 45,
  }
};

 alert(m.first_name); // Bill
 alert(m.age); // 54
 alert(m.wife.first_name);// Melinda

 m.age = 45;
 m.age++;
 m["first_name"] = "Stive";
 m["wife"] = null;
Java
public static void main()
{
 HashMap m = new HashMap();
 m.put("first_name", "Bill");
 m.put("last_name", "Gates");
 m.put("age", 54);
 m.put("weight", 67);

 String[] children = {"Emma","Catrin"};
 m.put("children", children);

 HashMap wife = new HashMap();
 wife.put("first_name", "Melinda");
 wife.put("last_name", "Gates");
 wife.put("age", 45);
 m.put("wife", wife);

 System.out.println(m.get("first_name"));
 System.out.println(m.get("age"));

 HashMap w = ((HashMap)m.get("wife"));
 System.out.println(w.get("first_name")));

 m.put("age", 45);
 m.put("age", ((Integer)m.get("age"))+1);
 m.put("first_name","Stive");
 m.put("wife", null);

Чтобы создать новый объект достаточно написать две фигурные скобки «{}».

Внутри скобок можно указать данные объекта в формате «ключ, двоеточие, значение, запятая».

К полям объекта можно обращаться двумя способами:

Эквивалентные записи
m.age = 45;
m[“age”] = 45;

Если указанного поля нет, оно создается.

Что-то мой газовый пузырь переполнился, думаю надо сделать перерыв.

Факт седьмой – JavaScript создан, чтобы работать внутри web-страниц.

Комментарии (116)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Евгений Пикин Уровень 46
14 мая 2025
а у вас лекция протухла
15 апреля 2025
Это точно курс по коллекциям? Что дальше? Лекция по Питону?
{Java_Shark} Уровень 36
28 января 2025
++
Dmitry Dovgal Уровень 24
29 октября 2024
В JS уже есть классы :)
Daniel Уровень 51
12 марта 2023
Мне одному больно смотреть на то, что пишут джаваскриптизеры?
Rolik Уровень 41
13 мая 2023
JS ща один из самых востребованных на рынке. На нем пишут сайты.
Daniel Уровень 51
13 мая 2023
Это не делает его логичным, читабельным или приятным для восприятия.
Rolik Уровень 41
13 мая 2023
Хех... Вы код на Kotlin видели ?
Daniel Уровень 51
13 мая 2023
Видел. Отдает питоном. Не нравится. Да, короче. Да, меньше кода. Да, компактнее. Но нет вот этого джавовского: на сигнатуру посмотрел и все знаешь. А мне эта фишка прям вот очень нравится.
Rolik Уровень 41
14 мая 2023
И мне.
28 февраля 2024
ну , не привычно, но Js в 5 раз легче , как по мне. Потому что меньше писать, понятнее и вроде нет ООП
Ilia lenskii Уровень 32
2 июня 2024
JS привык, а вот к TS уже нет (
Denis Odesskiy Уровень 47
25 августа 2024
JS во многом парадоксальный язык. Ни в жизни бы не сказал что он очень простой. Т.е. да на нём можно сделать просто простое, а вот что посложнее, начинается эквилибристика. В любом случае сайты на JS, как кто-то сказал не пишут. Это лишь небольшой кусочек технологии, стека , который должен знать в том числе java-разработчик. П/С: Пайтон, как по мне, проще, хотя в нём и ООП есть хоть и кастрированное и даже множественное наследование. Ну опять же на вкус и цвет, мне например язык поддерживающий ООП нравится больше, и своими возможностями и масштабируемостью... Хотя всё это инструменты, учить надо программирование как науку, на основе какого-то ЯП основного, а выучить доп. ЯП не такая уж проблема, понимая суть. Всё +- одинаково везде, даже в пайтоне и js хотя они в отличие от джавы не статически типизированные. В пайтоне например не хватает интерфейсов, но есть ABC классы (абстрактные), которыми можно имитировать интерфейсы, ну в общем все тоже, только в профиль, так сказать... Есть еще TypeScript это JS со строгой типизацией, приблуда еще больше похожая на java. В любом случае, как и сказано в лекции, это вторые (да-да я знаю про Node.js) яп для уважающего себя программиста. Да и еще, согласно последней версии спецификации JS ES6, ключевое слово var считается устаревшим, желательно объявлять переменные используя let для изменяемых переменных и const для неизменяемых. Там в частности с глобальной/локальной видимостью есть разница. Также в JS есть симуляция классов, синтаксически привычная, но на деле это синтаксический сахар и под капотом все работает как объекты, т.е. там нет полноценного классического ООП. Также можно (и рекомендуется) использовать строгий режим "use strict"
Dok3R73 Уровень 42
24 января 2023
К концу лекции подумал, нафига я выбрал java😂
very junior java developer Уровень 51
31 августа 2023
Java Script - сам по себе это лишь кусочек стака технологий который нужен web разработчикам, его используют в купе с другими инструментами HTML CSS. Тобишь нет такой работы JavaScript developer....
Edward Northwind Уровень 37
17 января 2023
Я наконец-то понял, что подразумевалось под Java Collections... Это не коллекции в Java. Это набор различных тем, что не смогли или не захотели оформлять отдельными разделами. Я то думал тут будут уроки по продвинутым коллекциям, но похоже всё что нам светит - это то, что мы прошли на Java Syntax.
GBRTANK WARBOT Уровень 38
9 ноября 2022
После этой лекции хорошо посмотреть следующее видео Стащук - JavaScript - Полный Курс JavaScript Для Начинающих [11 ЧАСОВ]
5 декабря 2022
¡Gracias!
Fl1s Уровень 51
15 января 2024
Слишком много воды
Стас Уровень 41
20 сентября 2022
Какая же гадость это ваш LiveScript(
Ilia lenskii Уровень 32
11 сентября 2022
> JavaScript, в отличие от Java, не имеет классов, не поддерживает статическую типизацию, многопоточность... Сильное заявление. Дальше не читал. Судя по всему материал лет на 10 устарел...
Anonymous #3227998 Уровень 34
13 июня 2023
Все ооп в джаваскрипте построено вокруг работы с прототипами. А классы в джиэсе это синтаксический сахар над прототипами... Они не работают как в джаве. Инкапсуляция там очень условна.. Так что в этой статье вроде плохого не написано...
Denis Odesskiy Уровень 47
25 августа 2024
оно их (инкапсуляцию) и не поддерживает в полной мере (я о экспериментальном # (полифил нужен?) без приватности классов и джентельменском соглашении в более старых версиях)... Нет, ну при желании можно конечно и Сову натянуть на глобус. Я понимаю что есть TS и всё такое, можно типы проверить, есть асинхронность в JS... Но это совсем не то ведь, согласитесь🙄. Ах, да в ES6 завезли резиновую женщину имитацию классов, как сказал оратор выше, это лишь синтаксический сахар... Технически внутри это всеравно объект с прототипным наследованием. П/С. Какой-то холивар еще получится. Лично мне JS нравится (иногда и местами😄), без него всеравно сегодня никуда. Там есть недостатки, как и в любом др. яп, их правят, об этом наверное можно и нужно говорить... В общем JS это как акварель в живописи, она везде, легкая и сложная одновременно и иногда дающая непредсказуемый результат😄.
Anemon Уровень 13 Expert
25 февраля 2025
Как и обычно, человек знает с гулькин нос, а считает себя умнейшим)0