17
JS 1.4 (LiveWire)
1997
Netscape Server-side JavaScript
<H1>
<server>
// Here we use the same technique to construct a heading on the page.
if ( request.deptno != null )
write("Department " + request.deptno + " Staff");
else
write("All Staff");
</server>
</H1>
<server>
// Call a programmer-defined function (see below) to verify the database
// connection. Note that this ckDatabaseConnected function may redirect to a
// login page; if that happens, we want to return here once the user logs in
// successfully. So we have to send the URL as a parameter.
if ( request.deptno == null )
ckDatabaseConnected("emps.html");
else
ckDatabaseConnected("emps.html" + "?deptno=" + request.deptno);
</server>
32
1. Единый глобальный неймспейс
2. Прототипное наследование сложное и ресурсоемкое
3. Precision проблемы
4. NaN
5. Проблемы с регулярными выражениями
6. =, ==, ===
7. for ... in
8. Ваш вариант
38
Новое в Math
1. Math.sign()
2. Math.log10(), Math.log2(), Math.log1p(), Math.expm1()
3. Math.cosh(), Math.sinh(), Math.tanh()
4. Math.acosh(), Math.asinh(), Math.atanh()
5. Math.hypot(), Math.trunc()
// Варианты результата
// в зависимости от знака: 1, 0 и -1
Math.sign(365) // 1
39
Новое в Number
1. Number.isNaN()
2. Number.toInteger()
3. Number.isInteger()
4. Number.isFinite()
5. Number.prototype.clz()
41
Object.observe
var tweet = {
text: '#frontendconf just started. Enjoy!',
username: 'witchfinderx',
sent: false
};
Object.observe(tweet, function(changes) {
changes.forEach(function(change, i) {
console.log(change);
});
});
// Изменяем, добавляем и удаляем свойство
tweet.text = 'So boring. Waiting for a coffee...';
tweet.date = new Date();
delete tweet.completed;
42
function foo(a, b = 10) {}
function foo(a = 'Frontend Conf', b = 20) {}
function foo(a, b = 30, me = this) {}
Стандартные значения параметров функции
43
var a = 1,
b = 0;
let (a = a * 10, b = 5) {
console.log(a + b); // 15
}
console.log(a + b); // 1
Блочная область видимости
44
let data = new Map();
data.set('key', 'key'.length); // key 3
data.get('key'); // 3
data.size(); // 1
data.has('key'); // true
data.delete('key'); // true
data.has('key'); // false
Maps
45
let data = new Set([1, 2, 3]);.
s.has(5); // false
s.add(5);
s.has(5); // true
s.delete(5); // true
s.has(5); // false
Sets
46
let wdata = new WeakMap();
wdata.set('key', 'key'.length);
// TypeError: Invalid value used as weak map key
wdata.has('key');
// TypeError: Invalid value used as weak map key
let wmk = {};
wdata.set(wmk, 'value'); // wmk 'value'
wdata.get(wmk); // 'value'
wdata.has(wmk); // true
wdata.delete(wmk); // true
wdata.has(wmk); // false
WeakMaps
49
module Car {
// приватные
var licensePlateNo = '556-343';
// публичные
export function drive(speed, direction) {
console.log('details:', speed, direction);
}
export module engine{
export function check() { }
}
export var miles = 5000;
export var color = 'silver';
};
Экспорт / Публичные св-ва и методы
56
— Джеймс Бурке
«Я хочу, чтобы AMD и RequireJS остались в
«прошлом... Сам язык будет покрывать 80%
«функционала RequireJS, как минимум для
«браузера»