Почему Javascript может работать по-разному в разных браузерах? - PullRequest
2 голосов
/ 30 августа 2011

Я не думаю, что мне нужно приводить примеры, потому что каждый веб-разработчик знает, что вам нужно протестировать свой Javascript, чтобы убедиться, что он совместим в разных браузерах. Чего я не понимаю, так это , почему . Разве Javascript не является Javascript? Это было бы как .NET Framework ведет себя по-разному на одном компьютере, чем на другом. Может кто-нибудь пролить свет на это, возможно, с некоторыми ссылками на источники, чтобы согласиться с их ответом?

Ответы [ 7 ]

6 голосов
/ 30 августа 2011

Короткий ответ: каждый браузер пишет свой собственный интерпретатор для JS

Длинный ответ

Чтобы понять, почему язык программирования функционирует по-разному, вы должны понимать, что происходитна язык программирования при исполнении.Во-первых, существует два типа языков, которые интерпретируются и компилируются.Скомпилированные языки превращаются из читаемого человеком кода в машинный код перед выполнением и распространяются в виде двоичного файла.

Интерпретируемые языки компилируются на лету, одним из таких языков является JS.Что значит собирать язык на лету?Ну, компьютер не может понимать ничего, кроме 1 и 0, и поэтому все языки более высокого уровня должны быть разбиты на инструкции, а затем двоичные.Когда что-то компилируется на лету, оно компилирует строку, затем запускает ее, а затем компилирует следующую.(конечно, есть сложности, но на самом деле этого не хватает)

Поскольку у JS действительно никогда не было автономного переводчика до недавнего времени, и браузер является основной целью JS, каждая компания должна была написать свой собственный интерпретатор, которыйпошел бы в их браузер.Microsoft, Mozilla, Netscape ... Каждый должен был подумать о том, как можно обрабатывать определенные вещи, а затем выполнить их.

Из-за того, что сначала происходят две вещи, вы никогда не получите одну и ту же вещь, если два человекаработаю над этим.Подумайте о том, когда вы начинаете знакомство с курсом Comp Sci, каждый должен создать приложение для калькулятора, но у каждого свой подход.Это происходит постоянно с js и заставляет некоторые браузеры сканировать, в то время как другие летают.

Во-вторых, компании настроены по-своему, у них слишком много времени и энергии, вложенных в их интерпретатора, и они нехочу начать заново при модификации работает и дешевле.Это означает, что различия, которые возникали в прошлом, когда JS использовался реже и не настолько критичны для веб-разработки, останутся только потому, что действительно трудно развернуть целую новую версию IE с webkit, когда она сосредоточена вокруг собственного интерпретатора.в течение многих лет.

3 голосов
/ 30 августа 2011

Прочитайте это -> http://www.quirksmode.org/js/intro.html существует множество версий реализации JavaScript - все они имеют различия.

0 голосов
/ 30 августа 2011

Internet Explorer имеет JScript, это собственная реализация JavaScript от Microsoft.У них длинная история о том, что они не следуют никаким спецификациям.

Что касается других - они создают свои собственные реализации функций и объектов в JavaScript.Например, у вас есть теоретическая функция foo, и это имя одинаково в каждом браузере.Но способ, которым это написано, отличается.Что может вызвать разницу во времени выполнения или что-то еще.

Еще одна вещь - каждый браузер имеет свои специфические функции.Никто не может заставить их не иметь таких.

0 голосов
/ 30 августа 2011

Ну, на самом деле javascript является подмножеством EcmaScript, которое является стандартной рекомендацией. Реализация этой рекомендации среди браузеров зависит только от готовности редакторов. Это приводит к тому, что несколько реализаций (javascript, jscript, v8 и т. Д.) Ведут себя по-разному в определенных случаях. Добавьте к этому, что механизм разметки отличается от браузера к браузеру (gecko, trident, webkit и т. Д.), И вы увидите, что использовать javascript не так просто;).

0 голосов
/ 30 августа 2011

обычно между разными браузерами нет различий в языке javascript, проблема в том, что DOM, HTML и события различны в разных браузерах. некоторые библиотеки javascript могут помочь уменьшить разрыв, например: jQuery (только уменьшить разрыв)

0 голосов
/ 30 августа 2011

Ну, на самом деле .NET ведет себя по-разному , в зависимости от того, какую реализацию (Microsoft или Mono) вы используете.

Тем не менее, то же самое с Javascriptс небольшим исключением, что стандарт является движущейся целью.В свое время он был представлен Netscape, частично скопирован Microsoft как JScript, частично стандартизирован ECMA и расширен независимо от поставщиков браузеров, каждый из которых имел свое представление о том, что было бы неплохо иметь в Javascript.

Трудно определить Javascript.То, что обычно используется в качестве базового уровня во всех современных браузерах, - это набор функций, известный как Javascript 1.5 или ECMA-262 3-е издание.Поставщики браузеров (и другие) работают над чем-то, что называется ECMAScript 5, но это будет продолжаться годами, пока все браузеры не поддержат это полностью.

И, конечно, каждый браузер имеет свои ошибки в своей реализации.Одним из наиболее (не) известных примеров является запятая в IE:

// works in all browsers:
var a = [1, 2, 3]
// works in all browsers but IE
var b = [1, 2, 3,]
0 голосов
/ 30 августа 2011

Каждый браузер имеет свою версию Javascript, а некоторые реализуют только определенные функции каждой версии. Вот примечания к выпуску для IE9 , в котором состояние JavaScript по-разному работает в IE8 и IE9.

Вот список версий .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...