Python和JavaScript的语义有多大不同?
这两种语言在我看来非常相似。虽然Python支持真正的类,而不是像原型那样的结构,但在Python中,类和函数其实没什么太大区别,都是用来生成包含值和函数的对象,就像你在JavaScript中做的那样。另一方面,JavaScript只支持浮点数和字符串作为内置的数据类型。
我觉得这些差别看起来比较浅显,所以除了这些,还有哪些更重要的区别呢?
6 个回答
5
在Python中,“self”是明确传递给成员函数的,它并不是一个特殊的关键词或者其他什么东西。简单来说,当你在类里定义一个方法时,必须把“self”作为第一个参数,这样方法才能知道它是属于哪个对象的。
而在JavaScript中,“this”的作用范围是动态的。也就是说,“this”指向的对象会根据你怎么调用这个函数而变化。你可以通过调用apply()方法来改变一个成员函数的作用范围,这样可以让它在不同的上下文中使用。
6
类型: Javascript 和 Python 都是 动态类型 的语言,也就是说你不需要在写代码的时候提前声明变量的类型。不过,Javascript 是 弱类型 的,而 Python 是 强类型 的。
40
- Python的经典继承和ECMAScript的原型继承
- ECMAScript使用大括号和分号,而Python则是通过空格和缩进来组织代码的
- Python没有
var
这个关键字,ECMAScript中有隐式全局变量,但两者都是基于词法作用域的 - 在Python 2.5及更早版本中,闭包的功能有点“有限”,因为绑定的变量是只读的,不能像在ECMAScript中那样访问私有变量
- Python中没有
undefined
,而是会抛出异常 - Python中的不可变列表数组(元组)
- Python没有
switch
语句,但鼓励使用字典来实现类似的功能,有时将属性赋值给匿名函数并执行它们也很方便 - ECMAScript 3没有
yield
语句,也没有let
表达式/语句和array comprehension
,不过这些在Mozilla的JS中是有的,但不算标准 raise
和throw
的区别,except
和catch
的区别(Python和JS)- ECMAScript中有原生的Unicode字符串
- Python中使用关键字运算符,比如
and
、is
和not
- Python不支持像
i++
这样的计数器 - Python的for循环是“智能”的,所以你不需要用计数器来遍历列表,也不会遇到从
Object.prototype
继承的原型属性 - 在Python中创建对象时不需要使用
new
操作符 - Python是鸭子类型(即根据对象的行为来决定类型,而不是根据对象的类型)
我从这个网站偷了一些信息:http://hg.toolness.com/python-for-js-programmers/raw-file/tip/PythonForJsProgrammers.html