Никита Дубко, Software Engineer
Никита Дубко, Software Engineer
10 июля 2018
Язык
Движок
// комментарий в одну строку
/* многострочный
комментарий */
var emptyObject = {}; // инициализация объекта
var a = "Hello, World!";
// undefined
a
// "Hello, World!"
typeof a
// "string"
1, 2, 3, 4
// 4
alert("Test")
var a = 1
// ✅ Success
alert("Test")
[1, 2, 3].forEach(console.log)
// ❌ TypeError: Cannot read property '3' of undefined
W3C рекомендует: всегда ставьте точку с запятой после простых операторов.
alert("Test");
[1, 2, 3].forEach(console.log);
"use strict";
function strictFunction() {
"use strict";
}
with
eval
var a, b, c;
a = 1;
b = "two";
c = [3];
var d = 42;
var e = [1, 2, 3].reduce(function(p, c) { return p + c; });
var arrayLength = [1, 2, 3].length;
var camelCase = "";
var SOME_CONST = 42;
a = 1;
var a;
console.log(a); // 1
b = "some string";
if (1 > 0) {
var b = "1 > 0";
} else {
var b = "WAT???";
}
console.log(b); // "1 > 0"
Number.MIN_VALUE
— минимальное безопасное целое числоNumber.MAX_VALUE
— наибольшее представимое положительное число0 / 0; // NaN
"string" - 2; // NaN
NaN == NaN; // false
NaN === NaN; // false
var x = 0 / 0;
x !== x; // true
1 / 0; // Infinity
-1 / 0; // -Infinity
Infinity === Infinity + Infinity; // true
1e100500; // Infinity
"Double Quoted \"String\""
'Single\nQuoted\nString'
`Backtick (ES6) String`
true;
false;
var x = null;
x; // null
var u;
u; // undefined
var obj = {
property: 'value',
'some-really-strange name with spaces': false,
'можно даже так 🙈': 42,
method: function() { console.log('😃'); }
};
var obj = new Object();
obj.property = 'value';
obj['some-really-strange name with spaces'] = false;
obj['можно даже так 🙈'] = 42;
obj.method = function() { console.log('😃'); };
var a = [1, 2, 3];
var b = [];
b[0] = 1;
b[13] = 14;
var c = new Array(100);
var d = [,,,,,,,,,,];
typeof 123; // number
typeof 'Students Lab 2018'; // string
typeof true; // boolean
typeof null; // object O_o
typeof undefined; // undefined
typeof {}; // object
typeof []; // object
+
и -
+
и -
++
и --
*
, /
%
(остаток от деления)&
(AND), |
(OR), ^
(XOR)~
(NOT)<<
(LEFT SHIFT), >>
(RIGHT SHIFT)>>>
(ZERO-FILL RIGHT SHIFT)a = 1
b += 2
эквивалентно b = b + 2
c /= 3
эквивалентно c = c / 3
d -= 4
эквивалентно d = d - 4
e *= 5
эквивалентно e = e * 5
f &= 0xFF
эквивалентно f = f & 0xFF
g ^= 0b101
эквивалентно g = g ^ 0b101
var a, b, c;
a = 1, b = a, c = b + 1; // 2
Не путать с разделителем аргументов функции, полей объекта и элементов массива:
var a = [1, 2, 3];
var o = { x: 42, y: 24 };
var f = function(a, b, c) {};
>
, <
>=
, <=
==
, ===
!=
, !==
12 > 10; // true
({}) != ({}); // true
NaN === NaN; // false
===
не преобразует типы==
пытается привести обе стороны к одному типу для сравнения1 == "1"; // true
1 === "1"; // false
({}) == true; // false
({}).toString() == true; // false
"[object Object]" == "true"; // false
null
и undefined
равны ==
друг другу и не равны чему бы то ни было ещё.null
равен 0
, а undefined
равен NaN
.null == undefined; // true
null === undefined; // false
null > 0; // false
null == 0; // false
null >= 0; // true O_o
||
(OR)&&
(AND)!
(NOT)var b = true && 0 && '';
b === 0; // true
// -------------------------------
var result = true;
if (result) {
result = 0;
if (result) {
result = '';
}
}
var b = result;
var a = false || 0 || 'value';
a === 'value'; // true
// -------------------------------
var result = false;
if (!result) {
result = 0;
if (!result) {
result = 'value';
}
}
var a = result;
function test(a, b, c) {
a = a || 'default';
b = b || 42;
c = c || false;
}
if (a > b) {
console.log('a > b');
} else {
console.log('a <= b');
}
if (a > b) console.log('a > b');
else console.log('a < b');
var isMore = (a > b) ? true : false;
// -------------------------------
var isMore;
if (a > b) {
isMore = true;
} else {
isMore = false;
}
for (var i = 0; i < 10; i++) {
console.log(i);
}
for (var i = 10, b = 'init'; i > 0; ) {
console.log(i);
i--;
}
var isLucky = true;
while (isLucky) {
isLucky = Math.random() > 0.5;
}
var isLucky = false;
do {
isLucky = Math.random() > 0.5;
} while (isLucky);
while (true) {
if (Math.random() > 0.5)
break;
}
while (true) {
if (Math.random() < 0.5)
continue;
break;
}
switch (number) {
case 1:
case 2:
console.log('один или два');
break;
case 3:
console.log('три');
break;
default:
console.log('мы это не проходили :|');
}
a + ""
String(a)
a.toString()
+'123'
Number(a)
parseInt(a)
parseFloat(a)
!!a
Boolean(a)
function someFunction(someArgument) {
var myVar = someArgument + ' test';
var result = callSomeAnotherFunction(myVar);
return result;
}
someFunction('2018');
function printArguments() {
for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
}
printArguments(1, 'two', [1,2,3]);
function returnUndefined() {
doSomething();
var a = 1 + 12;
}
var result = returnUndefined();
result === undefined; // true
function returnUndefined() {
doSomething();
return;
var a = 1 + 12; // не будет исполнено
}
var result = returnUndefined();
result === undefined; // true
getData
, callPolice
, joinItechart
.isStudent
, hasKnowledge
.var filtered = a.filter(function(element) {
return !!a;
});
var isMore = function(a, b) {
return a > b;
}
var sum = new Function('a, b', 'return a + b;');
sum(1, 2); // 3
function multiply(x, y) {
return x * y;
}
function printSquare(x) {
var s = multiply(x, x);
console.log(s);
}
printSquare(5);
function foo() {
foo();
}
foo();
var myObject = {
a: 1,
b: 'two',
c: [3, 4, 5],
d: {
e: 'и так можно'
},
f: function() { console.log('я сделяль'); }
}
var obj = {
a: 1,
f: function() { console.log('test'); }
};
for (key in obj) {
console.log(key + ': ' + obj[key]);
}
var obj = {
isMore: function(a, b) { return a > b; }
}
obj.isLess = function(a, b) { return a < b };
obj.isLess(1, 2); // true
obj['странное имя 😱'] = function() { return '😱'; }
var user = { name: 'Tony Stark' };
var admin = user;
admin.name = 'Eddard Stark';
user.name; // 'Eddard Stark'
var a = [];
var fruits = ["Яблоко", "Апельсин", "Слива"];
fruits[0]; // Яблоко
fruits.length; // 3
length
– не количество элементов массива, а
последний индекс + 1
.
var a = [1];
a[1000] = 'lol';
a.length; // 1001
var a = [1, 2, 3];
a[3] = 4;
a[4] = 5;
a.length; // 5
var b = new Array(1000);
b.length; // 1000
var a = 5;
window.a; // 5
var phrase = 'Привет';
function sayHi(name) {
console.log(phrase + ', ' + name);
}
sayHi('Anon'); // Привет, Anon
phrase = 'Пока';
sayHi('Anon'); // Пока, Anon
function sayHiBye(firstName, lastName) {
console.log( "Привет, " + getFullName() );
console.log( "Пока, " + getFullName() );
function getFullName() {
return firstName + " " + lastName;
}
}
sayHiBye("Tony", "Stark");
function makeCounter() {
var currentCount = 1;
return function() {
return currentCount++;
};
}
var counter = makeCounter();
counter(); // 1
counter(); // 2
Замыкание — это функция вместе со всеми внешними переменными, которые ей доступны.
(function() {
var message = "Привет";
function showMessage() {
console.log( message );
}
showMessage();
})();
(function(w) {
var message = "Привет";
function showMessage() {
console.log( message );
}
w.showMessage = showMessage;
})(window);
var m = (function() {
var message = "Привет";
function showMessage() {
console.log( message );
}
return { showMessage: showMessage };
})();
var user = {
name: 'Tony',
sayHi: function() {
console.log( 'Hi, ' + this.name );
}
};
user.sayHi(); // Hi, Tony
function Animal(name) {
this.name = name;
this.canWalk = true;
}
var animal = new Animal("ёжик");
function Animal(name) {
// this = {};
this.name = name;
this.canWalk = true;
// return this;
}
var animal = new Animal("ёжик");
function showFullName() {
console.log( this.firstName + " " + this.lastName );
}
var user = {
firstName: "Tony",
lastName: "Stark"
};
showFullName.call(user) // "Tony Stark"
f.call(контекст, аргумент1, аргумент2, ...);
f.apply(контекст, [аргумент1, аргумент2, ...]);
var n = f.bind(контекст);
var animal = {
eats: true
};
var rabbit = {
jumps: true
};
rabbit.__proto__ = animal;
rabbit.jumps; // true
rabbit.eats; // true
var animal = {
eats: true
};
function Rabbit(name) {
this.name = name;
}
Rabbit.prototype = animal;
var rabbit = new Rabbit("Кроль");
rabbit.eats; // true
<script src="path/to/script.js"
type="text/javascript"></script>
<script type="text/javascript">
var head = document.getElementsByTagName('head')[0],
script = document.createElement('script');
script.src = 'script.js';
head.appendChild(script);
</script>
console.log('Hi');
setTimeout(function cb1() {
console.log('cb1');
}, 5000);
console.log('Bye');
mefody.github.io/talks/itechart-js/
@dark_mefody
n.a.dubko@gmail.com