فهرست منبع

2nd iteration begin

me@helium 8 سال پیش
والد
کامیت
198312fb75
1فایلهای تغییر یافته به همراه149 افزوده شده و 0 حذف شده
  1. 149 0
      php2js.md

+ 149 - 0
php2js.md

@@ -245,3 +245,152 @@ echo ("Тут есть" . $a . "перенос" . $a . "строки");
 - `+"123"`. Простой и краткий способ для приведения строки к числу
 - `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** для пустых/незаданных значений.
+
+
+### Массивы
+