Що насправді JavaScript?


95

Все це почалося, коли я шукав спосіб перевірити свою веб-сторінку на відповідність JavaScript, як W3C HTML Validator . Я ще цього не знайшов. Тож дайте мені знати, якщо ви знаєте про якісь ...

  1. Я шукав офіційну сторінку JavaScript і знаходив сценарій ECMA . Ці люди стандартизували мову сценаріїв (мені вже не здається називати її JavaScript!) І назвали її ECMA-262 ( Wikipedia ). Їх остання робота - Видання 5.1

  2. JavaScript був розроблений корпорацією Mozilla, і їх остання стабільна версія - 1.8.5 ( див. Це ), що базується на версії 5.1 ECMA

  3. Сторінка Вікіпедії пов’язує згадки про діалекти. JavaScript 1.8.5 Mozilla вказаний як діалект разом із JScript 9 (IE) та JavaScript ( V8 [ Wiki ] Chrome ) та багатьма іншими. Чи потрібно розуміти, що JavaScript 1.8.5 - це похідна від ECMA-262, а SpiderMonkey [ Wiki ] - це двигун, який ним керує? А у Chrome свій діалект, а V8 двигун - це програма, яка ним керує?

З усіх цих діалектів, заснованих на ECMA-262, я більше не можу зрозуміти, що таке " JavaScript "? Чи є справді перехресні мови сценаріїв браузера? Чи збираються різні реалізатори для того, щоб домовитися про перехресну сумісність діалекту? Це зусилля ECMA?


10
Ви забули згадати ActionScript, який є діалектом ECMA, який не має нічого спільного з тим, що ви можете назвати Javascript.
DaveRandom

4
Не стільки для відповідності (як ви вже відзначили), але jslint дуже приємний для перевірки коду.
SomeKittens

2
@MadaraUchiha - я погоджуюся "просто використовуй jQuery. Все буде добре". не буде гаразд. Саме тому я почав це досліджувати. Мій сайт bharath.lohray.com добре працює на Chrome і Firefox, а валідатор W3C також не створює помилок, але він затягує великий час на найновішому IE! Більше того, наскільки мені подобається ідея людей на anybrowser.org/campaign , я не можу бути справді крос-браузером!
Лорд Лох.

7
Про вашу сторінку прокрутка дуже дратує і вгорі. Просто ІМО. І назва "Господь" звучить помпезно, як пекло, навіть якщо ви насправді є Господом.
NullUserException

11
Це зайво кричуще. Ви не бачите публікацій, котрі ковзають вгору і вниз по SE. Якщо це призначено для веб-сайту професійного вигляду, і ви все ще хочете переходити, використовуйте щось більш стримане, як, наприклад, зникнення / зникнення.
NullUserException

Відповіді:


96

В основному всі зрілі мови визначаються специфікацією, і компілятори або інтерпретатори намагаються слідувати стандарту, визначеному в цій специфікації. Але дуже рідко їм це вдається, якщо стандарт не визначений автором мови.

Ви можете знайти стандарт C ++ 2003 , в C # 4 специфікації , в специфікації Java 7 і багато іншого в Інтернеті. Багато з них мають стандарти стандартизації ECMA або ISO. Це просто організації, з якими ви можете зареєструвати стандарт і зробити його більш офіційним.

Рубі історично робив справи дещо інакше, маючи виконуваний набір тестів як специфікацію . Отже, якщо ви хочете написати перекладача і назвати його стандартним Ruby, вам просто потрібно було створити перекладача, який пройшов усі ці тести. Але навіть Рубі, швидше за все, стане більш офіційною специфікацією .

Javascript не відрізняється, за винятком можливо того, як він розвивався.

Javascript був вперше створений Netscape. Вони назвали це LiveScript, але це було схоже на Java, і вони уклали угоду з Sun над ім'ям, що виграло як маркетингу Netscape, так і Java. Microsoft мав VBScript і (з причини, ймовірно, втратили гіпотезу), в основному скопіював Javascript, але ім'ям належало Sun, тому вони прискіпливо називали його JScript.

Але JScript, дуже сильно схожий на Javascript у синтаксисі, багато використовував COM - наприклад, IE5 та 6 інстанціюють XMLHttpRequest об'єкт за допомогою new ActiveXObject("Microsoft.XMLHTTP");.

І так народилися паралельні подібні, але й різні "діалекти" Javascript. З часом різні групи, що володіють браузерами з меншою часткою ринку, ніж IE, намагалися стандартизувати мову, і роками Microsoft чинила опір. До V8.

V8 був швидкий. Він встановив абсолютно новий ринковий стандарт. Це зробило все інше виглядати бідним.

І через різні антимонопольні справи проти Microsoft, IE втрачала частку ринку. Раптом Microsoft зацікавилася підтримкою стандартизації. Ми ще не там, але це на вірному шляху.

У той же час, V8 був відкритим вихідним кодом, що дозволило людям почати придумувати нові способи застосування для швидкого Javascript синтаксичного аналізу, такі як Node.js .

Але, щоб повернутися до свого питання: Що таке JavaScript? Це загальне (і оригінальне) ім'я для ECMAScript - специфікація для прототипічної мови , яка, але не виключно, використовується для навігації та маніпулювання моделлю об'єкта домену в браузері.

ECMA-262 - це лише стандартне визначення, як і ECMA-334 - це стандартне визначення для C #. ECMAScript було єдиним ім'ям, про яке могли погодитись усі зацікавлені сторони ще у 1999 році, коли було написано ECMA-262.


7
Якби я міг не раз підкріплювати вашу відповідь, я би зробив це так :-) Це допомагає зробити кілька речей більш зрозумілими. Аналогія компіляторів C робить ситуацію трохи зрозумілою :-) За винятком того, що JavaScript не компілюється у бінарні файли, а кінцеві користувачі бачать не / квазіфункціональні сценарії. Тож я маю зрозуміти, що я не можу створити сторінку до стандарту і сподіваюся, що вона ще функціонує у всіх браузерах однаково? (поки це оперативне слово).
Лорд Лох.

1
@LordLoh. Це правильно. Але ви можете дозволити таким бібліотекам, як jQuery і Prototype, абстрагувати відмінності.
pdr

Цей пост і дослідження почалися, коли анімація jQuery не працювала на IE9, і я брехав ідеєю кампанії anybrowser.org і сподівався, що я можу дотримуватися стандарту. HTML5 / CSS3 / JS. JS виявився помилкою в моєму капелюшку.
Лорд Лох.

1
@LordLoh. Я не був би таким впевнений, що це вина jQuery. Лише швидкий погляд виявляє проблеми з вашим HTML (відсутні лапки, наприклад), і коли ви мінімізуєте свій Javascript таким чином, можуть бути незвичайні результати, якщо ви не були дуже точними. Я давно пам’ятаю проблему, в якій я пропустив крапку з комою, і вона не вдалася після стиснення в одному з основних браузерів. jQuery досить стабільний і повинен добре працювати з IE9.
пдр

5
@LordLoh. console.log - це ваша проблема. Це не працює, якщо ви не відкриєте панель інструментів розробника (і таким чином не створите об’єктну консоль).
пдр

23

Javascript - це поширена реалізація ECMAScript. Це дуже схожа ситуація з родиною Scheme . У схемі у вас є формалізована специфікація. Поточна версія - R6RS, хоча R5RS - набагато частіше впроваджений стандарт на цій посаді. Реалізації є більш розсіяними, ніж ECMAScript, завдяки віковій схемі та загальній філософії.

Javascript, як правило, поширений зараз значною мірою завдяки вибуховому зростанню частки ринку Firefox Mozilla і Chrome Google. Спочатку він закріпився на Netscape Navigator, який врешті-решт перетворився на браузер Mozilla, а потім у Firefox (і Iceweasel, якщо ти працюєш із натовпом Scheme).

А ось ось, де стає трохи скупо. Більшість продуктивності Javascript виходить з аналізатора та двигуна, на якому він працює. Саме тут стають очевидними реальні відмінності між браузерами. Spidermonkey запускає Javascript інакше, ніж V8. У Javascript все ще є грубі плями, як відсутність повністю поширеної бібліотеки, хоча над цим працює.

Отже, якщо Javascript був C ++, то ECMAScript був би C ++ 11, при цьому UNIX і G ++ були найближчими до "стандартних", тоді як C ++ для .NET і об'єктивного C ++ лежать далі на шляху, так як це робить Actioncript від ECMAScript

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.