Структура и интерпретация javascript

Краткое описание доклада

Структура и интерпретация javascript

Функции естественного языка

Википедия: Функции языка

But...

CPU

CPU model

10 + 10 = 100

4004_datasheet

2017

Литерал [literal]

Записанные непосредственно в коде данные. As is.

true // Булево значение "истина"
2 // Число "два"
'Привет, мир!' // строка  "Привет, мир"

Идентификатор [identifier]

Имя: состоит из букв UTF-16 и знаков _, $.

Не может начинаться с цифры и быть зарезервированным словом.

_name_of_my_$cat // Правильно
return // Ошибка
  

Инструкция [statement]

Цель: выполнить действие


  let name
  

Инструкция [statement]

Цель: выполнить действие


  do {} while ()
  

Выражение [expression]

Цель: получить результат


   2 + 2
  

Операторы [operators]

let four = 2 + 2;
     // => let возвращает undefined
four;
     // выражение "получить значение переменной",
       //  результат число 4

Приоритет операторов

let x = 1;
x += 20; У "=" самый низкий приоритет
x += 20;
x + 20
x =
  

Перегрузка операторов

2 + 2 // => 4
'2' + 2 // => '22'
+'42' // => 42
+('42a') // => NaN

Порядок вычисления выражения

слева направо: 1 => 2 => 3 => ...


    2 - 2 - 2 // => -2
    2 - 2 = 0
    0 - 2 = -2
  

А дальше?

Все — объект

Логические (Булевы) значения

0 == false
'0' == false

Все — объект

true === "boolean" // => true
true.constructor // => Boolean
false.toString() // => Строка "false"
false + "" == false // => ?

false

Числа

Все — объект

4..__proto__  // Number

Строки

Специальные типы

undefined, null, NaN

Объекты

ООП на прототипах

Ссылочный тип


let alexPerson = {name: 'Alex'}
let mikePerson = alexPerson;
mikePerson.name = 'Mike';
alexPerson.name // => 'Mike'

Разновидности объектов

Standard built-in objects (Стандартная_библиотека)

Функции

Функция, создание

Объект со скрытым полем [[Call]]

let getName = function() {};
function getName() {};
let getName = () => {}

Функция, использование

let person = ({name: 'Alex'});
let name = getName(person);
[1, 2, 3, 4].forEach(item => {});

Функция, применение

/** @return {Function} */
function personGetter() {
  let person = { name: 'Alex' };
  return function () { return person; }
}
personGetter()().name;

apply

let getName = function() {
 return this.name;
}
  
getName.apply({name: 'Alex'})

Функция, композиция

Среды исполнения

Литература

Спасибо!

alexbaumgertner