Это попытка формализовать мои мысли в JavaScript 5 в интервью и более эффективно учиться, объясняя, прежде чем переходить на JS6.

Некоторые ноты полусырые и могут быть очень неточными. Но так идет обучение...

В Википедии:



Книга общих мест — Википедия
«Общие места
— это перевод латинского термина locus communis (от греческого topos koinós, см. литературные топосы), который…en.wikipedia .org»



JavaScript был назван JavaScript для привлечения сообщества Java и только в маркетинговых целях. В свое время Microsoft предоставила VBScript для привлечения сообщества VB.

Контексты выполнения и лексические среды

  • Синтаксический анализатор: программа, которая читает ваш код и определяет, что он делает, и верна ли его грамматика.
  • Лексическая среда: (возможно, это другое слово для области действия): это место, где вы размещаете свой код.
  • Контекст выполнения: оболочка {} для управления выполняемым кодом.

Типы данных: простые и сложные

  • Типы данных в JS являются динамическими, что означает, что js динамически выравнивает переменную (статическая типизация VS)
  • Примитивы (6):неопределенный, ноль, число (по умолчанию с плавающей запятой), строка, логическое значение, символ: представляют одиночное значение
  • Complex(2):функция, объект: массив — это объект
  • Преобразование типа JS выполняетсяавтоматически или с использованием функций js.
  • JS чувствителен к регистру

Глобальный контекст выполнения:

  • this относится к глобальному объекту, если вокруг него нет оболочки.
  • этот объект в браузере является объектом окна
  • Глобальные переменные находятся в глобальном объекте. тогдаvar a =3; ⇒ окно.a = 3

Контекст выполнения:

  • Создание и подъем( بالا بردن):это для JavaScript, другие языки программирования дают ошибку.
    Этап 1: этап создания — подъем: настройка пространства памяти для переменных и функций.
    Этап 2: выполнение

[Будьте осторожны, много вопросов на собеседовании]

  • [JS6] let vs var:
    * let ограничен до ближайшего включающего блока ,var ограничен до ближайшего функционального блока< br /> *переменная, объявленная с помощью let, недоступна до объявления
    * let не прикрепляется к окну
    * Вы не можете разрешить одну переменную дважды

JavaScript и неопределенный:

  • Когда переменная не имеет значения, она не определена, также, если она не объявлена, она не определена. Во втором случае браузер выдает ошибку.
    Не определено › определено, но не установлено значение
    Не определено ›Не определено
  • Все переменные в JS изначально имеют значение undefined.
  • Никогда не делайте a = undefined

Однопоточное синхронное выполнение

  • Синхронный = один поток
  • Синхронный: одна команда одновременно и по порядку.
  • JS — это синхронный однопоточный язык программирования.
  • Асинхронный: более одного одновременно, но как? Помимо стека выполнения, есть очередь событий. Всякий раз, когда стек выполнения пуст, браузер просматривает очередь событий.
  • Веб-воркеры (IE 10 и выше): JavaScript, работающий в фоновом режиме и не влияющий на производительность страницы. (HTML5 API)
    * Внутри js файл создает рабочий объект из другого файла, например w Worker(“demo_workers.js”);
    *
    Внутри js-файла создайте прослушиватель: w.onmessage = function(событие){ …. Здесь используется event.data}
    * Когда вы закончите работу с web worker, завершите его и сделайте пустым: w.terminate(); w = undefined;
    * Создайте файл веб-воркера: важной частью кода является метод postMessage(), который используется для отправки сообщения обратно в HTML. страница.
  • Асинхронный атрибут HTML5: логический атрибут.
    ‹script src="demo_async.js" async›‹/script›

Функции

  • В JS функции — это объекты. Будьте осторожны, функции typeof являются функциями.
  • Вызов функции означает ее запуск, вызов
  • Стек выполнения: каждый раз, когда вызывается функция, новый контекст выполнения создается поверх предыдущего. Каждая переменная смотрит в свой контекст выполнения.
  • Цепочка области действия. Важно то место, где вы определяете переменную, а не место, где вы вызываете переменную. Это место, где вы лексически помещаете свою переменную. Если он не находится внутри лексического окружения функции, то он обращается к внешней ссылке.

Примечание. В JS вы можете определить функцию внутри другой функции.

  • Функция первого класса: это означает, что все, что вы можете делать с другими типами данных, вы можете делать с помощью функций (только в JS).
  • Имя функции является необязательным. и у нас может быть анонимная функция в JS.
  • Описание функции = объявление функции
    Выражение функции:
    var ali =function(){}
    Примечание: выражение функции не поднимается.
  • По значению: для примитивных типов данных. Две стороны находятся на разных адресах памяти и работают независимо.
    По ссылке: объекты -› ссылаются на один и тот же адрес.
  • это:функция не ссылается на глобальный объект, например окно, &
    после этого она ссылается на ближайший объект, который его окружает.
    Проблема:если мы создайте функцию внутри метода, который находится внутри объекта, у нас есть ОШИБКА.
    `this` в этой внутренней функции относится к глобальному объекту! YES F!
    Решение: шаблон кода: используйте var that = this;
  • Аргументы:параметры, которые вы передаете функции
    * Вы можете пропустить передачу параметров функции в JavaScript.
    * Аргументы — это специальные ключевые слова, которые JS предоставляет мне, то есть массив всех аргументов. Это можно использовать для проверки длины введенных аргументов. Путь аргументов устаревает.
    * разброс : (a,b,…new_var): эта точка означает поместить все остальное в массив new_var
  • Перегрузка функций:
    в других языках, таких как C++, это означает. наличие функций с одинаковыми именами, но разным количеством аргументов.
    Шаблоны JS:
    - создать новую функцию с новым именем, которая вызывает исходную, и поместить в нее некоторые аргументы по умолчанию.

Примечание.Опасность автоматической вставки точки с запятой синтаксическим анализатором в конец возвращаемого значения. Так что продолжайте писать после returnkeyword.
(TPM/Nasser ошиблись в этом)

  • Выражение немедленно вызываемой функции (IIFE): например,
    var ali = function(){
    }( );
    (функция ali(){
    }());
    (функция (){
    }());
    Проза этот метод заключается в том, что мы не помещаем переменные случайно в глобальную область видимости.
  • Замыкание. Постоянная область, которая удерживает локальные переменные даже после того, как выполнение кода переместилось за пределы блока. Особенность языка программирования JS. Основные примеры:
    Функция A возвращает функцию B. вызов A(arg1, …argN)B(arg1, …argN)
    Сценарий использования 1: Фабрики функций:Factory — это функция, которая возвращает или создает функции/объект для меня.
    Вариант использования 2: обратные вызовы.
    Функция, которую вы передаете другой функции для выполнения после завершения другой функции
    function 1( func2 ){
    Var a=2;
    Var b =3;
    func2();
  • call(), apply(), bind():все функции имеют доступ к этим трем методам.
    в дальнейшем это будет ссылаться на obj1
    call(),
    func1.call(obj1, agr1, arg2, …)
    apply():
    func1 .call(obj1, [agr1, arg2, …])
    bind():
    copyfunc = func1.bind(obj1)

    Примечание.
    Заимствование функций возможно для вышеуказанных функций

Асинхронный

  • Более одного за раз, как, когда JS является однопоточным, синхронным?
  • С помощью браузерного движка JS, такого как V8
  • Очередь событий.Помимо стека выполнения есть очередь событий. Всякий раз, когда стек выполнения пуст, браузер просматривает очередь событий.

Операторы

  • Тип операторов:префикс, постфикс, инфикс
    * инфикс вроде +-
  • Приоритет (илиприоритет): какая операторная функция вызывается первой. Побеждает более высокий приоритет: группировка | */% | +- | побитовый левый/правый | ‹ ‹= › ›= | || && | задание
  • Ассоциативность:в каком порядкеоператорные функции получают вызов: слева направо / справа налево=(RL) ‹(LR) например, var a=2, b=3, c=4; а=б=с;
    Всем будет 4

Примечания: проверьте эту таблицу 19 операторов из MDN.

  • Принуждение: преобразование данных одного типа в другой тип. например
    1 + '2' :output: 12
    3 ‹ 2 ‹ 1 :output: false ‹ 1 :output: 0 › 1 :output: true
    1 ‹ 2 ‹ 3 :output true
    Число(не определено) :output: NaN
    Number(null) :output: 0
    Number('привет'): output: NaN < br /> Number(''): output: 0
    f'3' == 3 : output: 3 ==3 : output: true
    Null == 0 › false
    Null ‹ 1 true — — — -› Trouble
    Что бы вы ни написали в операторе if, оно приведет к логическому значению
    boolean(undefined) :output:false
    boolean(null ) :output: false
    boolean("") :output: false
    Примечание.NaN или Not A Number — это числовой тип данных.< br /> Примечание: если вы сравните NaN с чем-либо, вы получите false

Объекты:

Коллекция пар имя/значение:

  • Создание: с конструктором объекта, с литералом объекта
  • Доступ: запись через точку, запись в квадратных скобках

JSON: Обозначение объектов JavaScript

  • В JSON свойство должно быть заключено в кавычки.
  • Вы можете запросить JSON с сервера с помощью запроса AJAX.
     – Если ответ сервера записан в формате JSON, вы можете преобразовать строку в объект JavaScript.
     – Объекты даты не разрешено в JSON.
    - Функции не разрешены в JSON.
  • К известным функциям JS
    JSON.stringify(object);
    JSON.parse(jsonObject)
  • У нас могут быть файлы с расширением .JSON, тип mime для текста JSON — application/json.

Массивы:

Коллекция чего угодно, Массивы могут быть гетерогенными, они также могут содержать массивы с разными размерами (Зазубренные массивы)
Основные методы и свойства:
длина
: свойство: возвращает длину массива
toString():метод:разделитель всегда запятая
join ()дополнительно можно указать разделитель. .join(" * ");
push(), pop(), shift(), unshift():возврат длины нового массива, возврат извлеченного элемента
splice(startIndex, numberOfRemove, array)
concat()
slice()
sort()
в алфавитном порядке

ООП с JS:

  • В JS нет класса, но все является объектом. и у нас есть наследство.
  • Наследование: один объект получает доступ к свойствам и методам другого объекта. Отношение X is-a Y или Y является родителем дочернего X
    X.prototype = new Y();
    Примечание:
    Свойства public по умолчанию, но если мы не используем это в определении конструктора, то они будут закрытыми. Как сделать эти частные вары доступными? Назначая им публичные функции (геттер/сеттер).
  • Конструкторы функций: обычная функция, которая используется для создания объектов. Рассматривайте их как классы и начинайте их имена с Capital. Переменная this указывает на новый пустой объект, и этот объект автоматически возвращается из функции.
    function Person( name, surname ){
    this.name = name;
    this. фамилия = фамилия;
    this.fullname = function (){
    console.log(this.name + this.surname);
    }
    // нет возвращаемого значения
    }
    var ali = new Person('ali', 'saberi');
    var ali = person('ali', 'saberi');
  • Добавление методов в класс, чтобы они были у всех экземпляров
    ClassName.prototype.newMethodName=function(){}
  • Добавить метод в качестве объекта или экземпляра очень просто
    instance.newMethodName=function(){}

Строковые методы

Свойство length:: возвращает длину массива
indexOf('str2'):возвращает индекс (позиция of) первое вхождение указанного текста в строку: Нет результата: -1
lastIndexOf():возвращает индекс последнего вхождения указанного текста текст в строке: Нет результата: -1
search():возвращает позицию совпадения
поиск () может принимать гораздо более мощные поисковые значения
replace():заменяет указанное значение другим значением в строке. По умолчанию метод replace() функция заменяет только первое совпадение. Чтобы заменить все совпадения, используйте регулярное выражение с флагом ag (для глобального совпадения)
slice(start, end)
substring(start, end)
substr( start, length):
извлекает часть строки и возвращает извлеченную часть в новой строке. Если параметр отрицательный, позиция отсчитывается от конца строки.
substring() аналогична slice(). Разница в том, что substring() не может принимать отрицательные индексы.
toUpperCase()
toLowerCase()
concat() = +
split()
A строка может быть преобразована в массив

  • Палиндром: str = str.split(‘’).reverse().join()

тип переменной

  • Он всегда возвращает строку, содержащую тип операнда.
  • Примитивы в порядке.
    Обратите внимание, что все они написаны строчными буквами, как число, строка.
  • массив – это объект.
    1. Object.prototype.toString.call(arr) › вывод: «[object array]»
    2. проверьте свойство конструктора, чтобы узнать, является ли объект массивом ( содержит слово "массив"):
    myArray.constructor.toString().indexOf("массив") › -1;
  • typeofundefined → undefined
    typeof null -›object : люди считают это ошибкой
    var z = function(){} typeof z :функция
    typeof NaN:число

Математические методы:

http://www.w3schools.com/jsref/jsref_obj_math.asp
Свойства много… PI
sin()
cos( )
tan()
asin()
acos()
atan()
atan2(y,x)
floor()
ceil()
round()
exp()
pow()
sqrt()
log()
rand() : [0,1 )
toFixed()
toPrecision()

Методы даты:

getDate():Получить день недели в виде числа (1–31)
getDay():Получить день недели число (0–6)
getFullYear():Получить год из четырех цифр (гггг)
getHours( ):Получить час (0–23)
getMilliseconds():Получить миллисекунды (0–999)
getMinutes():Получить минуты (0–59)
getMonth():Получить месяц (0–11)
getSeconds():Получить секунды (0–59)
getTime( ):Получить время (в миллисекундах с 1 января 1970 г.)