Javascript.RU

Преобразование типов

Update: Более новый материал по этой теме находится по адресу http://es5.javascript.ru.
9. Преобразование типов

Среда выполнения ECMAScript выполняет автоматическое преобразование типа по необходимости. Чтобы разъяснить семантику, полезно определить набор операторов преобразования. Эти операторы не являются частью языка. Они определены здесь для удобства определения семантики языка. Операторы сравнения полиморфны, то есть они могут принимать значения любых стандартных типов, кроме типов Reference, List или Completion (т.е. внутренних типов).

9.1 ToPrimitive

Оператор ToPrimitive ("к элементарному") принимает аргумент Значение и опциональный аргумент ПредпочтительныйТип. Оператор ToPrimitive преобразует свой аргумент-значение в тип, не являющийся типом Object. Если объект может быть преобразован к более чем одному элементарному типу, он может использовать опциональную подсказку ПредпочтительныйТип, чтобы выбрать один из них. Преобразование происходит согласно следующей таблице:

Входной тип Результат
Undefined Результат совпадает с входным аргументом (преобразование не производится).
Null Результат совпадает с входным аргументом (преобразование не производится).
Boolean Результат совпадает с входным аргументом (преобразование не производится).
Number Результат совпадает с входным аргументом (преобразование не производится).
String Результат совпадает с входным аргументом (преобразование не производится).
Object Возвращает значение по умолчанию для объекта. Значение по умолчанию для объекта получается путём вызова для объекта внутреннего метода [[DefaultValue]] с передачей ему опциональной подсказки ПредпочтительныйТип. Поведение метода [[DefaultValue]] определяется данной спецификацией для всех встроенных объектов ECMAScript (8.6.2.6).
9.2 ToBoolean

Оператор ToBoolean ("к булевскому") преобразует свой аргумент в значение типа Boolean согласно следующей таблице:

Входной тип Результат
Undefined false
Null false
Boolean Результат совпадает с входным аргументом (преобразование не производится).
Number Результат равен false, если аргумент равен +0, -0 или NaN, иначе результат равен true.
String Результат равен false, если аргумент является пустой строкой (его длина равна нулю), иначе результат равен true.
Object true
9.3 ToNumber

Оператор ToNumber ("к числу") преобразует свой аргумент в значение типа Number согласно следующей таблице:

Входной тип Результат
Undefined NaN
Null +0
Boolean Результат равен 1, если аргумент равен true. Результат равен +0, если аргумент равен false.
Number Результат совпадает с входным аргументом (преобразование не производится).
String См. грамматику и замечание ниже.
Object Применяются следующие шаги:

1. Вызвать ToPrimitive(входной аргумент, подсказка Number).

2. Вызвать ToNumber(Результат(1)).

3. Вернуть Результат(2).

9.3.1 ToNumber в применении к типу String

Когда метод ToNumber вызывается для строки, он применяет к ней следующую грамматику. Если грамматика не может расшифровать строку как нетерминал СтроковойЧисленныйЛитерал, то результатом вызова ToNumber является NaN.

СтроковойЧисленныйЛитерал :::
СтрПробеловопц
СтрПробеловопц СтрЧисленныйЛитерал СтрПробеловопц
СтрПробелов :::
СтрСимвПробела СтрПробеловопц
СтрСимвПробела :::
<TAB>
<SP>
<NBSP>
<FF>
<VT>
<CR>
<LF>
<LS>
<PS>
<USP>
СтрЧисленныйЛитерал :::
СтрДесятичныйЛитерал
ШестнадцатеричныйЦелыйЛитерал

СтрДесятичныйЛитерал :::
СтрБеззнаковыйДесятичныйЛитерал
+ СтрБеззнаковыйДесятичныйЛитерал
- СтрБеззнаковыйДесятичныйЛитерал
СтрБеззнаковыйДесятичныйЛитерал :::
Infinity
ДесятичныеЦифры . ДесятичныеЦифрыопц ЭкспоненциальнаяЧастьопц
. ДесятичныеЦифры ЭкспоненциальнаяЧастьопц
ДесятичныеЦифры ЭкспоненциальнаяЧастьопц
ДесятичныеЦифры :::
ДесятичнаяЦифра
ДесятичныеЦифры ДесятичнаяЦифра
ДесятичнаяЦифра ::: одна из
0 1 2 3 4 5 6 7 8 9
ЭкспоненциальнаяЧасть :::
ПризнакЭкспоЗаписи ЗнаковоеЦелое
ПризнакЭкспоЗаписи ::: один из
e E
ЗнаковоеЦелое :::
ДесятичныеЦифры
+ ДесятичныеЦифры
- ДесятичныеЦифры
ШестнадцатеричныйЦелыйЛитерал :::
ШестнадцатеричнаяЦифра0x ШестнадцатеричнаяЦифра
0X ШестнадцатеричнаяЦифра
ШестнадцатеричныйЦелыйЛитерал ШестнадцатеричнаяЦифра
ШестнадцатеричнаяЦифра ::: одна из
0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F

Следует отметить некоторые различия между синтаксисом СтроковогоЧисленногоЛитерала и ЧисленногоЛитерала (см. 7.8.3):

  • Перед или после СтроковогоЧисленногоЛитерала могут идти пробелы и/или концы строк.
  • В начале десятичного СтроковогоЧисленногоЛитерала может идти любое количество цифр 0.
  • Перед СтроковымДесятичнымЛитералом может встретиться символ + или -, который определяет его знак.
  • Пустой или состоящий из одних пробелов СтроковойЧисленныйЛитерал преобразует в +0.

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

  • МЗ СтроковогоЧисленногоЛитерала ::: [пусто] равно 0.
  • МЗ СтроковогоЧисленногоЛитерала ::: СтрПробелов равно 0.
  • МЗ СтроковогоЧисленногоЛитерала ::: СтрПробеловопц СтрЧисленногоЛитерала СтрПробеловопц равно МЗ СтрЧисленногоЛитерала вне зависимости от того, присутствуют пробелы или нет.
  • МЗ СтрЧисленногоЛитерала ::: СтрДесятичногоЛитерала равняется МЗ СтрДесятичногоЛитерала.
  • МЗ СтрЧисленногоЛитерала ::: ШестнадцатеричногоЦелогоЛитерала равняется МЗ ШестнадцатеричногоЦелогоЛитерала.
  • МЗ СтрЧисленногоЛитерала ::: СтрДесятичногоЛитерала равняется МЗ СтрДесятичногоЛитерала.
  • МЗ СтрЧисленногоЛитерала ::: + СтрБеззнаковогоДесятичногоЛитерала равняется МЗ СтрБеззнаковогоДесятичногоЛитерала.
  • МЗ СтрЧисленногоЛитерала ::: - СтрБеззнаковогоДесятичногоЛитерала равняется МЗ СтрБеззнаковогоДесятичногоЛитерала, взятому с отрицательным знаком. (Заметим, что если МЗ СтрБеззнаковогоДесятичногоЛитерала равно 0, отрицательным значением для него тоже берётся 0. Описанное ниже правило округления производит округление этого беззнакового метатематического нуля до +0 или -0 в зависимости от обстоятельств.)
  • МЗ СтрБеззнаковогоДесятичногоЛитерала ::: Infinity ("бесконечности") равняется 1010000 (т.е. столь большое значение, что оно округлится до +∞ ).
  • МЗ СтрБеззнаковогоДесятичногоЛитерала ::: ДесятичныхЦифр. равно МЗ ДесятичныхЦифр. МЗ СтрБеззнаковогоДесятичногоЛитерала ::: ДесятичныхЦифр. ДесятичныхЦифр равно сумме МЗ первых ДесятичныхЦифр и (МЗ вторых ДесятичныхЦифр, умноженного на 10-n ), где n - число символов во вторых ДесятичныхЦифрах.
  • МЗ СтрБеззнаковогоДесятичногоЛитерала ::: ДесятичныхЦифр. ЭкспоненциальнойЧасти равно МЗ ДесятичныхЦифр умноженному на 10e, где e равно МЗ ЭкспоненциальнойЧасти.
  • МЗ СтрБеззнаковогоДесятичногоЛитерала ::: ДесятичныхЦифр. ДесятичныхЦифр ЭкспоненциальнойЧасти равно МЗ суммы первых ДесятичныхЦифр и (МЗ вторых ДесятичныхЦифр, умноженному на 10-n )), умноженной на 10e, где n - число символов во вторых ДесятичныхЦифрах и e равно МЗ ЭкспоненциальнойЧасти.
  • МЗ СтрБеззнаковогоДесятичногоЛитерала ::: . ДесятичныхЦифр равно МЗ ДесятичныхЦифр умноженному на 10-n, где n равно числу символов в ДесятичныхЦифрах.
  • МЗ СтрБеззнаковогоДесятичногоЛитерала ::: . ДесятичныхЦифр ЭкспоненциальнойЧасти равно МЗ ДесятичныхЦифр умноженному на 10e-n, где n равно числу символов в ДесятичныхЦифрах, а e равно МЗ ЭкспоненциальнойЧасти.
  • МЗ СтрБеззнаковогоДесятичногоЛитерала ::: ДесятичныхЦифр равно МЗ ДесятичныхЦифр.
  • МЗ СтрБеззнаковогоДесятичногоЛитерала ::: ДесятичныхЦифр ЭкспоненциальнойЧасти равно МЗ ДесятичныхЦифр умноженному на 10e, где e равно МЗ ЭкспоненциальнойЧасти.
  • МЗ ДесятичныхЦифр ::: ДесятичнойЦифры равно МЗ ДесятичнойЦифры. МЗ ДесятичныхЦифр ::: ДесятичныхЦифр ДесятичнойЦифры равно сумме (МЗ ДесятичныхЦифр умноженного на 10) и МЗ ДесятичнойЦифры.
  • МЗ ЭкспоненциальнойЧасти ::: ПризнакаЭкспоЗаписи ЗнаковогоЦелого равняется МЗ ЗнаковогоЦелого.
  • МЗ ЗнаковогоЦелого ::: ДесятичныхЦифр равняется МЗ ДесятичныхЦифр.
  • МЗ ЗнаковогоЦелого ::: + ДесятичныхЦифр равняется МЗ ДесятичныхЦифр.
  • МЗ ЗнаковогоЦелого ::: - ДесятичныхЦифр равняется взятому с отрицательным знаком МЗ ДесятичныхЦифр.
  • МЗ ДесятичнойЦифры ::: 0 или ШестнадцатеричнойЦифры ::: 0 равняется 0.
  • МЗ ДесятичнойЦифры ::: 1 или ШестнадцатеричнойЦифры ::: 1 равняется 1.
  • МЗ ДесятичнойЦифры ::: 2 или ШестнадцатеричнойЦифры ::: 2 равняется 2.
  • МЗ ДесятичнойЦифры ::: 3 или ШестнадцатеричнойЦифры ::: 3 равняется 3.
  • МЗ ДесятичнойЦифры ::: 4 или ШестнадцатеричнойЦифры ::: 4 равняется 4.
  • МЗ ДесятичнойЦифры ::: 5 или ШестнадцатеричнойЦифры ::: 5 равняется 5.
  • МЗ ДесятичнойЦифры ::: 6 или ШестнадцатеричнойЦифры ::: 6 равняется 6.
  • МЗ ДесятичнойЦифры ::: 7 или ШестнадцатеричнойЦифры ::: 7 равняется 7.
  • МЗ ДесятичнойЦифры ::: 8 или ШестнадцатеричнойЦифры ::: 8 равняется 8.
  • МЗ ДесятичнойЦифры ::: 9 или ШестнадцатеричнойЦифры ::: 9 равняется 9.
  • МЗ ШестнадцатеричнойЦифры ::: a или ШестнадцатеричнойЦифры ::: A равняется 10.
  • МЗ ШестнадцатеричнойЦифры ::: b или ШестнадцатеричнойЦифры ::: B равняется 11.
  • МЗ ШестнадцатеричнойЦифры ::: c или ШестнадцатеричнойЦифры ::: C равняется 12.
  • МЗ ШестнадцатеричнойЦифры ::: d или ШестнадцатеричнойЦифры ::: D равняется 13.
  • МЗ ШестнадцатеричнойЦифры ::: e или ШестнадцатеричнойЦифры ::: E равняется 14.
  • МЗ ШестнадцатеричнойЦифры ::: f или ШестнадцатеричнойЦифры ::: F равняется 15.
  • МЗ ШестнадцатеричногоЦелогоЛитерала ::: 0x ШестнадцатеричнойЦифры равняется МЗ ШестнадцатеричнойЦифры.
  • МЗ ШестнадцатеричногоЦелогоЛитерала ::: 0X ШестнадцатеричнойЦифры равняется МЗ ШестнадцатеричнойЦифры.
  • МЗ ШестнадцатеричногоЦелогоЛитерала ::: ШестнадцатеричногоЦелогоЛитерала ШестнадцатеричнойЦифры равняется сумме (МЗ ШестнадцатеричногоЦелогоЛитерала умноженного на 16) и МЗ ШестнадцатеричнойЦифры.

После того как для строкового численного литерала было определено точное МЗ, оно округляется к значению типа Number. Если МЗ равно 0, то округлённое значение обычно равно +0. Исключение составляют случаи, когда первым непробельным символом строкового численного литерала является '-', тогда округлённое значение равно -0. Для других значений МЗ в качестве округлённого берётся численное значение для МЗ (согласно определению в разделе 8.5), за исключением тех случаев, когда литерал включает в себя СтрБеззнаковыйДесятичныйЛитерал и содержит более 20 значащих цифр. Тогда за численное значение принимается либо численное значение МЗ литерала, получаемое заменой каждой значащей цифры после двадцатой на цифру 0, либо численное значение МЗ литерала, получаемое заменой каждой значащей цифры после двадцатой на цифру 0 и затем увеличением литерала на единицу в позиции двадцатой значащей цифры. Цифра является значащей, если она не принадлежит ЭкспоненциальнойЧасти и

  • она не равна 0, или
  • слева от неё есть ненулевая цифра и справа от неё есть ненулевая цифра, не принадлежащая ЭкспоненциальнойЧасти.
9.4 ToInteger

Оператор ToInteger ("к целому") преобразует свой аргумент в целочисленное значение. Оператор работает по следующей схеме:

1. Вызвать оператор ToNumber для входного аргумента.

2. Если Результат(1) равен NaN - вернуть +0.

3. Если Результат(1) равен +0, -0, +∞ или -∞ - вернуть Результат(1).

4. Вычислить sign(Результат(1)) * floor(abs(Результат(1))).

5. Вернуть Результат(4).

9.5 ToInt32: (Знаковое 32-разрядное целое)

Оператор ToInt32 преобразует свой аргумент к одному из 232 целых значений в диапазоне от -231 до 231-1 включительно. Оператор работает по следующей схеме:

1. Вызвать оператор ToNumber для входного аргумента.

2. Если Результат(1) равен NaN, +0, -0, +∞ или -∞ - вернуть +0.

3. Вычислить sign(Результат(1)) * floor(abs(Результат(1))).

4. Вычислить Результат(3) modulo 232, т.е. конечное целочисленное значение k типа Number с положительным знаком и меньшее 232 такое, что разница между Результатом(3) и k математически кратна 232 .

5. Если Результат(4) больше или равен 231 - вернуть Результат(4)-232 , иначе вернуть Результат(4).

ЗАМЕЧАНИЕ
Для вышеприведённого определения ToInt32:

Операция ToInt32 является тождественной: если она применяется к результату применения этой операции, второе применение не меняет результата.

ToInt32(ToUint32(x)) эквивалентно ToInt32(x) для всех значений x. (Именно для сохранения этого последнего свойства +∞ и -∞ отображаются на +0.)

ToInt32 отображает -0 на +0.

9.6 ToUint32: (Беззнаковое 32-разрядное целое)

Оператор ToInt32 преобразует свой аргумент к одному из 232 целых значений в диапазоне от 0 до 232-1 включительно. Оператор работает по следующей схеме:

1. Вызвать оператор ToNumber для входного аргумента.

2. Если Результат(1) равен NaN, +0, -0, +∞ или -∞ - вернуть +0.

3. Вычислить sign(Результат(1)) * floor(abs(Результат(1))).

4. Вычислить Результат(3) modulo 232, т.е. конечное целочисленное значение k типа Number с положительным знаком и меньшее 232 такое, что разница между Результатом(3) и k математически кратна 232 .

5. Вернуть Результат(4).

ЗАМЕЧАНИЕ
Для вышеприведённого определения ToUInt32:

Шаг 5 является единственным различием между ToUint32 и ToInt32.

Операция ToUint32 является тождественной: если она применяется к результату применения этой операции, второе применение не меняет результата.

ToUint32(ToInt32(x)) эквивалентно ToUint32(x) для всех значений x. (Именно для сохранения этого последнего свойства +∞ и -∞ отображаются на +0.)

ToUint32 отображает -0 на +0.

9.7 ToUint16: (Беззнаковое 16-разрядное целое)

Оператор ToUint16 преобразует свой аргумент к одному из 216 целых значений в диапазоне от 0 до 216-1 включительно. Оператор работает по следующей схеме:

1. Вызвать оператор ToNumber для входного аргумента.

2. Если Результат(1) равен NaN, +0, -0, +∞ или -∞ - вернуть +0.

3. Вычислить sign(Результат(1)) * floor(abs(Результат(1))).

4. Вычислить Результат(3) modulo 216, т.е. конечное целочисленное значение k типа Number с положительным знаком и меньшее 216 такое, что разница между Результатом(3) и k математически кратна 216 .

5. Вернуть Результат(4).

ЗАМЕЧАНИЕ
Для вышеприведённого определения ToUint16:

Замена 232 на 216 на шаге 4 является единственным различием между ToUint32 и ToUint16.

ToUint16 отображает -0 на +0.

9.8 ToString

Оператор ToString (" к строке") преобразует свой аргумент к значению типа String согласно следующей таблице:

Входной тип Результат
Undefined "undefined"
Null "null"
Boolean Если аргумент равен true, то результат равен "true".
Если аргумент равен false, то результат равен "false".
Number См. замечание ниже.
String Возвращает входной аргумент (преобразование не производится)
Object Применяются следующие шаги:
1. Вызвать ToPrimitive(входной аргумент, подсказка String).
2. Вызвать ToString(Результат(1)).
3. Вернуть Результат(2).
9.8.1 ToString применённый к типу Number

Оператор ToString преобразует число m в строковой формат по следующей схеме:

1. Если m равно NaN - вернуть строку "NaN".

2. Если m равно +0 или -0 - вернуть строку "0".

3. Если m меньше нуля - вернуть строковую конкатенацию строки "-" и ToString(-m).

4. Если m является бесконечностью - вернуть строку "Infinity".

5. В прочих случаях, пусть n, k и s - такие целые, что k >= 1, 10k-1<= s <10k, численное значение s * 10n-k равно m и k имеет наименьшее из возможных значений. Заметим, что k равно количеству цифр в десятичном представлении s, что s не делится на 10 и что младший десятичный разряд s не обязательно однозначно определяется этими критериями.

6. Если k <= n <= 21 - вернуть строку, состоящую из k цифр численного представления s (по порядку разрядов, без лишних начальных нулей), за которым следуют n k символов '0'.

7. Если 0 < n <= 21 - вернуть строку, состоящую n старших цифр десятичного представления s, за которыми следуют десятичная точка '. ' и оставшиеся k-n цифр десятичного представления s.

8. Если -6 <n <= 0 - вернуть строку, состоящую из символа '0', за которыми следуют десятичная точка '. ', -n символов '0' и k цифр десятичного представления s.

9. Иначе, если k = 1 - вернуть строку s, за которой следует символ латиницы нижнего регистра 'e', знак плюс '+' или минус '-' (в зависимости от того, положительно n-1 или отрицательно), за которым следует десятичное представление целого abs(n-1) (без лишних начальных нулей).

10. Вернуть строку, состоящую из старшей цифры десятичного представления s, за которой следуют десятичная точка '. ', оставшиеся k-1цифр десятичного представления s, за которыми следует символ латиницы нижнего регистра 'e', знак плюс '+' или минус '-' (в зависимости от того, положительно n-1 или отрицательно), за которым следует десятичное представление целого abs(n-1) (без лишних начальных нулей).

ЗАМЕЧАНИЕ
Следующие наблюдения могут служить рекомендациями для создателей реализаций, но не являются частью нормативных требований данного Стандарта:

Если x - некоторое численное значение, не равное -0, то ToNumber(ToString(x)) в точности совпадает с значением x.

Младшая десятичная цифра s не всегда однозначно определяется требованиями шага 5.

Для реализаций, которые обеспечивают более точные преобразования, чем требуемые в правилах выше, рекомендуется использовать следующую альтервстроенную версию шага 5:

В прочих случаях, пусть n, k и s - такие целые, что k >= 1, 10k-1<= s <10k, численное значение s * 10n-k равно m и k имеет наименьшее из возможных значений. Если существует несколько подходящих значений для s - выбрать из них то, для которого s * 10n-k является ближайшим к m. Если существует два таких возможных значения s - выбрать из них чётное. Заметим, что k равно количеству цифр в десятичном представлении s и что s не делится на 10.

Создателям реализаций ECMAScript рекомендуется изучить работу Дэвида М. Гэя по преобразованиям чисел с плавающей точкой из двоичного формата в десятичный:

Gay, David M. Correctly Rounded Binary-Decimal and Decimal-Binary Conversions. Numerical Analysis Manuscript 90-10. AT&T Bell Laboratories (Murray Hill, New Jersey). November 30, 1990. Доступна по адресу http://cm.bell-labs.com/cm/cs/doc/90/4-10.ps.gz. Исходные коды программ из данной работы доступны по адресам http://cm.bell-labs.com/netlib/fp/dtoa.c.gz и http://cm.bell-labs.com/netlib/fp/g_fmt.c.gz, а также на различных сайтах-зеркалах netlib.

9.9 ToObject

Оператор ToObject ("к объекту") преобразует свой аргумент в значение типа Object согласно следующей таблице:

Входной тип Результат
Undefined Бросить исключение TypeError.
Null Бросить исключение TypeError.
Boolean Создать новый объект Boolean со свойством [[value]] равным входному булевскому значению. Описание объектов Boolean см. в разделе 15.6.
Number Создать новый объект Number со свойством [[value]] равным входному численному значению. Описание объектов Number см. в разделе 15.7.
String Создать новый объект String со свойством [[value]] равным входному строковому значению. Описание объектов String см. в разделе 15.7.
Object Результат совпадает с входным аргументом (преобразование не производится).

Автор: однако (не зарегистрирован), дата: 1 декабря, 2008 - 10:05
#permalink

Такие сложности в преобразовании ToNumber....


Автор: Алексей1981 (не зарегистрирован), дата: 20 июня, 2011 - 12:18
#permalink

Названия всех операторов должны начинаться с маленькой буквы - например не "ToString", а "toString". Исправьте.


Автор: Офигенный слон (не зарегистрирован), дата: 23 сентября, 2011 - 15:36
#permalink

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

Как обазначить данные операторы (с маленькой буквы или с большой) дело второстепенное.


Автор: Dave Modis (не зарегистрирован), дата: 12 сентября, 2011 - 13:04
#permalink

Жаль, что нет ни одного примера. Это вызывает у меня затруднения.


Автор: Гость (не зарегистрирован), дата: 29 ноября, 2012 - 19:12
#permalink

Спасибо. Взял на заметку


Автор: respo (не зарегистрирован), дата: 29 июля, 2013 - 17:01
#permalink

Кому нужно преобразовать из строки в число есть такой способ:

var a = '3.4';
var b = '8';
var sum = ( a - 0 ) + ( b - 0 );

Автор: Ром (не зарегистрирован), дата: 8 мая, 2014 - 11:36
#permalink

Ну, или +'3.14'


Автор: Гость (не зарегистрирован), дата: 12 апреля, 2022 - 17:54
#permalink

Автор: Гость (не зарегистрирован), дата: 15 апреля, 2022 - 23:36
#permalink

Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 - 13:50
#permalink

Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 - 14:41
#permalink

Автор: Gacor Slot (не зарегистрирован), дата: 27 июля, 2023 - 13:29
#permalink

Silahkan main disini bosku, mantap menang terus tanpa berhenti bosku di permainan ini kancilbola

Main terus dan dapatkan bonus yang berlimpah setiap hari nya di kancilbola

Saat ini sedang gacornya di permainan slot pada situs ini kancilbola

Permainan yang paling menguntungan dan selalu hoki slot gacor

Lebih besar kemenangannya dari pada kekalahannya slot gacor


Автор: kancilbola (не зарегистрирован), дата: 22 сентября, 2023 - 07:05
#permalink

Jackpot di permainan yang seru dari situs kancilbola
Segera di coba langsung bermain ke situs ini kancilbola


Автор: Гость (не зарегистрирован), дата: 23 января, 2024 - 07:25
#permalink

The dino game is an entertaining way to pass the time when you are offline. You can play as a T-Rex dinosaur that runs and jumps over obstacles in a desert dinosaur game


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
1 + 13 =
Введите результат. Например, для 1+3, введите 4.
 
Текущий раздел
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum