Писане на съвместим с ECMAScript5 код

Искам да създам библиотека в JavaScript/JScript/ECMAScript...както и да я наречете, която ще е насочена към съвременните стандарти (HTML5, CSS3, ESv5) с това предвид, всеки браузър, който поддържа стандарта! Сега знам, че вече има много полезни библиотеки, т.е. jQuery и MooTools. Разбира се, те са страхотни и аз вече ги използвам, когато е необходимо, но не бива да бъда принуден да се хвърлям в същата банда като всеки друг разработчик, само защото е популярен!

Така че в името на следните въпроси, нека не се занимаваме с библиотеки на трети страни като jQuery и MooTools. Нека да преминем към детайлния JavaScript/JScript/ECMAScript.

Първо, зададох въпрос преди това (Каква е разликата между JavaScript, JScript и ECMAScript?), тъй като не знаех каква е разликата.

За щастие стигнах до следното заключение:

ECMAScript е езиковата спецификация. JavaScript и JScript са диалекти на ECMAScript.

JavaScript е внедряването на ECMAScript от Mozilla.

JScript е внедряването на ECMAScript от Microsoft.

Добре, това беше хубав прост отговор, нали? Но ето някои въпроси, които произтичат от това:

  1. поддържа ли се "JavaScript" в браузъри, различни от Mozilla, и до каква степен?
  2. поддържа ли се "JScript" в браузъри, различни от Microsoft, и до каква степен?

Въз основа на тези два въпроса направих малко копаене и проведох прост тест на IE9, FF14 и GC19.

Ето тестовия код:

<!DOCTYPE html>
<html>
    <head>
        <title>HTML 5 Template</title>
        <script language="JavaScript1.3">
            jsver = "1.3";
        </script>
        <script language="JavaScript1.4">
            jsver = "1.4";
        </script>
        <script language="JavaScript1.5">
            jsver = "1.5";
        </script>
        <script language="JavaScript1.6">
            jsver = "1.6";
        </script>
        <script language="JavaScript1.7">
            jsver = "1.7";
        </script>
        <script language="JavaScript1.8">
            jsver = "1.8";
        </script>
        <script type="text/javascript">
            document.write("<B>Your browser supports JavaScript version " + jsver + ".</B>")
        </script>
    </head>
    <body>
    </body>
</html>

Резултатите бяха: IE9 = JSv1.3, FF14 = JSv1.8, GC19 = JSv1.7

Добре, тогава проведох този тест, който тества за поддръжка на ECMAScript версия 5: http://kangax.github.com/es5-compat-table/#showold

Отново използвайки същите браузъри (IE9, FF14, GC19), ESv5 изглежда доста добре поддържан!

Сега идва сложното! Аз идвам от Microsoft и пиша софтуер, използвайки езици като C#, ASP.NET и т.н., така че естествено, моята IDE по избор е Visual Studio (в момента 2010). Когато преглеждам JavaScript intellisense, виждам неща като ActiveXObject, Array, Object и т.н.

  1. Трябва ли да се доверя на intellisense на VS2010?
  2. Къде мога да намеря справка за обекти и функции, поддържани от ESv5?
  3. Как да разбера дали даден браузър поддържа определен обект или функция?
  4. Има ли нещо по-добро от VS2010, което ще ми помогне да напиша съвместим ESv5 код?
  5. Безопасно ли е да се заменят реализации на съществуващи обекти като Object, Number, Boolean и т.н., или трябва просто да разширя съществуващата реализация?

И накрая, относно себе си с jQuery. Да кажем, че не мога да си правя труда да напиша сам основната съвместимост и функционалност, мога ли просто да напиша библиотеката си, за да седи върху jQuery... или това е просто copout?


person Matthew Layton    schedule 21.08.2012    source източник
comment
Това въпрос ли е или история? Моля, опитайте се да бъдете прости и да изясните какъв е (уникалния) технически въпрос, на който искате да отговорим.   -  person Denys Séguret    schedule 21.08.2012
comment
@dystroy Много ми харесва степента, до която авторът е стигнал, за да получи точните отговори, които търси... хората не трябва да бъдат принуждавани да пишат въпроси от 2 реда, особено за един толкова просветляващ въпрос като този   -  person Zathrus Writer    schedule 21.08.2012
comment
Има много въпроси там. Просто исках хората да знаят моите изследвания, тъй като те могат да предложат нещо, което вече съм правил. Предполагам, че е доста трудно, тъй като предполагам, че някои от тези въпроси са отворени за мнение, а не за факти.   -  person Matthew Layton    schedule 21.08.2012
comment
Приемам твоите точки. И очевидно имаше добри усилия по този въпрос. Но, моля, погледнете често задаваните въпроси за отворени въпроси и се запитайте дали е възможно да дадете ясен отговор.   -  person Denys Séguret    schedule 21.08.2012


Отговори (2)


1) Не. Със сигурност няма да се ограничи само до валиден ECMAScript.

2) http://kangax.github.com/es5-compat-table/ винаги е полезно.

3) Можете просто да проверите дали е дефинирано. напр.

typeof(Array.isArray) === 'function'; // true in newer browsers, false in IE8

4) Най-добре е да прочетете спецификацията! Използването на "use strict"; във вашия код също ще улови някои класове грешки и това е добра практика. Повече обяснения за строгия режим на http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/

5) Със сигурност не бих заменил оригиналните предмети. Ако възнамерявате да разширите свойствата, първо бих проверил отново дали вече не съществува съвместима реализация. напр. PrototypeJS добави (преди браузърите да го внедрят) document.getElementsByClassName. Когато браузърите започнаха да го прилагат естествено, те откриха, че сайтовете, използващи Prototype, все още използват бавната версия, базирана на JS. Корекцията беше просто да се увие дефиницията на Prototype в if (document.getElementsByClassName == undefined) { }

person Robin Whittleton    schedule 21.08.2012
comment
Благодаря ви за този отговор, той е много информативен и със сигурност ще ми помогне да напиша библиотеката си. - person Matthew Layton; 21.08.2012
comment
Гледал ли си Modernizr? Разбира се, те са съсредоточени върху проблеми с дисплея, но в основата си правят куп тестове на функции. Може да ви даде някои идеи. modernizr.com & github.com/Modernizr/Modernizr/tree/master/feature-detects - person Robin Whittleton; 21.08.2012

2) Намирам прегледа, който предоставихте, за доста добър. Какво още искаш?

3) Добра библиотека за изравняване на разликите между браузърите е ES5-shim. Той автоматично открива функциите и предоставя подложки за браузърите, които нямат поддръжка.

4) Винаги използвайте "use strict"; и добър редактор по ваш избор, който има някакъв вид осветяване на кода и може би допълване на кода. Използвам конзолите на браузъра или firefox scratchpad (глупаво име за добър инструмент) за бързи хакерски сесии и поставям всичко заедно в notepad++ (= IDE по ваш избор).

5) Увеличаването на собствените обекти на javascript е обсъждано много и има плюсове и минуси. Prototype и MooTools вървят по този начин. jQuery поема по друг начин и предоставя отделен обект за това. Аз лично предпочитам да оставя нативните (и особено хост) обектите сами и да имам собствено пространство от имена с функциите, от които се нуждаете.

person Christoph    schedule 21.08.2012
comment
Благодаря ви за този отговор. Намерих някои точки там, особено точка 5, много интересни. Със сигурност ще имам това предвид, когато разработвам моята библиотека. - person Matthew Layton; 21.08.2012