Тип данных
JavaScript-это язык слабого типа , но он не без типов. JavaScript может распознавать следующие 7 различных типов значений:
Основные типы данных
1.boolean
2.
3. Стриг
4.null
5.
6. Символ
Объект
1. Орей
2. REGEXP
3. Дат
4.math
5 ....
Вы можете использовать TypeOF для определения типа данных. Оператор возвращает строку, но не все возвращенные результаты соответствуют ожиданиям.
typeof false // "boolean"typeof .2 // "number"typeof NaN // "number"typeof '' // "string"typeof undefined // "undefined"typeof Symbol() // "symbol"typeof new Date() // "object"typeof [] // "object"typeof alert // "function"typeof null // "object"typeof not_defined_var // "undefined"
переменная
В приложении используйте переменные, чтобы назвать значение. Имя переменной называется идентификаторами
заявление
1. Используйте ключевое слово var:
2. Используйте ключевое слово let: racope local varible
3. Прямое использование: глобальная область
var global_var = 1; function fn () {var fn_var = 2; if (fn_var> 10) {let block_var = 3; global_var2 = 4;}}Только объявление о назначении, значение переменной по умолчанию не определена
Ключевое слово Const может объявлять неизменные переменные, а также блокируется. Понимание неизменных объектов требует внимания
const num = 1; const obj = {prop: 'value'}; num = 2; // uncaught typeError: назначение постоянной переменной. Obj ['prop'] = 'value2'; obj = []; // uncaught typeerror: назначение постоянной переменной.Переменное улучшение
JavaScript может ссылаться на переменные, объявленные позже, не бросая разные понятия. Эта концепция называется продвижением переменной объявления (подъем)
console.log (a); // undefinedvar a = 2;
Эквивалентно
var a; console.log (a); a = 2;
функция
Функция - это подпрограмма, которую можно назвать внешним кодом (или рекурсивно вызванной самой функцией).
Определить функции
1. Объявление функции
2. Функциональные выражения
3. Функциональный конструктор
4. Функция стрелы
function fn () {} var fn = function () {} var fn = new Function (arg1, arg2, ... argn, funcbody) var fn = (param) => {}аргументы
1.Arguments: массивоподобный объект, который содержит параметры, передаваемые текущей функции выполнения
2.Arguments.length: количество параметров, передаваемых к функции
3.Arguments.caller: вызовите функцию, которая в настоящее время выполняет функцию
4.arguments.callee: функция, выполняемая в настоящее время
function foo () {return Arguments;} foo (1, 2, 3); // аргументы [3] // {"0": 1, "1": 2, "2": 3}отдых
функция foo (... args) {return args;} foo (1, 2, 3); // массив [3] // [1, 2, 3] Функция fn (a, b, ... args) {return args;} fn (1, 2, 3, 4, 5); // массив [3] // [3, 4, 5]по умолчанию
Значения по умолчанию могут быть согласованы при определении параметров функции.
Функция fn (a = 2, b = 3) {return a + b;} fn (2, 3); // 5FN (2); // 5fn (); // 5Объект
Объекты в JavaScript являются коллекциями с переменными ключами
Определить объекты
1. буквальный
2. Конструктор
var obj = {prop: 'value', fn: function () {}}; var date = new date ();Конструктор
Нет разницы между конструктором и нормальной функцией. Вызов с новым ключевым словом является конструктором. Использование конструктора может создать экземпляр объекта.
Есть два возможных возврата функции
1. Явно вызовут возврат, чтобы вернуть оценку выражения после возврата
2. Возврат не называется и возвращается неопределенным
Функция людей (имя, возраст) {this.name = name; this.age = age;} var people = new People ('byron', 26);Конструктор возвращает значение
1. Нет возвращаемого значения
2. Простой тип данных
3. Тип объекта
Конструктор возвращает экземпляр конструктора в первых двух случаях. Эта функция используется путем создания объекта.
Третий конструктор выполняет то же самое, что и обычная функция, и возвращает результат выражения после возврата
прототип
1. Каждая функция имеет атрибут объекта прототипа, и в объекте есть атрибут конструктора, который указывает на саму функцию по умолчанию.
2. Каждый объект имеет атрибут __proto__, а точки зодиака - прототип своего родительского типа
Функция Person (name) {this.name = name;} person.prototype.print = function () {console.log (this.name);}; var p1 = new Person ('byron'); var p2 = new Person ('casper'); p1.print (); p2.print ();это и область применения
Область можно понять популярным образом
1. Кто я
2. Какие у меня всадники
На кого я ответил на это
Всадник - моя местная переменная
Эта сцена
Нормальные функции
1. Строгой режим: неопределенная
2. Нестационный режим: глобальный объект
3. ПРИМЕР: Глобальный
4. Браузер: окно
Конструктор: экземпляр объекта
Метод объекта: сам объект
Позвоните и примените
1.fn.call (контекст, arg1, arg2,…, argn)
2.fn.apply (контекст, Args)
Функция isnumber (obj) {return object.prototype.tostring.call (obj) === '[номер объекта]';}Function.prototype.bind
Bind возвращает новую функцию, область функции - это параметр Bind
function fn () {this.i = 0; setInterval (function () {console.log (this.i ++);}. Bind (this), 500)} fn (); () => {}Функция стрелки - это новая функция, предоставленная ES6, это сокращенная экспрессия функции с лексическим объемом и это значение
function fn () {this.i = 0; setInterval (() => {console.log (this.i ++);}, 500)} fn ();наследовать
В сценарии JavaScript наследство имеет две цели, и подкласс должен получить родительский класс:
1. Свойства объекта
2. МЕТОД объекта
Функция наследует (ребенок, родитель) {var _proptotype = object.create (parent.prototype); _ proptotype.constructor = child.prototype.constructor; child.prototype = _proptotype;} функция (имя, возраст) {this.name = name; это. {People.call (это, имя, возраст); this.language = language;} наследется (китайские, люди); китайский. Китайский («салатное масло», 27, «китайский»); en.introduce (); cn.introduce ();Класс ES6 и наследство
«Использовать строгое»; класс People {Constructor (name, age) {this.name = name; this.age = age;} getName () {return this.name;}} класс английский расширяет People {constructor (имя, возраст, язык) {super (имя, возраст); this.language = ranguage;} invure () {консоль. this.getName ()); console.log ('я говорю' + this.language);}} ut en = new English ('byron', 26, 'English'); en.introduce ();грамматика
Заявление на этикетке
петля:
for (var i = 0; i <10; i ++) {for (var j = 0; j <5; j ++) {console.log (j); if (j === 1) {break loop;}}} console.log (i);Заявления и выражения
var x = {a: 1}; {a: 1} {a: 1, b: 2}Немедленно выполнить функцию
(function () {} ()); (function () {}) (); [function () {} ()]; ~ function () {} ();! function () {} ();+ function () {} ();- function () {} (); delete function () {} (); typeOf function () {} (); void function () {} (); new Function () {} (); new Function () {} ()} (););) ();); function () {} (); 1> function () {} ();Расширенные функции
Функции высшего порядка-это функции, которые рассматривают функции как параметры или возвращаемые значения как функции.
Функция обратного вызова
[1, 2, 3, 4] .foreach (function (item) {console.log (item);});Закрытие
Закрытие состоит из двух частей
1. Функция
2. Среда: локальные переменные в рамках применения при создании функции
Функция makeCounter (init) {var init = init || 0; return function () {return ++ init;}} var counter = makecounter (10); console.log (counter ()); console.log (counter ()); console.log (counter ());Типичная ошибка
for (var i = 0; i <doms.length; i ++) {doms.eq (i) .on ('click', function (ev) {console.log (i);});} for (var i = 0; i <doms.length; i ++) {(i) {doms.eq (i) {console.log (i);});}) (i);}Ленивые функции
Функция EventBindergeratorator () {if (window.addeventListener) {return function (element, type, handler) {element.addeventListener (type, hanlder, false);}} else {return function (element, type, handler) {element.attachevent ('on' + type, handler.bind (element, windel. vindel); EventBindergenerator ();Карри
Способ разрешить использование частичных параметров для генерации функций
Функция istype (type) {return function (obj) {return object.prototype.tostring.call (obj) === '[object' + type + ']';}} var isnumber = istype ('number'); console.log (isnumber (1)); console.log ('is inumber (' s '); istype ('array'); console.log (isarray (1)); console.log (isarray ([1, 2, 3])); Функция f (n) {return n * n;} function g (n) {return n * 2;} console.log (f (g (5))); function pipe (f, g) {return function () {return f.call (null, g.apply (null, аргументы));}} var fn = pipe (f, g); Консоль.Хвостовая рекурсия
1. Хвостовой вызов означает, что последний шаг функции - вызов другой функции
2. Функция вызывает саму, называемую рекурсией
3. Если хвост звонит, он называется хвостовой рекурсией
Рекурсия подвержена ошибкам «переполнения сложенного переполнения» (переполнение стека)
Функция факториала (n) {if (n === 1) return 1; return n * factorial (n - 1);} факториал (5) // 120Но для хвостовой рекурсии, поскольку есть только одна запись вызовов, ошибка «переполнения стека» никогда не произойдет
Функция факториала (n, total) {if (n === 1) return total; вернуть фактор (n - 1, n * total);} фактор (5, 1) // 120Каррики уменьшает параметры
Функция Currying (fn, n) {return function (m) {return fn.call (this, m, n);};} function tail Factorial (n, общее) {if (n === 1) return total; return Tailfactorial (n - 1, n * total);} const factorial = currying (aithfactorial, 1); Функция (5) / / 120;Антикризация
Function.prototype.uncurry = function () {return this.call.bind (this);};толчок обобщения
var push = array.prototype.push.uncurry (); var arr = []; push (arr, 1); push (arr, 2); push (arr, 3); console.log (arr);
Приведенное выше содержание - это полное описание изысканных классических примеров языка JavaScript (компиляция), представленных вам редактором. Я надеюсь, что это будет полезно для всех!