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

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

Kitap eklendiğinde bana bildir
Bu kitabı okumak için Bookmate’e EPUB ya da FB2 dosyası yükleyin. Bir kitabı nasıl yüklerim?
  • Мария Русаковаalıntı yaptı3 yıl önce
    Есть хорошая поговорка: «JavaScript — единственный язык, которым разработчики пользуются, не научившись им пользоваться».
  • b2036955411alıntı yaptı4 yıl önce
    typeof null === "object"; // true
  • Антон Власовalıntı yaptı3 yıl önce
    Иначе говоря, если и движок, и разработчик интерпретируют значение 42 (число) не так, как они интерпретируют значение "42" (строка), то эти два значения имеют разные типы — number и string соответственно
  • Антон Власовalıntı yaptı3 yıl önce
    У JavaScript с Java общего не больше, чем у луна-парка с Луной.
  • Антон Власовalıntı yaptı3 yıl önce
    JavaScript определяет семь встроенных типов:
    • null
    • undefined
    • boolean
    • number
    • string
    • object
    • symbol — добавлен в ES6!
  • Антон Власовalıntı yaptı3 yıl önce
    Типы языка ECMAScript — undefined, null, boolean, string, number и object
  • Антон Власовalıntı yaptı3 yıl önce
    Читайте и держите книгу поближе к своему рабочему столу!
  • Дмитрий Мальченкоalıntı yaptı3 yıl önce
    Какое же седьмое строковое значение может вернуть typeof?

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

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

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

    function a(b,c) {

    /* .. */

    }

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

    a.length; // 2
  • b2036955411alıntı yaptı4 yıl önce
    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).
    На происходящее также можно взглянуть иначе: если вы часто выполняете со «строками» операции, которые интерпретируют их как мас
  • b2036955411alıntı yaptı4 yıl önce
    JavaScript определяет семь встроенных типов:
    • null
    • undefined
    • boolean
    • number
    • string
    • object
    • symbol — добавлен в ES6!
fb2epub
Dosyalarınızı sürükleyin ve bırakın (bir kerede en fazla 5 tane)