Это попытка формализовать мои мысли в 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 г.)