bookmate game
Кайл Симпсон

Вы не знаете JS. Типы и грамматические конструкции

Notify me when the book’s added
To read this book, upload an EPUB or FB2 file to Bookmate. How do I upload a book?
  • Мария Русаковаhas quoted3 years ago
    Есть хорошая поговорка: «JavaScript — единственный язык, которым разработчики пользуются, не научившись им пользоваться».
  • b2036955411has quoted4 years ago
    typeof null === "object"; // true
  • Антон Власовhas quoted3 years ago
    Иначе говоря, если и движок, и разработчик интерпретируют значение 42 (число) не так, как они интерпретируют значение "42" (строка), то эти два значения имеют разные типы — number и string соответственно
  • Антон Власовhas quoted3 years ago
    У JavaScript с Java общего не больше, чем у луна-парка с Луной.
  • Антон Власовhas quoted3 years ago
    JavaScript определяет семь встроенных типов:
    • null
    • undefined
    • boolean
    • number
    • string
    • object
    • symbol — добавлен в ES6!
  • Антон Власовhas quoted3 years ago
    Типы языка ECMAScript — undefined, null, boolean, string, number и object
  • Антон Власовhas quoted3 years ago
    Читайте и держите книгу поближе к своему рабочему столу!
  • Дмитрий Мальченкоhas quoted3 years ago
    Какое же седьмое строковое значение может вернуть typeof?

    typeof function a(){ /* .. */ } === "function"; // true

    Легко решить, что function является высокоуровневым встроенным типом в JS, особенно при таком поведении оператора typeof. Тем не менее при чтении спецификации вы увидите, что function на самом деле ближе к «подтипу» object. А именно функция называется там «вызываемым объектом» — то есть объектом с внутренним свойством [[Call]], которое позволяет активизировать его посредством вызова.

    Тот факт, что функции в действительности являются объектами, имеет ряд важных следствий. Самое важное — то, что они могут обладать свойствами. Пример:

    function a(b,c) {

    /* .. */

    }

    У объекта функции есть свойство length, в котором хранится количество формальных параметров в объявлении этой функции:

    a.length; // 2
  • b2036955411has quoted4 years ago
    rray.prototype.reverse.call( a );
    // все равно возвращает объектную обертку String (см. главу 3)
    // для "foo" :(
    Другое обходное решение заключается в преобразовании строки в массив, выполнении нужной операции и преобразовании обратно в строку:
    var c = a
    // разбиение `a` на массив символов
    .split( "" )
    // переставить массив символов в обратном порядке
    .reverse()
    // снова объединить массив символов в строку
    .join( "" );
    c; // "oof"
    Выглядит некрасиво? Так оно и есть. Но такое решение работает для простых строк, поэтому если вам понадобится решение «на скорую руку», то такой вариант вполне подойдет.

    Будьте осторожны! Такое решение не работает для строк, содержащих сложные символы (Юникод): многобайтовые символы и т.д. Для правильного выполнения таких операций потребуется более сложная библиотека. За информацией обращайтесь к работе Матиаса Байненса (Mathias Bynens): Esrever (https://github.com/mathiasbynens/esrever).
    На происходящее также можно взглянуть иначе: если вы часто выполняете со «строками» операции, которые интерпретируют их как мас
  • b2036955411has quoted4 years ago
    JavaScript определяет семь встроенных типов:
    • null
    • undefined
    • boolean
    • number
    • string
    • object
    • symbol — добавлен в ES6!
fb2epub
Drag & drop your files (not more than 5 at once)