Рубрики
Без рубрики

Ultimate JavaScript Cheat лист

Этот чит-лист включает в себя несколько функций браузера, которые вы можете получить доступ к JavaScript на стороне клиента и платформы и платформы, которые вы можете использовать на клиенте или сервере.

Автор оригинала: Johnny B. (Ionică Bizău).

Это быстрый обзор языка JavaScript. Чтение этого с самого начала до конца хорош, но идет в конкретный раздел, а также хорош.

В наши дни JavaScript работает на браузерах, серверах, инструментах командной строки Powers, и многое другое. В этом чит-листе мы включаем пару функций браузера, которые вы можете получить доступ к JavaScript на стороне клиента и платформы-агностические функции, которые вы можете использовать на клиенте, либо на сервере.

(ЧИТАТЬ ДАЛЕЕ: JavaScript лучшие практики: Советы и хитрости навыки вашего кода )

Быстрый пример

Когда он работает в браузере, вы можете настроить некоторые элементы GUI (графический интерфейс), такие как текстовые входы, кнопки и многое другое.

Давайте создадим небольшое приложение, которое проверяет, нечет ли номер или даже. Сохраните следующий кусок кода в файл с именем нечетное или-даже.html :




    
        
        Odd or Even?
    
    
        
        

Enter a number and click the button to find out if the number is odd or even.

Теперь откройте это в вашем браузере и играйте с ним: напишите номер на входе, нажмите кнопку и наслаждайтесь.

Заметки

  • Вам не нужно компилировать JavaScript. Вы можете интерпретировать его, используя браузер или платформы, такие как Node.js Отказ
  • Запястья являются необязательными. Действительно. Это зависит от вас, если вы решите использовать их или нет. В Этот блог пост Вы найдете, почему это (не) хорошо использовать запястья везде. Короче говоря, вы решаете, хотите ли вы написать код с запятой или нет.
  • Некоторые примеры содержат код, написанный в ES2015 (ES6) Не может работать на более старых браузерах/переводчиках. В таких случаях просто вставьте код В этом онлайн ES6 транспортер И вы получите эквивалент ES5.
  • Этот документ может быть обновлен и улучшен время от времени.

Комментарии

Однострочные комментарии начинаются с // Отказ Для многострочных команд вы используете /* ... */

// This is a single line comment

/*
 And this is
 a multi-line
 comment
 */

Переменные

Вы можете создавать переменные, используя var , Пусть , Const (последние два доступны только в ES6).

Имена переменных не могут начать с номера или содержат пробелы. Они могут содержать буквы, цифры, подчеркивание или $. Имена переменных чувствительны к регистру.

// This is how you define a variable
// `x` will be `undefined`
var x;

// Declare a constant (the convention is to use CAPS for constants)
const FOO = 42;

// Declare another two variables, using `var` and `let`
var hello = 'world';
let bar = 'baz';

Переменные не имеют типа. Пока они не являются константами, вы можете изменить свои данные:

let foo = 42;
foo = 'bar';
foo
→ 'bar'

Пусть vs var.

Пусть и var довольно похоже, но в отличие от var , Пусть Объявляет локальную переменную область блока, необязательно инициализацию его до значения.

Пусть Позволяет объявлять переменные, которые ограничены по объему блока, оператора или выражения, на котором он используется. var Ключевое слово, которое определяет переменную для всей функции независимо от объема блока.

Давайте посмотрим на пример:

var a = 42;
if (true) {
  var b = 7;
  let c = 123;
}

// Obviously, we can access the `a` variable
console.log(a);
// => 42

// We can access `b` as well, even it was assigned in the
// if block (see below what happens if the expressions is
// false).
console.log(b);
// => 7

// We cannot access `c` here because it was declared using
// `let`, inside of the `if` block, therefore it's only
// accessible in the `if` block.
console.log(c);
// => Error: c is not defined

Даже если Если Состояние ложно, мы все еще можем получить доступ к var Декларация внутри Если блокировать. В этом случае значение будет undefined Отказ

if (false) {
  var b = 7;
}

console.log(b);
// => undefined

Это происходит из-за того, что переменные объявлены и назначены. Приведенный выше код похож на:

// Create the b variable (will take `undefined` by default)
var b;

if (false) {
  // Eventually assign it
  b = 7;
}

// Since we do *not* assign it, the value remains `undefined`

Действительно хорошее использование, чтобы использовать эту разницу между Пусть и var это для петли с чем-то async в нем.

Обратите внимание, как в первом примере мы получаем окончательное значение Я (Потому что мы распечатаем его через одну секунду). В других примерах (либо мы вручную создаем новый объем, используя функцию, либо использовать Пусть – что это делает для нас), Я ценность внутри из Сетримс (Через одна секунда) это Текущий Значение Я Когда Сетримс назывался.

for (var i = 0; i < 7; ++i) {
  setTimeout(function () {
    console.log(i);
    // => 8
    // => 8
    // => 8
    // => 8
    // => 8
    // => 8
    // => 8
    // => 8
  }, 1000);
}

for (let i = 0; i < 7; ++i) {
  setTimeout(function () {
    console.log(i);
    // => 0
    // => 1
    // => 2
    // => 3
    // => 4
    // => 5
    // => 6
    // => 7
  }, 1000);
}

// The above for loop, converted in ES5 looks like this:
var _loop = function (i) {
  setTimeout(function () {
    console.log(i);
    // => 0
    // => 1
    // => 2
    // => 3
    // => 4
    // => 5
    // => 6
    // => 7
  }, 1000);
};

for (var i = 0; i < 7; ++i) {
  _loop(i);
}

Как Const работает?

Const Просто: Вы можете использовать его для переменных, которые значения остаются прежними.

const PI = 3.14;

PI = 3;
→ TypeError: Assignment to constant variable.

Примечание, это не замораживает объекты:

// Create an object
const myObj = { foo: 'bar' };

// Update the `foo` field
myObj.foo = 42;

// Add a new field
myObj.hello = 'world';

myObj
→ { foo: 42, hello: 'world' }

// Tho, if you try to reset the whole thing, you can't
myObj = {};
→ TypeError: Assignment to constant variable.

Если заявления

Использовать Если (выражение) {...} else {...} сделать что-то, если выражение

let foo = 42;

if (foo > 40) {
    // do something
} else {
    // do something else
}

Переключатель

let planet = 'Earth';

switch (planet) {
  case "Mercury":
  case "Venus":
    console.log("Too hot here.");

  case 'Earth' :
    console.log("Welcome home!");
    break;

  case 'Mars' :
    console.log("Welcome to the other home!");
    break;

  case "Jupiter":
  case "Saturn":
  case "Uranus":
  case "Neptune":
  case "Pluto":
    console.log("You may get gold here.");
    break;

  default:
    console.log("Seems you found another planet.");
    break;
}

Примитивные значения

Следующие, примитивы:

  • Логин: ложь , правда
  • Числа: 42 , 3.14 , 0b11010 , 0x16 , Нан (Проверить Магия чисел )
  • Строки: «Земля» , "Марс"
  • Специальные значения: undefined , ноль

Объекты

Общий способ объявления объектов связан с использованием фигурных скобок:

let myObj = { world: "Earth" };

Внимание : Объекты сравниваются со ссылкой. Что говорят, у нас есть это:

let firstObj = {};
let secondObj = {};

// Check if they are equal
firstObj === secondObj
→ false

// Comparing an object with itself...
firstObj === firstObj
→ true

// Let's point the secondObj to firstObj
secondObj = firstObj

// Now they are equal
firstObj === secondObj
→ true

Внимание: у вас нет никакой гарантии, что добавление объектных клавиш в определенном порядке получит их в том же порядке. Объектные ключи являются не Приказал даже в общих интерпретатерах JavaScript, которые будут имитировать их в порядке добавления их в объект (опять же, делать не полагаться на эту функцию).

Массива

В дополнение к объектам данные массива заказываются индексами. Массивы на самом деле объекты, имеющие индексы (цифры из 0 на legnth - 1 ) как Ключи Отказ

let fruits = ["apples", "pears", "oranges"];

fruits[1]
→ "pears"

Доступ, добавить, удалить и обновлять элементы

> let fruits = ["Apple"]

// Add to the end of the array
> fruits.push("Pear")
2 // < The new length of the array

 [ 'Apple', 'Pear' ]
 //         ^ This was just added

// Add to the start of the array
> fruits.unshift("Orange")
3 // < The new length of the array

 [ 'Orange', 'Apple', 'Pear' ]
 // ^ This was just added

// Access the element at index 1 (the second element)
> fruits[1]
'Apple'

// How many items do we have?
> fruits.length
3

// Turn the Apple into Lemon
> fruits[1] = "Lemon"
'Lemon'

 [ 'Orange', 'Lemon', 'Pear' ]
 //          ^ This was before an Apple

// Insert at index 1 a new element
> fruits.splice(1, 0, "Grapes")
[] // < Splice is supposed to delete things (see below)
   //   In this case we're deleting 0 elements and
   //   inserting one.

 [ 'Orange', 'Grapes', 'Lemon', 'Pear' ]
 //          ^ This was added.

// Get the Lemon's index
> fruits.indexOf("Lemon")
2

// Delete the Lemon
> fruits.splice(2, 1)
[ 'Lemon' ]

 [ 'Orange', 'Grapes', 'Pear' ]
 //                   ^ Lemon is gone

// Remove the last element
> fruits.pop()
'Pear'

 [ 'Orange', 'Grapes' ]
 //                  ^ Pear is gone

// Remove the first element
> fruits.shift()
'Orange'

   [ 'Grapes' ]
 // ^ Orange is gone

Итализация по массивам

Есть несколько способов петли через массив.

// Using for-loop
var arr = [42, 7, -1]
for (var index = 0; index < arr.length; ++index) {
    var current = arr[index];
    /* Do something with `current` */
}

// Others prefer defining an additional `length` variable:
for (var index = 0, length = arr.length; index < length; ++index) {
    var current = arr[index];
    /* ... */
}

// Another way i using `forEach`:
arr.forEach((current, index, inputArray) => {
    /* Do something with `current` */
});

// Or using the for ... of:
for (let current of arr) {
    /* current will be the current element */
}

Функции

Есть пара способов определить функции в JavaScript. Общие виды использования:

function sum (a, b) {
    return a + b;
}

var sum = function (a, b) {
    return a + b;
}

// Using the ES6 arrow functions
let sum = (a, b) => a + b;

Тогда вы можете вызвать функцию, как:

let result = sum(40, 2);
// => 42

Конструкторы и классы

Есть пара способов получить классическую функциональность в JavaScript.

Заводские функции

Создание объекта и возвращая его.

function Person (name) {
   var self = {};

   // Public field
   self.name = name;

   // Public method
   self.getName = function () {
     // `this` is the `self`
     return this.name;
   };

   return self;
}

var p = Person("Alice");
console.log(p.getName());
// => "Alice"

Используя прототипы

Добавляя метод в Прототип Объект функции, вы добавляете этот метод как общественный метод для всех случаев этого класса.

function Person (name) {
  this.name = name;
}

Person.prototype.getName = function () {
  // `this` is the `self`
  return this.name;
};

var p = new Person("Bob");
console.log(p.getName());
// => "Bob"

Используя классы ES6

class Person {
  constructor (name) {
    this.name = name;
  }
  getName () {
    return this.name;
  }
}

var p = new Person("Carol");
console.log(p.getName());
// => "Bob"

Также очень легко наследовать классы в ES6:

class Musician extends Person {
   constructor (name, instrument) {
     // Call the base class
     super(name);

     this.instrument = instrument;
   }

   play () {
     console.log(`${this.getName()} is playing ${this.instrument}`);
   }
}

var me = new Musician("Johnny B.", "piano");

// Get the name of the musician, who is also a person
console.log(me.getName());
// => "Johnny B."

me.play();
// => "Johnny B. is playing piano."

Async vs sync.

Иногда вам нужно немного ждать, чтобы вещи были сделаны: например, при создании торта, вы должны работать над ним, и вы должны ждать некоторое время, чтобы он был готов. Самые знакомые вещи в нашей жизни асинхронные.

Синхронизация

Обычно синхронные операции отправляют ответ напрямую, используя Возвращение ключевое слово:

// Synchronous sum
function sum (a, b) {
  return a + b;
}
var result = sum(40, 2);
// => 42

Async.

Чтобы иметь функцию Async, вам нужен источник асинхронизации. В этом примере мы будем использовать Сетримс функция. Он принимает функцию в качестве первого аргумента (которая называется Функция обратного вызова ) и номер в качестве второго аргумента – представляющий задержку времени после того, как называется функции:

function asyncSum (a, b, cb) {
  setTimeout(function () {
    cb(a + b); // -----------+ This is the place
  }, 1000);    //            | where we call then
}              //            V callback function
asyncSum(40, 2, function (result) {
  console.log(result);
  // => 42
});

Что такое обратные вызовы?

Обратный вызов s – это функции, которые отправляются в качестве аргумента для другой функции и вызывают, когда что-то происходит.

function Cake() { /* Just a dummy class-like constructor for now */ }

// We won't make a ckae if we're busy
var busy = false;

function makeCake ( callback) {
  // If we're busy making a cake, send back an error
  if (busy) {
    return callback(new Error("Already busy with creating a cake. Please wait a bit and try again later."));
  }
  // Well, if we weren't busy before, we are now
  busy = true;

  // Wait one second
  setTimeout(function () { // <- This is a callback function too. It is called after one second.

    // After one second we call the callback function
    callback(null, new Cake());

    // After sending the cake, we're not busy anymore
    busy = false;
  }, 1000);
}

makeCake(function (err, cake) {
  if (err) { console.error(err); }
  console.log("Made a cake.");
  // => "Made a cake."
});

// This will end with an error because we're busy already
makeCake(function (err, cake) {
  if (err) { console.error(err); }
  // !=> "Already busy with creating a cake. Please wait a bit and try again later."
  console.log("Made a cake.");
});

// Wait 2 seconds
setTimeout(function () {
  // This will work again
  makeCake(function (err, cake) {
    if (err) { console.error(err); }
    console.log("Made a cake.");
    // => "Made a cake."
  });
}, 2000);

Обещания

Есть вещь называется Обещание Отказ Давайте посмотрим пример:

function sum (a, b) {
   return Promise(function (resolve, reject) {
     // Let's wait a second and only then send the response
     setTimeout(function () {
       if (typeof a !== "number" || typeof b !== "number") {
         return reject(new TypeError("Please provide two numbers to sum."));
       }
       resolve(a + b);
     }, 1000);
   });
}

var myPromise = sum(40, 2);

myPromsise.then(function (result) {
  // After one second we have the response here
  console.log("> Summed 40 + 2: ", result);

  // Let's pass some invalid data and return another promise
  return sum(null, "foo");
}).then(function () {
  // This won't be called because we have an error
}).catch(function (err) {
  // Instead, this `catch` handler is called: (after another second)
  console.error(err);
  // => Please provide two numbers to sum.
});

Обещание может быть в одном из этих трех государств:

  • В ожидании : Операция ожидается
  • Выполнено : операция была закончена
  • отклонено : появилась ошибка, поэтому обещание – отклоненный

Document Packoverflow имеет хороший раздел о обещаниях здесь Отказ

Создавать и бросать ошибки

Чтобы создать ошибку, вы должны использовать Ошибка . конструктор:

let myError = new Error("Something went really wrong.");

// You can even append custom data here
myError.code = "MY_FANCY_ERROR_CODE";

Чтобы бросить ошибку, вы должны использовать бросить утверждение:

throw new Error("Something bad happened.");

Есть несколько типов ошибок. Например, если вы проверяете аргументы, переданные функции, используйте Типеррор :

function sayHello(message) {
  if (typeof message !== "string") {
    throw new TypeError("The message should be a string.");
  }
  console.log(message);
}

Обратные вызовы

Когда у вас есть интерфейс обратного вызова, это дружелюбие, чтобы отправить ошибки, используя функции обратного вызова.

Обещания

В обещаниях (даже на интерфейсе) это дружелюбнее отправлять ошибки, используя функции отклонения.

Обработка ошибок

В целом, это хорошая практика для проверки данных, которые вы передаваете на функцию (особенно когда они исходят с пользовательского ввода). Таким образом, вы можете избежать Типеррор быть брошенным.

Если есть функция, которая бросает ошибку по дизайну, вы можете поймать его, используя попробуй - поймать :

function assert (truly) {
  if (!truly) {
    throw new Error("Not true.");
  }
}

try {
  // This will *not* throw an error
  assert(42 === 42);

  // This will throw an error, so that will go in the catch
  assert(42 === -1);

  // Everything put after the place where the error was thrown
  // is not executed
} catch (e) {
  console.error(e);
  // => Not true.
}

Примечание. Если у вас есть ASYNC-функция (либо на основе обратного вызова, либо возвращая обещание), вы сделаете что-то подобное:

// Callback
fetchDataFromServer(function (err, data) {
  if (err) {
    /* do something if you have an error */
  } else {
    /* Do something with `data` */
  }
});

// Promise
fetchDataFromServer().then(function (data) {
    /* Do something with `data` */
}).catch(function (err) {
    /* do something if you have an error */
});

Увеличение/уменьшение чисел

Вы можете увеличить имя переменной х Использование ++ x или х ++ Отказ Точно так же вы можете уменьшить его по --x или X-- Отказ

Разница в том, что ++ x ( --x ) Возвращает увеличенное (уменьшенное) значение, а х ++ ( X-- ) Возвращает предыдущее значение х Отказ

// Let's declare x
let x = 42;

// Store in y, the result of ++x
let y = ++x;

// Let's see the result
console.log(`x is ${x} and y is ${y}`);
→ 'x is 43 and y is 43'

// Now, store in y the result of x++. Note, x is now 43.
y = x++;

// Let's see again
console.log(`x is ${x} and y is ${y}`);
→ 'x is 44 and y is 43'

// So, `y` is 43, because `x++` returned the pre-incremented value (which was 43)

Петли

Это распечатает все целые числа от 1 к 42 Отказ

для

for (var i = 1; i <= 42; ++i) {
  console.log(i);
}

Использование Для ... в ... Может использоваться для случайных клавиш объектов:

var name = {
  first: "Johnny",
  last: "B."
};

for (var key in name) {
  if (name.hasOwnProperty(key)) {
    console.log(key, name[key]);
    // "first", "Johnny"
    // "last", "B."
  }
}

В ES6 есть Для ... | также. Это довольно аккуратно, поскольку оно иташивает какие-либо намеки (массивы, строки и т. Д.).

let numbers = [-1, 7, 42, 64];
for (let num of numbers) {
  console.log(num);
}
// -1
// 7
// 42
// 64

пока

var i = 1;
while (i <= 42) {
    console.log(i);
    ++i;
}

делать пока

var i = 0;
do {
    ++i;
    console.log(i);
} while (i < 42);

Строгий режим

Строгий режим, когда включен, показывает потенциальные ошибки, сделанные разработчиком:

a = 42;
// 42

"use strict";
b = 42;
// Error: `b` is not defined

Регулярные выражения

Регулярные выражения очень веселые. Они разграничены косулью:

/^[0-9]+$/gm.test("a")
// => false

/^[0-9]+$/gm.test("42")
// => true

Регулярное выражение имеет шаблон и флаги. Узор в этом примере это ^ [0-9] + $ -Мебан, если вход один или несколько цифр (из 0 до 9 ), мы подтверждаем его – пока флаги G (глобальный) и м (многослойное).

Regex101.com это хороший ресурс для визуализации и совместного использования регулярных выражений с другими:

JavaScript Cheat лист

Регулярные выражения могут быть использованы для сопоставления вещей в строках, таких как цифры:

// Get all the numbers from this input (note you'll get an array of strings)
> "Alice was born in 1974, so she's 42 years old in 2016.".match(/[0-9]+/g)
[ '1974', '42', '2016' ]

// Want to get numbers? Map them using the `Number` function
> "Alice was born in 1974, so she's 42 years old in 2016.".match(/[0-9]+/g).map(Number)
[ 1974, 42, 2016 ]

// BE CAREFUL that if there's no match `match` will return `null`
> "Bob is seven years old.".match(/[0-9]+/g)
null

Кроме того, их можно использовать для заменить Части струн:

// Mask all the digits of a credit card number, but the last 4
> "1234234534564567".replace(/\d(?=\d{4})/g, "*");
'************4567'

Полезные математические функции и константы

// Get the PI number
> Math.PI
3.141592653589793

// Get the E number
> Math.E
2.718281828459045

// Maximum between two numbers
> Math.max(7, 42)
42

// Minimum between numbers (arguments)
> Math.min(7, 42, 255, 264)
7

// Power
> Math.pow(2, 4)
16

// Random number between 0 (inclusive) and 1 (exclusive)
> Math.random()
0.2114640628617317

// Round
> Math.round(41.8)
42

Есть тригонометрические функции, а также: грех , COS , Тан , Атан И т. Д. Обратите внимание, что эти требуют радианов. π радианов градусов Отказ

Даты

Используйте Дата Конструктор для создания объектов даты.

var now = new Date();
now.getFullYear();
// => 2016

Если вы хотите иметь модные вещи, такие как даты форматирования и т. Д., Используйте библиотеки, такие как момент или Daty Отказ

Если вы заметите все, что можно улучшить, просто оставьте комментарий, и я буду рад внести изменения. 📝.