String.prototype.indexof()

Tính tương thích

The compatibility table in this page is generated from structured data. If you’d like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.

Update compatibility data on GitHub

Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet Node.js
Chrome Full support 1 Edge Full support 12 Firefox Full support 1 IE Full support 4 Opera Full support 4 Safari Full support 1 WebView Android Full support ≤37 Chrome Android Full support 18 Firefox Android Full support 4 Opera Android Full support 10.1 Safari iOS Full support 1 Samsung Internet Android Full support 1.0 nodejs Full support 0.1.100

Конкатенация

Конкатенация — это объединение двух или более строк в одну большую. Объединение происходит с помощью оператора + (плюс). При конкатенации каждая последующая строка добавляется в конец предыдущей:


var str1 = "Hello ";
var str2 = "World!";

document.write(str1 + str2 + "<br>"); // "Hello World!"
document.write(str1 + "World!");

Попробовать »

Значение любого типа, которое объединяется со строкой, будет неявно (автоматически) преобразовано в строку и далее будет произведена конкатенация.

var str1 = "Hello ";

alert(str1 + 1);     // "Hello 1"
alert(true + str1);  // "trueHello"
alert(str1 + NaN);   // "Hello NaN"

Попробовать »

С этой темой смотрят:

  • Типы данных
  • Числа
  • Infinity и NaN
  • Boolean
  • Преобразование типов данных

The number of elements in the array

This one is the most common, and many answers have provided you with the typical macro ARRAY_SIZE:

Given that the result of ARRAY_SIZE is commonly used with signed variables of type , it is good to define a signed variant of this macro:

Arrays with more than members are going to give invalid values for this signed version of the macro, but from reading C17::6.5.6.9, arrays like that are already playing with fire. Only and should be used in those cases.

Recent versions of compilers, such as GCC 8, will warn you when you apply this macro to a pointer, so it is safe (there are other methods to make it safe with older compilers).

It works by dividing the size in bytes of the whole array by the size of each element.

Examples of usage:

If these functions didn’t use arrays, but got them as parameters instead, the former code would not compile, so it would be impossible to have a bug (given that a recent compiler version is used, or that some other trick is used), and we need to replace the macro call by the value:

Создание и изменение

Есть два эквивалентных способа создания массива:

var a = new Array()
var a = []

Или, сразу со значениями

var a = new Array("a", 1, true)
var a = 

Эти способы работают одинаково, кроме объявления вида , когда у конструктора есть единственный аргумент-число.


Такое объявление создаст пустой массив (все элементы undefined) длиной . По возможности, не используйте .

Отсчет элементов начинается с нуля:

alert(a)   // => "a"

Массив хранит данные по численным ключам, но внутри он использует точно такой же хэш (ту же структуру данных), как и обычный объект, поэтому можно сделать так:

var a = []
a = 1
a = 2

и массив a будет занимать память, нужную для хранения этих двух соответствий, а не займет длинный непрерывный кусок памяти, как это произошло бы в языке С.

Термины: «унарный», «бинарный», «операнд»

Прежде, чем мы двинемся дальше, давайте разберёмся с терминологией.

  • Операнд – то, к чему применяется оператор. Например, в умножении есть два операнда: левый операнд равен , а правый операнд равен . Иногда их называют «аргументами» вместо «операндов».

  • Унарным называется оператор, который применяется к одному операнду. Например, оператор унарный минус меняет знак числа на противоположный:

  • Бинарным называется оператор, который применяется к двум операндам. Тот же минус существует и в бинарной форме:

    Формально мы говорим о двух разных операторах: унарное отрицание (один операнд: меняет знак) и бинарное вычитание (два операнда: вычитает).

1.3 Вещественные типы

Среди примитивных типов также есть два вещественных. Хотя это не совсем точное название. Официально они называются числа с плавающей точкой — floating point numbers. Название происходит из стандарта, когда целую и дробную часть числа разделяет точка (а не запятая).

Полезно:

В каждой стране свои стандарты для записи чисел (внезапно!).


Многие из нас привыкли писать точки для разделения тысяч и запятую для отделения дробной части: например, мы бы записали так . А вот в США, где жили создатели Java, принят другой стандарт:

В Java есть два примитивных типа с плавающей точкой: и .

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

Например, дробное число можно представить как . Поэтому в памяти оно будет представлено как два числа (мантисса — значащая часть числа) и (экспонента — степень десятки)

Тип

Само название типа происходит от floating point number. Размер этого типа совсем небольшой — всего 4 байта (32 бита), но он может хранить значения от до . Под мантиссу отдается 24 бита, под экспоненту — 8 бит. Этот тип способен хранить всего 8 значащих цифр.

Такой подход позволяет хранить гораздо большие числа, чем , используя все те же 4 байта. Но при этом мы жертвуем точностью. Часть памяти расходуется на хранение мантиссы, поэтому такие числа хранят всего 6-7 знаков после запятой, остальные отбрасываются.

Пример:

Код Значение переменной

Как видите, основной недостаток этого типа — очень маленькое количество значащих цифр и потеря точности уже в восьмой цифре. Поэтому тип не сильно популярен среди Java-программистов.

Тип

Тип является стандартным типом с плавающей точкой. Его название происходит от double floating point. Его еще называют числом с плавающей точкой двойной точности. Все вещественные литералы по умолчанию имеют тип .


Этот тип занимает 8 байт памяти (64 бита) и может хранить значения от до . Важным моментом является то, что под его мантиссу отводится 53 бита, а остальные 11 – под экспоненту.

Это позволяет хранить 15-17 значащих цифр.

Пример:

Код Значение переменной

Такая точность, особенно в сравнении с типом , является определяющей: 99% всех операций с вещественными числами выполняются с типом .

Под экспоненту выделяется бит, что позволяет хранить степень десятки от до (степень двойки — от до ). Тип легко может хранить число с сотней нулей после запятой:

Код Значение переменной

Итого

  • Есть три типа кавычек. Строки, использующие обратные кавычки, могут занимать более одной строки в коде и включать выражения .
  • Строки в JavaScript кодируются в UTF-16.
  • Есть специальные символы, такие как , и можно добавить символ по его юникодному коду, используя .
  • Для получения символа используйте .
  • Для получения подстроки используйте или .
  • Для того, чтобы перевести строку в нижний или верхний регистр, используйте .
  • Для поиска подстроки используйте или , когда надо только проверить, есть ли вхождение.
  • Чтобы сравнить строки с учётом правил языка, используйте .

Строки также имеют ещё кое-какие полезные методы:

  • — убирает пробелы в начале и конце строки.
  • — повторяет строку раз.
  • …и другие, которые вы можете найти в справочнике.

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

Итого

У элементов есть следующие метрики:

  • – «родитель по дереву рендеринга» – ближайшая ячейка таблицы, body для статического позиционирования или ближайший позиционированный элемент для других типов позиционирования.
  • – позиция в пикселях левого верхнего угла блока, относительно его .
  • – «внешняя» ширина/высота блока, включая рамки.
  • – отступ области содержимого от левого-верхнего угла элемента. Если операционная система располагает вертикальную прокрутку справа, то равны ширинам левой/верхней рамки, если же слева (ОС на иврите, арабском), то включает в себя прокрутку.
  • – ширина/высота содержимого вместе с полями , но без полосы прокрутки.
  • – ширина/высота содержимого, включая прокручиваемую область. Включает в себя и не включает полосы прокрутки.
  • – ширина/высота прокрученной части документа, считается от верхнего левого угла.

Все свойства, доступны только для чтения, кроме . Изменение этих свойств заставляет браузер прокручивать элемент.

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


С этим читают