Javascript
Для выполнения программ мы будем использовать nodejs. Создайте файл из примера ниже, сохраните его в файле test.js. Перейдите в консоль и выполните
node test.js
Javascript код можно выполнить в консоли браузера,
для этого в браузере надо нажать клавишу F12,
в открывшемся наборе инструментов разработчика выбрать
консоль и в ней ввести код.
Программа на javascript - это последовательность инструкции. Инструкции разделяются точкой с запятой или начинают с разных строк. В состав инструкций могут входить выражения. Выражения возвращают значения. Например,
let r = 5.4;
let area = Math.PI * r**2;
console.log(area);
Первая и вторая инструкции объявляют переменные. Последняя печатает в консоль значение переменной.
По умолчанию инструкции выполняются по порядку расположения в тексте. Для изменения порядка выполнения используют инструкции контроля: ветвления, циклы, переходы.
Рассмотрим инструкции объявления, они объявляют или определяют переменные и функции. Они вводят имя которое будет использоваться позже и присваивают ему значение. В примере выше, в первой строке, мы имеем литерное высказывание 5.4, оно прямо вводит числовое значение. Во второй строке, с права от знака равно, находится высказывание, содержащее оператор умножения, возведение в степень и переменные. Ключевое слово let вводит изменяемую переменную. Ключевое слово const вводит неизменяемую переменную.
Числа
number- тип значений встроенный. Пример,
console.log("24 * 5 =", 24 * 5);
console.log("25 / 5 =", 25 / 5);
console.log("24 + 5 =", 24 + 5);
console.log("24 - 5 =", 24 - 5);
console.log("5 % 2 =", 5 % 2);
console.log("5 < 6", 5 < 6);
console.log("5 === 6", 5 === 6);
console.log("5 !== 6", 5 !== 6);
let x = parseFloat("3.14")//преобразуем строку текста в число
console.log(typeof x) // typeof возвращает тип значения
Встроенных в язык операции над числами немного, но есть библиотеки,
в которых, наверное, есть нужная вам функция.
Строки
Встроенный тип значений - string. Для строковых литер можно использовать двойные кавычки, одинарные левые или правые кавычки. Пример,
let name = "Bob" //строковая литерал
console.log(`Hello, ${name}!`)//в строку подставляется значение переменной
Логический тип
В логическом типе всего два значения: ture, false. На них заданны операции: && (и), || (или), ! (отрицание). Пример,
let x = 5
console.log("x < 6 || x > 3 ", x < 6 || x > 3)
console.log("!(x < 6) = ", !(x < 6))
Задание ветвления
Пример,
let x = 5
if (x < 0)
{
console.log(`${x} - отрицательное.`)
}
esle if( x === 0)
{
console.log(`${x} - ноль.`)
}
else
{
console.log(`${x} - положительно.`)
}
Циклы
Пример,
for(let i = 0; i < 5;++)
{
console.log(i)
}
Массивы
Элемент массива мы можем получить, указав в квадратных скобках индекс элемента. Нумерация элементов начинается с нуля. Свойство length - число элементов в массиве. Пример,
let l = [1, 5, "Bob", 6] //литерал массива
l.push(9)//Добавляет новый элемент в конец массива
for (let i = 0; i < l.length; i++)
{
console.log(`l[${i}]=${l[i]}`)
}
//Более удобный способ обработки массива
for(const elem of l)
console.log(elem);
l.reverse();//меняет порядок элементов
console.log(l);
let l2 = l.slice(1, 4)//создает новый массив с элементами с первого по 3
console.log(l2)
Функции
console.log("f3(5) =", f3(5)); // Вызов функции.
function f3(x){return x * 3}; // Определение функции,
// такое определение может предшествовать вызову.
const f2 = function (x) { return x * 2}; // Определение функции
const add = (a, b) => {return a + b;} // Третий способ определения функциии
console.log("add(6,5)=",add(6,5))
Объекты
Объект состоит из пар ключ, значение. Чтобы получить значение свойства объекта, можно использовать точку, или квадратные скобки. В следующем примере мы создаём объект, используя литеру объекта.
let person = {name: "Лена", age: 18}//Создали объект
console.log("Привет, ", person.name, "!")
console.log("Привет, ", person["name"], "!")
Модули
Мы можем разбить наш код на отдельные файлы, как в примере ниже. Создадим файл help.mjs.
function add(a, b)
{
return a + b;
}
const speedOfLight = 3 * 10**8;
export {speedOfLight, add};
Создадим файл main.mjs
import {speedOfLight, add} from "./help.mjs"
console.log("add(4, 3) ", add(4,3))
console.log("скорость света =", speedOfLight);
Запуситм программу, выполнив
node main.mjs
Классы
Классы - удобный способ создавать объекты.
// Class
class Person
{
constructor(name)
{
this.name = name
}
describe()
{
return 'Person named ' + this.name;
}
}
const jane = new Person("Jane");
console.log(jane.describe())
Canvas
canvas - элемент html, мы будем рисовать на нём. Создайте папку canvas, перейдите в неё. Создайте в ней файл canvas.html.
<!doctype html>
<html>
<body>
<canvas width=300 height=300 id="canvas"></canvas>
<script src="./js/main.js" type="module"></script>
</body>
</html>
В папке создайте каталог js, в нем файл main.js.
fillRect(x, y, ширина, высота) рисует, закрашенный прямоугольник,
верхний левый угол прямоугольника имеет координаты x, y.
x - число пикселей вправо, y - число пикселей вниз от левого
верхнего угла канваса.
Запустите http-server, выполнив команду http-server. Результат приведён ниже.
Следующий пример создаёт текст на canvas
ctx.font = `20px Arial`//размер шрифта 20 пикселей, шрифт Arial
ctx.fillStyle = 'blue' //цвет текста голубой
ctx.textAlign = 'center'//выравнивание по горизонтали
ctx.textBaseline = 'middle'//выравнивание по вертикали
ctx.fillText('Hello, World', 50, 70) // положение текста 50 пикселйе вправо, 70 вниз
Ниже то, что мы получили
Нарисуем прямоугольный контур.
ctx.strokeStyle = 'yellow' //цвет контура жёлтый
ctx.lineWidth = 5//задаём толщину контура в 5 пикселей
ctx.strokeRect(10, 20, 50, 70)
Ниже то, что мы получили
Рисуем линии
ctx.strokeStyle = 'red'
ctx.lineWidth = 5
ctx.beginPath()//начало пути
ctx.moveTo(10, 10)//ставим карандаш в точку 10, 10 пикселей
ctx.lineTo(290, 10)//чертим прямую до точки 290 вправо и 10 вниз пикселей
ctx.lineTo(10, 290)//чертим прямую до точки 10 вправо и 290 вниз пикселей
ctx.stroke()//линия появляется на экране
Получаем.
Рассмотрим, как можно обработать нажатие на клавишу мышки.
canvas.addEventListener('click', drawRect);
function drawRect(event)
{
ctx.fillStyle = 'red';
ctx.fillRect(event.offsetX, event.offsetY, 5, 5);
}
Учебник по canvas вы можете посмотреть, например,
здесь.
API браузера
Пример js кода: он изменяет цвет фона страницы, переменной name присваивает значение, введённое в поле с id name, выводит приветствие.
let body = document.querySelector("body");
let name = document.querySelector("#name")
let btnGreet = document.geurySelector("#btnGreet")
function greet(){
alert("Hello, " + name.value);
body.style.backgroundColor="aqua";
}
btn.addEventListener('click', greet)
Используем элемент html script, чтобы добавить код в веб странице.
Код размещаем в конце страницы, так как элементы html используемые
в коде должны быть созданы до выполнения кода.
AJAX
JavaScript код, приведённый ниже, отправляет запрос на сервер, когда пользователь вводи текст, полученный ответ выводит.
const nameInput = document.querySelector("#name")
const pOut = document.querySelector("#pOut")
async function search()
{
let data = {"name": nameInput.value}
let response = await fetch("/search",
{
method: "POST",
headers:
{
"Content-Type": "application/json"
},
body: JSON.stringify(data)
})
let rows = await response.json()
html = ''
for (let row of rows)
{
html = html + row["name"] + "<br>"
}
pOut.innerHTML = html
}
nameInput.addEventListener("input", search)
На сервере запрос обрабатывает следующий код
@app.route("/search", methods=["POST"])
def search():
response = json.loads(request.data)
name = response["name"]
if name:
names = db.execute("select * from characters where name like :name",
name = name + "%")
else:
names = []
return json.dumps(names)