Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
var x, y, z;
z = (x = 10, y = x + 20, x * y);
var a = 5, b = 10;
a = [b, b = a][0];
(new Array(10+1))
.join(' ')
.split('')
.map(function(el,i){ return i; })
А что будет, если отрефакторить его с использованием map? Массив остался неизменным.Да, есть такое. filter-map-reduce семейство функций на разрежённых массивах не работает с пропусками. Некоторые библиотеки в угоду производительности даже исключают разрежённые массивы из области своего применения.
gofrom: тут мы не переходим на метку, а наоборот, уходим от нее подальше.int main(int argc, char** argv) {
int a = 0;
(a) = 1;
return 0;
}
a = 1
(a) = 2
assign_identifier = identifier "=" expr
assign_member = expr "." identifier "=" expr
assign_index = expr "[" expr "]" "=" expr
(a + b).pty = 1.function test(){
// do something
try {
return true;
}
finally {
console.log('Hey! :)');
return false;
}
}
Знаете, мне довелось читать много стандартов языков программирования (С, С++, Fortran, EcmaScript, OpenMP, OpenACC, Posix).
Хотя я являюсь начинающим программистом
Какого, простите, хрена нарушать нулевое правило программирования (RTFM)?
в отличие от того же ES, который я полностью прочел и осознал где-то за пол-года, так как меня заставили
За код, полагающийся на возможность объявить два аргумента с одинаковыми именами в приличной компании погонят несвежими тряпками.
var a, b, c;
(a) = 1;
[b] = [2];
({c} = { c: 3 });
if (typeof Symbol !== "undefined") { // Symbol доступен } let Symbol = true; // вызывает синтаксическую ошибку в условии выше!
{
typeof Symbol; // ReferenceError
let Symbol = true;
}
typeof Symbol; // boolean
{
let Symbol = true;
}
{
if (typeof Symbol !== "undefined") {
// Symbol доступен
}
let Symbol = true;
}
let работает как-то иначе и ошибки не будет?{
var i = true;
}
console.log(i); // true
{
let i = true;
}
console.log(i); // ReferenceError
for (let i = 0; i < 10; i++) {
console.log(i); // ....
}
console.log(i); ReferenceError
var array = [];
for (let i = 0; i < 10; i++) {
array.push(() => i);
}
console.log(array[1]()); // 1
var array = [];
for (var i = 0; i < 10; i++) {
array.push(() => i);
}
console.log(array[1]()); // 10
var a = 0;
let(a = 1) console.log(a); // 1
console.log(a); // 0

{
let i = true;
}
console.log(i); // ReferenceError
(function func(a, a) { console.log(a) })
("Привет", "Мир"); // выводит "Мир"
someWeirdAPI.registerCallbackWithArgs(function(_,_,_,_,usefulData){...})
func(); // func объявлена, но не имеет значения, поэтому ошибка "func не является функцией"
var func = function func() {
console.log("Всё в порядке");
};
func1();
func2();
function func1(){};
var func2 = function(){};
function func1(){};
var func2;
func1();
func2();
func2 = function(){};
До ES6 было широко известно, что с помощью оператора typeof можно безопасно узнать, объявлен ли идентификатор, даже если ему не присвоено значение:
if (typeof Symbol !== "undefined") { // Symbol доступен } if (Symbol !== "undefined") { // Этот код выкинет исключение, если Symbol не объявлен}
z = new Array(10);
z[10] = 5;
Object.keys(z)
["10"]
goto и break. Второй оператор умеет «прыгать» только вперед и только из внутреннего блока во внешний — что сильно упрощает понимание кода с ним.goto вовсе не является злом.
Семь удивительных «возможностей» Javascript