Насколько различны семантика между Python и JavaScript?
Оба этих языка кажутся мне очень похожими. Хотя Python поддерживает фактические классы вместо того, чтобы быть основанным на прототипах, в классах Python не все отличается от функций, которые генерируют объекты, содержащие значения и функции, так же, как и в JavaScript. С другой стороны, JavaScript поддерживает только числа с плавающей запятой и строки как встроенные типы данных.
Они кажутся довольно незначительными различиями для меня, так что все это в стороне, какие еще более важные различия между ними?
Ответы
Ответ 1
- Классическое наследование в Python, прототипное наследование в ECMAScript
- ECMAScript - это язык скобок и точек с запятой, в то время как Python - это пробел и отступ/блок
- Нет
var
ключевого слова в Python, неявные глобальные переменные в ECMAScript, оба лексически ограничены
- Закрытие в Python 2.5 и ниже (re: комментарий Alex Martelli) несколько "ограничено", потому что привязки доступны только для чтения, вы не можете обращаться к закрытым переменным, как вы могли бы в ECMAScript
- В Python нет
undefined
, исключены исключения
- Неизменяемые массивы списков в Python (кортежи)
- Нет
switch
в Python, но вместо этого вам предлагается использовать словарь таким образом, иногда его удобное назначение свойств lambdas и выполнение их
- В ECMAScript 3 нет оператора
yield
или let
выражений/операторов или array comprehension
- однако они включены в Mozilla JS, который является нестандартным
-
raise
vs throw
, except
vs catch
(Python, JS)
- Собственные строки Unicode в ECMAScript
- Операторы ключевых слов, такие как
and
, is
и not
, используются в Python
- Python не поддерживает счетчики, такие как
i++
- Python for loop является "умным", поэтому вам не нужно использовать счетчик для перечисления по спискам, и вы не запускаете прототипные свойства, унаследованные от
Object.prototype
- Вам не нужно использовать оператор
new
в Python для создания объектов
- Python напечатан в стиле утка
Я украл хорошую информацию из http://hg.toolness.com/python-for-js-programmers/raw-file/tip/PythonForJsProgrammers.html
Ответ 2
Ввод: Javascript и Python динамически типизируются, а javascript - слабо, питон строго типизирован.
Ответ 3
В python "self" явно передается членной функции и не является специальным ключевым словом или чем-то еще.
В javascript "this" имеет динамическую область действия. вы можете возиться с областью действия функции-члена, вызывая apply() на нем.
Ответ 4
Будучи разработчиком JavaScript и делал некоторые вещи на Python (благодаря Google App Engine), я бы сказал, что два основных отличия между JavaScript и Python будут
- Форматирование
. JavaScript не заботится о внешности вашего кода (подумайте обо всех минимизаторах кода и о том, что получилось в результате)
-
Поддержка Unicode. JavaScript полностью unicode, GAE Python 2.5 не так много (с Latin 1 как набор символов по умолчанию). Поэтому необходимость поддержки нелатинских символов может быть реальной PITA, если вы не уверены, что вы делаете.
Ответ 5
Я добавлю несколько, которых я еще не видел:
- JavaScript поддерживает объектно-литеральную нотацию. Python не работает точно так же, но словари Python похожи на ассоциативные массивы JavaScript.
-
Объекты/массивы JavaScript поддерживают эту классную функцию, где вам не нужно указывать строки (однословные) при создании новых объектов:
var foo = {bar: "baz" };
-
Доступ к ассоциативным ключам массива в JavaScript может быть выполнен с использованием точечной нотации, в дополнение к привязным обозначениям. То есть, они одинаковы:
foo.bar;//возвращает "baz"
Foo [ "бар" ];//возвращает "baz"
-
Синтаксис анонимной функции Python (lambda
) не так гибок, как анонимные функции JavaScript.
- У Python есть, как, стандартная библиотека и прочее. (И да, я знаю о Rhino et al., Но библиотеки, которые они вам дают, не являются стандартными. Нет стандартного способа читать файл в JavaScript..., о котором я знаю.)
- Вы можете запустить JavaScript в браузере. Питон... не так много.;)
Ответ 6
В Python пробелы являются частью языка. В Javascript фигурные скобки определяют блоки кода и пробелы игнорируются. Кроме того, Python имеет привязки для Java API,.net и других интересных модных библиотек. Javascript довольно ограничен в отделе библиотеки по сравнению с Python, но в нем есть некоторые аккуратные библиотеки окон и т.д.