KEMBAR78
вступ до Java script | PPTX
Вступ до
JavaScript
Для чого використовують JavaScript?
• Для попередньої перевірки введених
користувачем даних;
• Для додавання інтерактивності до веб-
сторінок:
– складні контроли (DOM, events);
– AJAX;
– реклама, спам;
What is the world’s most popular language?
JavaScript
Перше місце за “незрозумілість і
неправильне використання“
JavaScript
JavaScript
Mocha
LiveScript
JScript – Microsoft (та ж сама історія що і з J++)
ECMAScript
JavaScript. Слово Java в назві мови не
має нічого спільного з мовою Java від Sun
Sun Netscape
Hot Java (95)
Bad Parts
Мова містить “погані конструкції”, використання
яких може перетворити читання чужого коду в
справжній жах. Деякі з них ви просто змушені
використовувати, напр. оператор +
• Microsoft and
Bad first implementations
• Перші реалізації мови JavaScript містили купу помилок
• Додайте до цього незліченні баги в прадавніх бравзерах, і
ви зрозумієте за що так зненавиділи JavaScript
For newbie and for guru
JavaScript одночасно є
дуже простою та дуже складною
Не Java та не C#
• Не має компілятора;
• Не має строгої типізації;
• Не має поняття “клас” (тип);
• Не має класичного наслідування;
• Не має virtual чи abstract методів;
• Не має overloading методів;
…
JavaScript: ключові ідеї
• “Є текст програми – виконуємо його”;
• Нестрога типізація;
• Об’єкти – динамічні контейнери;
• Прототиповане наслідування;
• Лямбда (lambda) [функції як об'єкти першого рівня];
• Зв’язування через глобальні змінні;
global
jQuery
Використання бібліотек без хорошого розуміння мови
Базові типи
 Примітивні типи даних
var i = 0; // number
var s = "Hello, world"; // string
var locked = false; // boolean
var data = new Object(); // object
var f = function() { return 1; } // function
 Спеціальні “значення”
null
undefined
<html>
<head>
<title></title>
</head>
<body>
<script type="text/javascript">
var s = "Hello, world!";
alert(s);
alert(typeof s); // string
</script>
</body>
</html>
alert(str)
Numbers
• Єдиний числовий тип
– Нема int, long, byte і т.д.
• Number - 64-бітне число з плаваючою
крапкою (double)
• Number “хворіє” тими ж проблемами, що і
double в C++, C# чи Java:
0.1 + 0.2 == 0.30000000000000004
• for (i = 0; i < 10; i++) {} - OK
NaN
• NaN – Not a Number
• Результат помилкової арифметичної операції
<script type="text/javascript">
alert(typeof 1); // number
alert(typeof NaN); // number (!)
alert(5 - "four"); // NaN
alert(NaN == NaN); // false (!)
alert(isNaN(5 - "four")); // true
</script>
String
• Стрічка є послідовністю 16-ти бітних символів;
• Немає окремого символьного типу (char);
– Символ “емулюється” стрічкою з довжиною 1;
• Стрічки незмінні (immutable);
• Стрічковий літерал можна записати з
використанням як одинарних так і подвійних
лапок;
var s = "Hello " + 'world';
var o = s.charAt(4); // "o"
var alphasCount = s.length; // 11
Boolean
• true
• false
var same = 5;
if (same) {
}
same = !!same;
alert(typeof same); // boolean
null
• null – порожнє значення
var s = "something";
alert(typeof s); // string
s = null;
alert(typeof s); // object
undefined
• undefined – значення, якого нема
• Це спеціальне значення дуже часто викликає
конфуз.
var s;
alert(s); // undefined
var point = new Object();
alert(point.L); // undefined
point.L = undefined;
alert(point.L); // undefined
Only objects, no classes
Всі об’єкти по своїй структурі є хеш таблицями
Dictionary<string, object>
JavaScript не має лінкера, «зв’язування» об’єктів
відбувається через спільний глобальний об’єкт
- window
Всі глобальні
об’єкти є
властивостями
об’єкта window
Object as Hashtable
<script type="text/javascript">
var map = new Object();
map["key1"] = "JavaScript";
map["key2"] = 10;
map["key3"] = true;
var point = new Object();
point["X"] = 3;
point['Y'] = -5;
alert(map['key2'] + point['X']);
</script>
window : object
map : object
key1 :string
"JavaScript"
key2 :number
10
key3 :boolean
true
point : object
X :number
3
Y :number
-5
<script type="text/javascript">
alert(point.X);
alert(window.point.X);
alert(window.window.point.X == point.X);
</script>
point.X || point["X"]
var point = new Object();
point["X"] = 3;
point.X = 3;
(!!!) наведені конструкції – еквівалентні
Коли доцільно використовувати
point["X"] нотацію
– коли об'єкт створюється з метою "бути хеш-
таблицею";
– коли не відомо наперед ім'я властивості:
var propName = prompt(
"Введіть ім'я властивості");
alert(point[propName]);
– коли ім'я властивості містить недозволені символи:
var person = new Object();
person["first name"] = "Ivanov";
person["-"] = true;
person["if"] = 1234567;
Нестрога типізація
var foo = 1; // typeof foo == number
foo = "firefox"; // typeof foo == string
...
foo = new Object(); // typeof foo == object
...
foo = false; // typeof foo == boolean
Арифметичні оператори, коментарі
• Такі ж як в C++/C#/Java
• так, є ++, -- та ?:
• // однорядковий коментар
• /* багаторядковий
коментар */
WARNING: operator +
var x = 1, y = 2;
alert(x + y + "$");
alert("£" + x + y);
Функції, як об'єкти першого рівня
• functions are first class objects
Дуже просте пояснення: з функціями можна
робити все те саме, що із звичайними
значеннями інших JavaScript типів (string,
object, number, boolean)
var f = "тут буде функція";
f = function() { };
var g = f;
alert(f == g); // об'єкт за посиланням
f()
<script type="text/javascript">
var sum = function(a, b) {
return a + b;
}
window["a - b"] = function(a, b) {
return a - b;
}
var result1 = sum(3, 2);
var result2 = window["a - b"](3, 2);
result = window["sum"](3, 2);
</script>
function f() {}
vs
var f = function () {}
<script type="text/javascript">
alert(sum(2, 2));
alert(diff(2, 2));
var sum = function(a, b) {
return a + b;
}
function diff(a, b) {
return a - b;
}
</script>
Оголошення функції, що потрібно
пам’ятати
function foo() {};
var foo = function foo() {};
var foo = undefined;
foo = function foo() {};
JavaScript: The Good Parts

вступ до Java script

  • 1.
  • 2.
    Для чого використовуютьJavaScript? • Для попередньої перевірки введених користувачем даних; • Для додавання інтерактивності до веб- сторінок: – складні контроли (DOM, events); – AJAX; – реклама, спам;
  • 3.
    What is theworld’s most popular language?
  • 4.
    JavaScript Перше місце за“незрозумілість і неправильне використання“ JavaScript
  • 5.
    JavaScript Mocha LiveScript JScript – Microsoft(та ж сама історія що і з J++) ECMAScript JavaScript. Слово Java в назві мови не має нічого спільного з мовою Java від Sun Sun Netscape Hot Java (95)
  • 6.
    Bad Parts Мова містить“погані конструкції”, використання яких може перетворити читання чужого коду в справжній жах. Деякі з них ви просто змушені використовувати, напр. оператор + • Microsoft and
  • 7.
    Bad first implementations •Перші реалізації мови JavaScript містили купу помилок • Додайте до цього незліченні баги в прадавніх бравзерах, і ви зрозумієте за що так зненавиділи JavaScript
  • 8.
    For newbie andfor guru JavaScript одночасно є дуже простою та дуже складною
  • 9.
    Не Java тане C# • Не має компілятора; • Не має строгої типізації; • Не має поняття “клас” (тип); • Не має класичного наслідування; • Не має virtual чи abstract методів; • Не має overloading методів; …
  • 10.
    JavaScript: ключові ідеї •“Є текст програми – виконуємо його”; • Нестрога типізація; • Об’єкти – динамічні контейнери; • Прототиповане наслідування; • Лямбда (lambda) [функції як об'єкти першого рівня]; • Зв’язування через глобальні змінні; global
  • 11.
    jQuery Використання бібліотек безхорошого розуміння мови
  • 13.
    Базові типи  Примітивнітипи даних var i = 0; // number var s = "Hello, world"; // string var locked = false; // boolean var data = new Object(); // object var f = function() { return 1; } // function  Спеціальні “значення” null undefined
  • 14.
    <html> <head> <title></title> </head> <body> <script type="text/javascript"> var s= "Hello, world!"; alert(s); alert(typeof s); // string </script> </body> </html> alert(str)
  • 15.
    Numbers • Єдиний числовийтип – Нема int, long, byte і т.д. • Number - 64-бітне число з плаваючою крапкою (double) • Number “хворіє” тими ж проблемами, що і double в C++, C# чи Java: 0.1 + 0.2 == 0.30000000000000004 • for (i = 0; i < 10; i++) {} - OK
  • 16.
    NaN • NaN –Not a Number • Результат помилкової арифметичної операції <script type="text/javascript"> alert(typeof 1); // number alert(typeof NaN); // number (!) alert(5 - "four"); // NaN alert(NaN == NaN); // false (!) alert(isNaN(5 - "four")); // true </script>
  • 17.
    String • Стрічка єпослідовністю 16-ти бітних символів; • Немає окремого символьного типу (char); – Символ “емулюється” стрічкою з довжиною 1; • Стрічки незмінні (immutable); • Стрічковий літерал можна записати з використанням як одинарних так і подвійних лапок; var s = "Hello " + 'world'; var o = s.charAt(4); // "o" var alphasCount = s.length; // 11
  • 18.
    Boolean • true • false varsame = 5; if (same) { } same = !!same; alert(typeof same); // boolean
  • 19.
    null • null –порожнє значення var s = "something"; alert(typeof s); // string s = null; alert(typeof s); // object
  • 20.
    undefined • undefined –значення, якого нема • Це спеціальне значення дуже часто викликає конфуз. var s; alert(s); // undefined var point = new Object(); alert(point.L); // undefined point.L = undefined; alert(point.L); // undefined
  • 21.
    Only objects, noclasses Всі об’єкти по своїй структурі є хеш таблицями Dictionary<string, object> JavaScript не має лінкера, «зв’язування» об’єктів відбувається через спільний глобальний об’єкт - window Всі глобальні об’єкти є властивостями об’єкта window
  • 22.
    Object as Hashtable <scripttype="text/javascript"> var map = new Object(); map["key1"] = "JavaScript"; map["key2"] = 10; map["key3"] = true; var point = new Object(); point["X"] = 3; point['Y'] = -5; alert(map['key2'] + point['X']); </script>
  • 23.
    window : object map: object key1 :string "JavaScript" key2 :number 10 key3 :boolean true point : object X :number 3 Y :number -5 <script type="text/javascript"> alert(point.X); alert(window.point.X); alert(window.window.point.X == point.X); </script>
  • 24.
    point.X || point["X"] varpoint = new Object(); point["X"] = 3; point.X = 3; (!!!) наведені конструкції – еквівалентні
  • 25.
    Коли доцільно використовувати point["X"]нотацію – коли об'єкт створюється з метою "бути хеш- таблицею"; – коли не відомо наперед ім'я властивості: var propName = prompt( "Введіть ім'я властивості"); alert(point[propName]); – коли ім'я властивості містить недозволені символи: var person = new Object(); person["first name"] = "Ivanov"; person["-"] = true; person["if"] = 1234567;
  • 26.
    Нестрога типізація var foo= 1; // typeof foo == number foo = "firefox"; // typeof foo == string ... foo = new Object(); // typeof foo == object ... foo = false; // typeof foo == boolean
  • 27.
    Арифметичні оператори, коментарі •Такі ж як в C++/C#/Java • так, є ++, -- та ?: • // однорядковий коментар • /* багаторядковий коментар */ WARNING: operator + var x = 1, y = 2; alert(x + y + "$"); alert("£" + x + y);
  • 28.
    Функції, як об'єктипершого рівня • functions are first class objects Дуже просте пояснення: з функціями можна робити все те саме, що із звичайними значеннями інших JavaScript типів (string, object, number, boolean) var f = "тут буде функція"; f = function() { }; var g = f; alert(f == g); // об'єкт за посиланням
  • 29.
    f() <script type="text/javascript"> var sum= function(a, b) { return a + b; } window["a - b"] = function(a, b) { return a - b; } var result1 = sum(3, 2); var result2 = window["a - b"](3, 2); result = window["sum"](3, 2); </script>
  • 30.
    function f() {} vs varf = function () {} <script type="text/javascript"> alert(sum(2, 2)); alert(diff(2, 2)); var sum = function(a, b) { return a + b; } function diff(a, b) { return a - b; } </script>
  • 31.
    Оголошення функції, щопотрібно пам’ятати function foo() {}; var foo = function foo() {}; var foo = undefined; foo = function foo() {};
  • 32.