Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
a = 1; new -> a := 2; b = 3
...
x := 0
Syntax Error: assignment to undeclared variable "x" on line 1
Наверное, для этого стоит делать отдельный проект, как, например TodoMVC
Чтобы показать реализации на всех альтернативных языках.
Но у яваскрипта есть свои заковырки. Прототипная модель объектов, динамиеские типы, колбек-функции, всё это, можно сказать, на любителя.
== может вести себя непредсказуемо. Поэтому, например, в CoffeeScript == заменяется ===о.var и областью видимости — очень легко забыть и испортить глобальные переменные. В CoffeeScript весь код идёт в локальной области видимости (то есть все файлы вкладываются внутрь (function() { … })();) и интерпретатор сам объявляет новые переменные.string[0..-3]). При всём моём уважении к JS, этот язык делался второпях за 2 недели.for i in array
console.log(i)
'use strict'
var a = 'somestringlast'
a.substr(-3, 3);
arr.forEach и for (var prop in coll)
for (var i in col) — проход по объекту, а не массиву.var coll = [1,2,3,4,5,6,7,8,9];
for (var i in coll) { console.log(coll[i] * 2)}
var coll = [1,2,3,4,5,6,7,8,9];
coll.verificated = 1;
for (var i in coll) { console.log(coll[i] * 2)}
Например, arguments — это как раз такой хакнутый массив.
var setView = function (data) {
console.log(data);
}
var parseRespone = function (res) {
if (res.some && res.data) {
setView(res.data);
}
}
var makeRequest = function (params) {
if (config.ajax) {
reqAjax(params, parseResponse);
} else {
reqSoсket(params, parseResponse);
}
}
await $.get(url, defer json)
console.log(json)
$.get(url, function(json) {
console.log(json)
});
defer-переменной, То интерпретатор поймёт, что вас уже нужен результат этого AJAX-запроса И остановит ваш код, пока результат не будет получен.Про типизацию имеется в виду неявное приведение видов, когда == может вести себя непредсказуемо
Плюс у JavaScript проблема с var и областью видимости — очень легко забыть и испортить глобальные переменные.
# full closure
->
# a lot of code here
a = 13
# a lot of code here
# some local function
callback = ->
b = 25
a = 14
a + b
# a lot of code here
(function() {
var a, callback;
a = 13;
return callback = function() {
var b;
b = 25;
a = 14;
return a + b;
};
});
может быть вы действительно хотите использовать глобальную переменную.
JS — это, своего рода, «ассемблер» веба. Ниже него для веб-страниц ничего нет.
a?.b?.c?.dvar _ref, _ref1;
if (typeof a !== "undefined" && a !== null) {
if ((_ref = a.b) != null) {
if ((_ref1 = _ref.c) != null) {
_ref1.d;
}
}
}
var _ref, _ref1;
if (typeof a !== "undefined" && a !== null) {
if ((_ref = a.b) != null) {
if ((_ref1 = _ref.c) != null) {
_ref1.d;
}
}
}
if (typeof a !== "undefined" && a !== null && a.b && a.b.c) {
a.b.c.d;
}
А оператор ".?" просто спасает сотни строк тупого кода:
atom.object.path.get(a, 'b.c.d')
a = 42
иб = { бум: { пам: 43 } }
б.бум.пам, или только б.буб.парам. Мол, тогда проверка б?.. бум?.. пам? и не нужна. Я привел жизненный пример, когда очень даже нужна.Я привел жизненный пример, когда очень даже нужна.
declare( 'LibCanvas.Enginex.Hex.Projection', {});
lang.get('editor.units.tanks')
a = JSON.parse(нечто_со_стороны)
m = строка.match(/(o)(o)/)n = m?[2] navigator.showGrowl?("We are able show you an example. Does you browser, though?")
Лично я, в огромедном приложении…
logger?.presenter?.present?.message. Если нет логгера — вывалились из первого «?.», если вообще нет презентеров — из второго. Если презентер есть, но хреновый — из третьего. console?.log 'i love ie'
Спасибо. +1 лишний байт в кофе
console?.log 'i love ie'
if (typeof console !== "undefined" && console !== null) {
console.log('i love ie');
}
~+40 байт на конечный js
чуть больше 50
if (typeof console !== "undefined" && console !== null)
before 1669
after compression 827
compression ratio 50 %
after compression and gzip 461
compression and gzip ratio 72 %
57 =)Убираем ненужные пробелы — получаем 48, жмем ведь
свой коффееУ меня нет ни одного проекта на кофе, а на js хватает. но данный оператор — однозначный плюс кофе.
почему вы свой коффее считаете гзипнутым и обфусцированным, а библиотеку считаете полнойМногократное повторение if (typeof console !== «undefined» && console !== null) ?) 1,7кб этого счастья сжалось gzip'ом до 81 байта.
CoffeeScript это небольшой язык, который компилируется в Javascript. Рубистам он кажется похожим на руби, питонистам он похож на питон, и конечно же, он похож на яваскрипт.Я вот пайтонист, а мне он всё равно кажется похожим на Руби.
Альтернативы для JavaScript