Skip to content

Instantly share code, notes, and snippets.

@vvscode
Created October 15, 2015 21:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vvscode/a24488e8493dc0627251 to your computer and use it in GitHub Desktop.
Save vvscode/a24488e8493dc0627251 to your computer and use it in GitHub Desktop.
es6 for apollo

Значение параметров по-умолчанию. Пока работает только статическое определение, те вы можете задать только явное значение по умолчанию. Динамическое ( когда значение второго параметра основывается на первом ) -- не работает

function testDefaultParams(test = 1, test2 = "2") {
	// ...
	console.log(test, test2);
}
// с деструктуризацией
function foo({x, y = 5}) {
	console.log(x, y);
}

Превратится в

function testDefaultParams() {
	var test = arguments.length <= 0 || arguments[0] === undefined ? 1 : arguments[0];
	var test2 = arguments.length <= 1 || arguments[1] === undefined ? "2" : arguments[1];

	// ...
	console.log(test, test2);
}
// с деструктуризацией
function foo(_ref) {
	var x = _ref.x;
	var _ref$y = _ref.y;
	var y = _ref$y === undefined ? 5 : _ref$y;

	console.log(x, y);
}

Trailing - множественные параметры

function f(x, ...y) {
	// y is an Array
	return x * y.length;
}

Превратится в

function f(x) {
	for (var _len = arguments.length, y = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
		y[_key - 1] = arguments[_key];
	}

	// y is an Array
	return x * y.length;
}

Arrow functions

  1. Имеют более краткий синтаксис
  2. Позволяют сохранять контекст без замыканий ( при написании кода)
  3. если функция не имеет блока - неявно возвращается вычисленное значение ( см пример с .map )
var o = {
	name: 'B',
	test() {
	  [1,2,3].forEach(i => {
		this.alert(i);
		console.log(this, i)
	  });
	 },
 	test2() {
	  [1,2,3].forEach(i => {
		this.alert(i);
		console.log(this, i)
	  });
	 }
}
[1,2].map( i=> i++ )

Превратится в ( обратите внимание, что имя переменной в которой сохраняется контекст -- зависит от числа таких сохранений и не всегда будет _this - на это не стоит сильно полагаться и это может повлиять на отладку)

var o = {
	name: 'B',
	test: function test() {
		var _this = this;

		[1, 2, 3].forEach(function (i) {
			_this.alert(i);
			console.log(_this, i);
		});
	},
	test2: function test2() {
		var _this2 = this;

		[1, 2, 3].forEach(function (i) {
			_this2.alert(i);
			console.log(_this2, i);
		});
	}
};
[1, 2].map(function (i) {
  return i++;
});

Enhanced Object Literals - Расширеные литералы объектов Если в качестве значения используется переменная с тем же именем, что и ключ - ключ использовать не обязательно;

var a = { a, c: d };

Превратится в

var a = { a: a, c: d };

***Template strings - шаблоны ***

var name = 'TestTemplate';
var time = 'Today';
var t = `This is a pretty little template ${name} string. It was created at ${time}`;
var a = `Test ${this.name} this inside template`;
var b = `${get(this, 'firstName')} ${get(this, 'lastName')}`; // это вообще пример из документации по Эмберу

Превратится в

var name = 'TestTemplate';
var time = 'Today';
var t = 'This is a pretty little template ' + name + ' string. It was created at ' + time;
var a = 'Test ' + this.name + ' this inside template';
var b = get(this, 'firstName') + ' ' + get(this, 'lastName'); // это вообще пример из документации по Эмберу

Destructuring - Деструктуризация - Извлечение свойств из объекта

var [a, , b] = [1,2,3];
var { op: a, lhs: { op: b }, rhs: c } = { op:1 , lhs: { op: 2}, rhs: 3};

Превратится в

var _ref = [1, 2, 3];
var a = _ref[0];
var b = _ref[2];
var _op$lhs$rhs = { op: 1, lhs: { op: 2 }, rhs: 3 };
var a = _op$lhs$rhs.op;
var b = _op$lhs$rhs.lhs.op;
var c = _op$lhs$rhs.rhs;

Let + Const Для "переменных" которые не изменят свое значение - используем const ( Если у объекта меняются свойства - так же используем его, т.к. ссылка на объект не меняется ). Для перменных внутри функций используем var. Для блочных переменных ( внутри if, while, for и т.п. - let)

const x = 'x';
//x = 'y'; // error
let y = 'y';
{
	let y = 'y2';
	console.log(y); // 'y2'
	{
	  let y = 'y3';
	}
}

Превратится в ( обратите внимание, что имена переменных зависят от числа вложенностей и одноименных let - они не являются постоянными - это может повлиять на отладку )emphasized text

var x = 'x';
//x = 'y'; // error
var y = 'y';
{
	var _y = 'y2';
	console.log(_y); // 'y2'
	{
		var _y2 = 'y3';
	}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment