Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   JS.next(стандарты, фичи, движки) (https://javascript.ru/forum/offtopic/50248-js-next-standarty-fichi-dvizhki.html)

melky 13.01.2015 11:47

Цитата:

Сообщение от Safort (Сообщение 351150)

Цитата:

We’ve decided that because of our shared goals and philosophy it makes sense to merge the two projects in an effort to build a better transpiler.

So what will this mean for both projects?

The esnext team will start work on 6to5 bringing their skillset and experience to make it faster and more spec-compliant. On our end, we will be migrating people from esnext to 6to5—we’ve already ported all of the esnext tests to 6to5 to ensure nothing will break.
немного не понял

а зачем тогда 2 проекта, и вообще 6to5, если можно всё слить в esnext и всё?


тогда и 7to5 не будет нужен - esnext же ("следующая")

Safort 13.01.2015 11:57

kobezzza,
Цитата:

Единственно, название они не оч удачно выбрали, т.к. со временем, когда ES6 станет стандартом, а ES7 будет внедрятся, понадобится 7to6
Согласен, как узнал про этот транслятор тоже об этом подумал.

nerv_ 14.01.2015 14:25

Сейчас открыл страницу Indexed collections. Получается, что в языке будут типизированные массивы, но, при этом, нет этих же простых типов, например:
number{Number<Int8>}
number{Number<Int16>}

Вам не кажется это глупостью? :)

kobezzza 14.01.2015 14:51

Цитата:

Вам не кажется это глупостью?
Кажется, как и отсутствие структур (т.к. пользоваться числовыми массивами не шибко удобно), но в ES7 всё должны добавить.

Как то так будет

http://wiki.ecmascript.org/doku.php?...bjects&s=typed

Вангую, что 'use asm' станет частью ES7/8, а ля @unsafe в Rust и можно будет писать адовые числодробилки на JS :)

kobezzza 16.01.2015 14:17

Сегодня пришёл к вроде бы очевидному трюку, использования let и анонимного блока, для замены самовызываемой анонимной стрелочной функции без параметров, т.е.

// Было
(() => {
    var foo = this.someValue;
    ...
})();

// Стало
{
    let foo = this.someValue;
    ...
}


Кажется, что вариант с блоком покрасивше (хотя менее надёжен и универсален).

cyber 16.01.2015 14:32

kobezzza, для тех кто пока далековат от es6 поясни плиз код)

kobezzza 16.01.2015 14:40

Цитата:

kobezzza, для тех кто пока далековат от es6 поясни плиз код)
Ну, иногда бывает нужно создать локальную область видимости с передачей родительского контекста, т.е.

(function () {
    var foo = this.someValue;
    ...
}).call(this);


В ES6 можно упростить до

(() => {
    var foo = this.someValue;
    ...
})();


А используя ES6 и анонимный блок, можно упростить ещё (только все переменные должны декларироваться через let)

{
    let foo = this.someValue;
    ...
}


Анонимные блоки в JS были с самого начала, но без let в них смысла особо не было, а теперь есть, хотя разумеется вариант с функцией более универсальный, т.к. можно передавать параметры, возвращать значение и использовать в качестве литерала (для передачи в другую функцию и т.д.).

Octane 16.01.2015 15:15

Можно еще так:
let (foo) {
    foo = this.someValue;
    …
}

cyber 16.01.2015 15:25

Цитата:

Сообщение от kobezzza
Анонимные блоки в JS были с самого начала, но без let в них смысла особо не было, а теперь есть, хотя разумеется вариант с функцией более универсальный, т.к. можно передавать параметры, возвращать значение и использовать в качестве литерала (для передачи в другую функцию и т.д.).

Т.е я могу писать код как в анонимной функцие?
{
    let a = 5, b = 6;
    let  s = a + b;
    console.log(s);
}

kobezzza 16.01.2015 15:28

Цитата:

Сообщение от Octane (Сообщение 351712)
Можно еще так:
let (foo) {
    foo = this.someValue;
    …
}

Круто! Не знал про такой синтаксис :)

Цитата:

Т.е я могу писать код как в анонимной функцие?
Угу.

cyber 16.01.2015 15:40

kobezzza, спасибо:)

kobezzza 20.01.2015 21:41

В ES7 планируется добавить специальный способ обращения к символьным свойствам объекта через ::, например,

foo::some()


Как по мне, то данная фича очень нужна и я считаю, что все встроенные свойства и методы Object.prototype должны быть продекларированы именно так, например,

for (let key in foo) {
    if (foo::getOwnPropertyDescriptor(key)) {
        ...
    }
}


Это уберёт потенциальные ошибки при использовании объекта, как таблицы.

function foo(params) {
    if (params.toString) {
        alert('ffffuuuuu');
    }
}

foo({});


А вот если бы базовый метод toString был бы символьный и доступен через :: то такой бы ошибки не было, а проблемы совместимости старого кода можно решить флагом:

'use es7-strict';


По аналогии с useAsm и useStrict.

К слову, символьные свойства были введены как раз, чтобы можно было безопасно расширять прототипы объектов, в частности и Object.prototype.

Aetae 21.01.2015 00:50

Какое-то lua, но через жопу, имхо. Проблема то понятна, как и необходимость решения, но вот само решение выглядит по мне как-то уродливо...

Octane 21.01.2015 09:58

Цитата:

Сообщение от kobezzza
В ES7 планируется добавить специальный способ обращения к символьным свойствам объекта через ::, например,
foo::some()

ведь Symbol.iterator === Symbol('iterator') → false, как тогда обращаться к символьным-свойствам, если я сделаю так:
let obj = {
    [Symbol('some')]: 1,
    [Symbol('some')]: 2
};

что должен вернуть obj::some?

Скорее всего это просто короткая запись для
obj[Symbol.iterator] → obj::iterator
obj[Symbol.toStringTag] → obj::toStringTag
obj[Symbol.toPrimitive] → obj::toPrimitive
…
и т.д.
тоесть всегда на well-known symbols будет ссылаться

kobezzza 21.01.2015 10:12

Octane, https://github.com/zenparsing/es-abstract-refs

PS: Перечитав драфт понял, что сам его не до конца понял :) Подождём пару лет, пока реализуют ES7 :)

UPD: Прочитал https://github.com/zenparsing/es-function-bind и понял, что здесь работа не с символьными свойствами (как я изначально думал), а API для биндинга функций к объекту, т.е. сахар для паттерна заимствования.

Array.prototype.slice.call(...)


Если это так, то это вообще мегакруто, т.к. решает проблему расширения базовых объектов и даёт новый способ для code-reuse!

cyber 23.01.2015 01:06

Перевидите на человеческий язык (то что выделенно) что за "шаблоны деструктуризации" ?
Цитата:

Так как «собственный» объект arguments не доступен внутри стрелочной функции (значение arguments лексически связано со значением arguments традиционной функции, внутри которой стрелочная функция была объявлена), то для стрелочных функций с переменным числом параметров нужно использовать rest-паттерн из шаблонов деструктуризации
var getTempItems = (...rest) => rest;
// эквивалент
var getTempItems = function() { return [].slice.apply(arguments) };



Еще не вкурю почему не работает

let params = {};
let { params: size = { height:50 } } = {
   width: 100
};


В еs6 есть что то типо __proto__ или уже можно __proto__ юзать?

Safort 23.01.2015 01:54

cyber,
оно делает работу с переменным количеством аргументов немного удобнее

Следующий пример сработает во всех нормальных браузерах, т.е. в панде.
var func = (a, ...others) => {
  console.log(a, others);
};
func(1,2,4,5);

Safort 23.01.2015 01:56

cyber,
Цитата:

В еs6 есть что то типо __proto__ или уже можно __proto__ юзать?
С этим у меня тоже путаница. В одной статье читал, что __proto__ стандартизировали, а в другой, что наоборот, отказались от него. Но если уж мы говорим о ES6, то зачем тебе вообще __прото__?)

cyber 23.01.2015 02:18

Цитата:

Сообщение от Safort
Но если уж мы говорим о ES6, то зачем тебе вообще __прото__?)

Ну я ещё не решился на использование классов, а вообще просто интересно. Видел на mdn что оно поддерживается всеми браузерами, а ие 11+

И как включить поддержку arrow functions в хроме, я поставил флаг harmony и нефига

Octane 23.01.2015 02:54

хз никуда __proto__ не делся:
http://people.mozilla.org/~jorendorf...type.__proto__
http://people.mozilla.org/~jorendorf...t-initializers

в ES6 добавили возможность использовать __proto__ прямо в литерале:
var obj = {
   0: 1,
   1: 2,
   length: 2,
    __proto__: Array.prototype
};

obj.forEach(x => alert(x));


а вообще есть setPrototypeOf/getPrototypeOf

cyber 23.01.2015 03:30

Octane, а что скажешь про
Цитата:

Сообщение от Safort
Следующий пример сработает во всех нормальных браузерах, т.е. в панде

А что еще есть кроме ...others и ...rest, или где можно посмотреть?
И что скажешь насчет

let params = {};
let { params: size = { height:50 } } = {
   width: 100
};

Почему не работает?

Safort 23.01.2015 09:02

Octane,
Цитата:

в ES6 добавили возможность использовать __proto__ прямо в литерале
Т.е. фактически они его разрешили, несмотря на то, что раньше это считалось дурным тоном.

Safort 23.01.2015 09:05

cyber,
Цитата:

А что еще есть кроме ...others и ...rest
Эмм.. я просто переменную по своему назвал, ...others и ...rest это одно и тоже :|

Цитата:

, или где можно посмотреть?
Ну ты прям как новичок)
https://github.com/lukehoban/es6features

Erolast 23.01.2015 11:08

Цитата:

оно делает работу с переменным количеством аргументов немного удобнее
Следующий пример сработает во всех нормальных браузерах, т.е. в панде.
В FF работает.

Цитата:

Т.е. фактически они его разрешили, несмотря на то, что раньше это считалось дурным тоном.
Не. Дурным тоном считается изменение прототипа на лету, что мешает оптимизациям, а тут при создании только.

cyber 23.01.2015 11:41

Цитата:

Сообщение от Safort
Ну ты прям как новичок)
https://github.com/lukehoban/es6features

Спасибо, я иногда по ночям туплю, причем жестко)

Safort 23.01.2015 13:55

Erolast,
Цитата:

В FF работает.
FF это и есть панда)

Цитата:

Не. Дурным тоном считается изменение прототипа на лету, что мешает оптимизациям, а тут при создании только.
А, ну тогда ладно.

cyber,
Цитата:

Спасибо, я иногда по ночям туплю, причем жестко)
Да, бывает)

cyber 23.01.2015 15:50

Про let, не совсем понятно, можно ли как заюзать let что бы присвоить значение свойству если оно не присвоенно?
Что бы не писать if ... ?

Safort 23.01.2015 16:01

cyber,
чего? let это как var, но только лучше)

Octane 23.01.2015 17:27

Цитата:

Сообщение от cyber
И что скажешь насчет
let params = {};
let { params: size = { height:50 } } = {
   width: 100
};

тут же синтаксическая ошибка
var obj = {
    params: size = …
};

cyber 23.01.2015 18:05

Safort, Octane,я просто видел где то такой пример, почему и удивился ..

cyber 23.01.2015 20:01

Как заставить webStrom 9 нормально реагировать на es6, писали что есть плагин, но в 9м я его так и не нашел?

Safort 23.01.2015 21:10

cyber,
оно же должно автоматом определять es6, не?

cyber 23.01.2015 21:13

Safort, нашел, там нужно переключить в настройках
https://lh3.googleusercontent.com/-S...%3A11%3A38.png

Safort 26.01.2015 17:05

Поцаны решили переименовать ES6.
http://webreflection.blogspot.de/201...cmascript.html

nerv_ 27.01.2015 21:46

cyber, есть совесть такие большие скрины вставлять? Вставляй их тогда сразу себе прямо в ... ухо)

Сейчас смотрю на es6 классы. Они не запилили приватные модификаторы? Это же ппц :)
Видимо, это чтобы нам нескучно было.

cyber 27.01.2015 22:08

Цитата:

Сообщение от nerv_
cyber, есть совесть такие большие скрины вставлять? Вставляй их тогда сразу себе прямо в ... ухо)

Сори, но блин не вспомнил как менять размер скрина, пробыла задать height and width, но не фига)

bes 27.01.2015 22:10

Цитата:

Сообщение от cyber
Сори, но блин не вспомнил как менять размер скрина, пробыла задать height and width, но не фига)

оно не меняется, запости в [html run или ссылкой

cyber 27.01.2015 22:16

bes, поменял, всего то 1920x1080 скрин был:D

bes 27.01.2015 22:20

Цитата:

Сообщение от cyber
bes, поменял, всего то 1920x1080 скрин был

а лучше ещё дублировать текстом, так как твой скрин через некоторое время пропадёт навсегда
phpstorm8 - settings - javascript - javascript language version

nerv_ 27.01.2015 22:44

Не понимаю, почему нельзя было сделать в ES6 так, как в TS?
https://yadi.sk/i/e6dNr8wMeHEbq Нет private & public (точнее паблик есть, но неявный)

Лучше бы выкинули всю ерунду с Object.defineProperty() и дали возможность нормально описывать классы.


Часовой пояс GMT +3, время: 00:15.