|
@@ -245,3 +245,152 @@ echo ("Тут есть" . $a . "перенос" . $a . "строки");
|
|
- `+"123"`. Простой и краткий способ для приведения строки к числу
|
|
- `+"123"`. Простой и краткий способ для приведения строки к числу
|
|
- `parseInt("123")` или `parseFloat("123.45")` работает схожим образом, однако обладает другими странностями и возможностями (например есть возможность
|
|
- `parseInt("123")` или `parseFloat("123.45")` работает схожим образом, однако обладает другими странностями и возможностями (например есть возможность
|
|
задать систему счисления)
|
|
задать систему счисления)
|
|
|
|
+
|
|
|
|
+## Операторы, условия, циклы.
|
|
|
|
+
|
|
|
|
+### Вызов функций
|
|
|
|
+
|
|
|
|
+Большинство кода состоит из тех или иных вызовов функций. В **JS** они выглядят почти так же:
|
|
|
|
+```javascript
|
|
|
|
+alert("as in PHP");
|
|
|
|
+alert("as in JS, without semicolon")
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+Во второй строке примера нет `;`, в этом невеликое отличие.
|
|
|
|
+
|
|
|
|
+### Операторы
|
|
|
|
+
|
|
|
|
+В большинстве своем повторяют обычный набор **PHP**, **C**, **Java** и так далее (`+`, `-`, `*`, `/`, `%`, `++`, `--`, `+=` ...). В **JS** нет `and`, `or`
|
|
|
|
+и `not`, используйте `&&`, `||`, `!`.
|
|
|
|
+
|
|
|
|
+### Условия `if` и `switch`.
|
|
|
|
+
|
|
|
|
+Работают аналогично **PHP**, однако не имеют своих длинных форм `if-endif` и `switch-endswitch`. Работают только обычные формы с фигурными скобками.
|
|
|
|
+
|
|
|
|
+### Циклы
|
|
|
|
+
|
|
|
|
+#### `foreach`
|
|
|
|
+
|
|
|
|
+В **JS** нет `foreach`, однако есть форма `for`, схожая по функционалу:
|
|
|
|
+
|
|
|
|
+```javascript
|
|
|
|
+var car = {brand: "Lada",
|
|
|
|
+ 'model': "2101"};
|
|
|
|
+
|
|
|
|
+for (var key in car){
|
|
|
|
+ alert(key + ": " + car[key]);
|
|
|
|
+}
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+```php
|
|
|
|
+var $car = ["brand" => "Lada",
|
|
|
|
+ "model" => "2101"];
|
|
|
|
+
|
|
|
|
+foreach ($car as $key => $value){
|
|
|
|
+ echo("$key: $value");
|
|
|
|
+}
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+Как можно заметить, при этом в цикле нет переменной со значенинем, а только с ключем, по которому можно в цикле получить значение из итерируемого массива.
|
|
|
|
+
|
|
|
|
+#### `for`, `while` и `do-while`
|
|
|
|
+
|
|
|
|
+работают так же как в **PHP**:
|
|
|
|
+
|
|
|
|
+```javascript
|
|
|
|
+for (var i=0;i<10;i++){
|
|
|
|
+ console.log(i);
|
|
|
|
+}
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+```php
|
|
|
|
+for ($i=0;$i<10;$i++){
|
|
|
|
+ echo $i;
|
|
|
|
+}
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+## Типы данных и Объектная модель.
|
|
|
|
+
|
|
|
|
+### Обращение к полям и методам объектов **JS**
|
|
|
|
+
|
|
|
|
+Аналогом `->` в **JS** является `.`.
|
|
|
|
+
|
|
|
|
+### Всё является объектом
|
|
|
|
+
|
|
|
|
+Даже встроенные типы данных. Многие стандартные функции **PHP** в процедурном стиле являются методами объектов в **JS**.
|
|
|
|
+
|
|
|
|
+### Числа.
|
|
|
|
+Кроме того, что целые и дробные числа объединены в единый тип `Number`, особых отличий с **PHP** нет:
|
|
|
|
+
|
|
|
|
+```javascript
|
|
|
|
+console.log(1/0); //Infinity
|
|
|
|
+console.log(-1/0);//-Infinity
|
|
|
|
+console.log(1/"asdf");//NaN
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+```php
|
|
|
|
+echo(1/0); //INF + исключение Division By Zero
|
|
|
|
+echo(-1/0);//-INF + исключение Division By Zero
|
|
|
|
+echo(1/"asdf");//INF + исключение Division By Zero
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+**PHP** при приведении к числу превращает некорректные строки в 0:
|
|
|
|
+```php
|
|
|
|
+echo intval("aaa100500");
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+**JS** в подобной ситуации возвращает `NaN`:
|
|
|
|
+```javascript
|
|
|
|
+console.log(+"aaa100500");
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+Также **JS** не выбрасывает исключение "Деление на ноль", а просто возвращает бесконечность.
|
|
|
|
+
|
|
|
|
+#### Число как объект
|
|
|
|
+
|
|
|
|
+С числами можно работать как с объектами:
|
|
|
|
+
|
|
|
|
+```javascript
|
|
|
|
+console.log(5.123456.toFixed(2)); // "5.12"
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+Аналогично
|
|
|
|
+
|
|
|
|
+```php
|
|
|
|
+echo(round(5.123456,2)); // 5.12
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+Тем не менее, многие математические операции вынесены в глобальный объект-коллекцию `Math` (например, Math.round, Math.ceil, Math.random и другие)
|
|
|
|
+
|
|
|
|
+### Строки
|
|
|
|
+
|
|
|
|
+Большинство строковых операций являются методами объекта-строки:
|
|
|
|
+
|
|
|
|
+```javascript
|
|
|
|
+console.log("12345".length); //5
|
|
|
|
+console.log("aBcDe".indexOf("D")); // 3
|
|
|
|
+console.log("123string456".substr(3,6)); // "string"
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+```php
|
|
|
|
+echo (strlen("12345")); //5
|
|
|
|
+echo (strpos("aBcDe","D")); // 3
|
|
|
|
+echo (substr("123string456",3,6)); // "string"
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+### Boolean
|
|
|
|
+Работает почти как в **PHP**, однако:
|
|
|
|
+- в **JS** `true` и `false` регистрозависимы. В **PHP** допустимы `FALse` и `tRuE`.
|
|
|
|
+- При приведении к строке в **JS** получаются строки `"true"` и `"false"`, в **PHP** - `1` и пустая строка `""`.
|
|
|
|
+
|
|
|
|
+### `undefined`
|
|
|
|
+
|
|
|
|
+Аналог `NULL` в **PHP**. В этом типе есть только одно значение - `undefined`
|
|
|
|
+
|
|
|
|
+### `null`
|
|
|
|
+
|
|
|
|
+`null` - это "`undefined` для программиста", а не для интерпретатора. Так же используется в **DOM** для пустых/незаданных значений.
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+### Массивы
|
|
|
|
+
|