Статьи

Краткий обзор JavaScript

tags: dev, javascript, jsguide

Краткий обзор JavaScript

Этот пост дает краткий обзор JavaScript, но объясняет все основные функции.

1. Предварительные сведения

Вы должны запустить
командную строку JavaScript, чтобы вы могли попробовать примеры.

Комментарии:

    // a single-line comment (at the end of a line)
    /*
    A multi-line comment (anywhere)
    */

Различные высказывания:

    console.log("hello"); // print something
    var myvar = 7; // declare a variable

2. Ценности

В JavaScript вы работаете со следующими значениями:

  • Booleans: верно или неверно
  • Числа: 1, 1.0 (то же самое число, нет различий между целыми числами и числами с плавающей запятой)
  • Строки: «abc», «abc»
  • Функции:
        function twice(x) {
            return 2 * x;
        }
        console.log(twice(4)); // 8
    
  • Объекты: объекты хранят данные в свойствах. Каждое свойство имеет имя и значение.
        var obj = {
            propName1: 123,
            propName2: "abc"
        }
        obj.propName1 = 456;
        obj["propName1"] = 456; // same as previous statement
    

    Не путайте объекты JavaScript с простыми картами (словарями)! Их можно использовать как карты от строк до значений, но они также являются реальными объектами. Объектные литералы являются одной из выдающихся функций JavaScripts: они позволяют вам непосредственно создавать объекты — без классов. Это истинная объектная ориентация: вы можете начать с конкретных объектов и, при необходимости, вводить абстракции позже. Абстракция для фабрики объектов — это класс в большинстве основных языков, в JavaScript это функция конструктора (см. Ниже).

  • Массивы:
        var arr = [true, "abc", 123];
        console.log(arr[1]); // abc
        console.log(arr.length); // 3
    
  • не определено (см. ниже)
  • ноль (см. ниже)

Примечание. Функции и массивы также являются объектами. Например, они могут иметь свойства:

    function foo() {}
    foo.bar = 123;

Примитивы против объектов

Логические значения, числа и строки являются
примитивными типами (если undefined и null считаются имеющими свои собственные типы, то эти типы также являются примитивными). Вы проверяете примитивные типы с помощью typeof:

    > typeof 123
    'number'
    > typeof true
    'boolean'
    > typeof {}
    'object'

Все остальные типы являются
типами объектов . Вы проверяете, является ли значение экземпляром данного типа с помощью instanceof:

    > 123 instanceof Object
    false
    > {} instanceof Object
    true

Обратите внимание, что, кроме typeof и instanceof, разница между примитивами и объектами практически незаметна в JavaScript.

Не имеющий значения

JavaScript присваивает неопределенные переменные, которые еще не имеют значения:

    > var x;
    > typeof x === "undefined"
    true
    > typeof undeclaredVariable === "undefined"
    true

Программисты должны предпочесть нуль для этой цели:

    function someFunction(x) {
        // test for null:
        if (x === null) {
            // ...
        }
    }
    someFunction(null);

Поскольку операторы if определяют undefined и null как false, вы можете проверить любое из значений следующим образом:

    function hasAValue(x) {
        if (x) {
            // x is neither undefined nor null
            return "YES";
        } else {
            return "NO";
        }
    }

Осторожно: все следующие значения интерпретируются как ложные. Если вы проверяете значение с помощью hasAValue (), то, например, 0 не считается значением.

  • не определено
  • ноль
  • ложный
  • 0
  • «»

Все остальные значения интерпретируются как истина:

    > hasAValue(undefined)
    'NO'
    > hasAValue(null)
    'NO'
    > hasAValue(0)
    'NO'
    > hasAValue("")
    'NO'
    > hasAValue({})
    'YES'
    > hasAValue([])
    'YES'

3. Операторы

Операторы сравнения:

    myvar === "abc"
    myvar !== "def"
    myvar >= 0
    myvar < 0

Булевы операторы:

    0 <= a && a < arr.length // and
    a === "foo" || a === "bar"

4. Условия

    if (myvar === 3) {
        // then
    } else {
        // else
    }
    
    switch (fruit) {
        case "banana":
            // ...
            break;
        case "apple":
            // ...
            break;
        default:
            // ...
    }

5. Петли

    for (var i=0; i < arr.length; i++) {
        console.log(arr[i]);
    }
    
    // Same as above:
    var i = 0;
    while (i < arr.length) {
        console.log(arr[i]);
        i++;
    }
    
    do {
        // ...
    } while(condition);

Во всех циклах:

  • перерыв выходит из цикла.
  • продолжить начинается новая итерация цикла.

6. Функции и объявления переменных

Переменная всегда существует в полной функции, даже если она объявлена ​​внутри блока: JavaScript выполняет
подъем — любое объявление var всегда перемещается в начало функции. Ниже приведен код, в котором выполняется подъем (внутренне).

    function foo(x) {
        x++;
        if (x > 100) {
            var tmp = x - 100;
        }
    }

Из-за внутреннего подъема приведенный выше код эквивалентен

    function foo(x) {
        var tmp;
        x++;
        if (x > 100) {
            tmp = x - 100;
        }
    }

7. Массив методов

Массивы имеют много методов. Особенно
итерационные методы очень полезны, потому что вы можете избежать цикла for.

    [3, 4, 5].forEach(function (elem) {
        console.log(elem);
    });

8. Простые объекты

Ниже приведен простой объект.

    var jane = {
        name: "Jane",
        
        // a method:
        sayHello: function () {
            return this.name + " says 'hello'"
        }
    };
    console.log(jane.sayHello()); // Jane says 'hello'

Метод является свойством, значение которого является функцией. Например, sayHello () в коде выше.

Главный подводный камень: каждая функция имеет свою

Проблема: Если метод m передает функцию f другому методу или функции, то f не может получить доступ к m для этого, потому что он имеет свое собственное this. И это прискорбно, поскольку в асинхронном стиле программирования JavaScript (в Интернете или в Node.js) часто используются обратные вызовы. Пример:

    function beep(callback) {
        console.log("beep");
        callback();
    }
    
    var counter = {
        count: 0,
        beepAndInc: function () {
            var that = this;
            beep(function () {
                // the function shadows counter’s "this"
                // => must use "that"
                that.count++;
            });
        }
    }

Методы итерации массива имеют второй параметр, который позволяет вам указать значение, которое будет использоваться для этого:

    var jane2 = {
        name: "Jane",
        
        logHello: function (friends) {
            friends.forEach(function (friend) {
                console.log(this.name + " says hello to " + friend)
            }, this);
        }
    }

9. Конструкторы

Ближайшим эквивалентом классов, которые есть в JavaScript, являются
функции конструктора , обычные функции, которые вызываются с помощью new:

    // The constructor sets up an instance
    function Person(name) {
        this.name = name;
    }
    // The prototype property of the constructor holds an object whose
    // properties are shared between all instances (usually methods)
    Person.prototype.sayHello = function () {
        return this.name + " says 'hello'"
    };
    var jane = new Person("Jane");

Расширение конструктора нетривиально. Вы можете
сделать это самостоятельно или
использовать API . Обратите внимание, что вам не нужно расширение («подкласс») так часто в JavaScript, потому что вы можете добавить произвольные свойства к экземпляру.

10. Куда пойти отсюда

В блоге 2ality есть много
постов о JavaScript (включая итерации по массивам, обработку исключений, примитивы и объекты и т. Д.). Посты, которые вы должны прочитать следующие:

Сеть разработки Mozilla (MDN) содержит много хороших материалов по JavaScript. Особенно рекомендуется:

  • Руководство по JavaScript — это введение в JavaScript.
  • JavaScript Reference позволяет посмотреть подробную информацию по данной теме.

Больше ресурсов можно найти на моей странице со
ссылками JavaScript .

Источник: http://www.2ality.com/2011/10/javascript-overview.html