Python 和 JavaScript 都是脚本语言, 所以它们有很多共同的特性, 都需要解释器来运行, 都是动态类型, 都支持自动内存管理, 都可以调用 eval()来执行脚本等等脚本语言所共有的特性.
然而它们也有很大的区别, JavaScript 这设计之初是一种客户端的脚本语言, 主要应用于浏览器, 它的语法主要借鉴了 C, 而 Python 由于其 "优雅","明确","简单" 的设计而广受欢迎, 被应用于教育, 科学计算, web 开发等不同的场景中.
编程范式
Python 和 JavaScript 都支持多种不同的编程范式, 在面向对象的编程上面, 它们有很大的区别.
JavaScript 的面向对象是基于原型 (prototype) 的, 对象的继承是由原型 (也是对象) 创建出来的, 由原型对象创建出来的对象继承了原型链上的方法. 而 Python 则是中规中矩的基于类 (class) 的继承, 并天然的支持多态(polymophine).
因为是基于对象的继承, 在 JavaScript 中, 我们没有办法使用类成员 empCount, 只好声明了一个全局变量, 当然实际开发中我们会用更合适的 scope. 注意 JavaScript 创建对象需要使用 new 关键字, 而 Python 不需要.
除了原生的基于原型的继承, 还有很多利用闭包或者原型来模拟类继承的 JavaScript OO 工具, 因为不是语言本身的属性, 我们就不讨论了.
线程模型
在 JavaScript 的世界中是没有多线程的概念的, 并发使用过使用事件驱动的方式来进行的, 所有的 JavaScript 程序都运行在一个线程中. 在 html5 中引入 Web worker 可以并发的处理任务, 但没有改变 JavaScript 单线程的限制.
Python 通过 thread 包支持多线程.
不可改变类型 (immutable type)
在 Python 中, 有的数据类型是不可改变的, 也就意味着这种类型的数据不能被修改, 所有的修改都会返回新的对象. 而在 JavaScript 中所有的数据类型都是可以改变的.
Python 引入不可改变类型我认为是为了支持线程安全, 而因为 JavaScript 是单线程模型, 所以没有必要引入不可改变类型.
隐式转换
Python 是一种强类型编程语言, 即编程语言中不会发生隐式数据类型转换. 与此相反, JavaScript 是弱类型的, 因此提供隐式数据类型转换.
布尔
JavaScript 有 true 和 false.Python 有 True 和 False. 它们除了大小写没有什么区别.
字符串
JavaScript 采用 UTF16 编码.
Python 使用 ASCII 码. 需要调用 encode,decode 来进行编码转换. 使用 u 作为前缀可以指定字符串使用 Unicode 编码.
数值
JavaScript 中所有的数值类型都是实现为 64 位浮点数. 支持 NaN(Not a number), 正负无穷大(+/-Infiity).
Python 拥有诸多的数值类型, 其中的复数类型非常方便, 所以在 Python 在科研和教育领域很受欢迎. 这应该也是其中一个原因吧. Python 中没有定义 NaN, 除零操作会引发异常.
列表
JavaScript 内置了 array 类型(array 也是 object).
Python 的列表 (List) 和 JavaScript 的 Array 比较接近, 而元组 (Tuple) 可以理解为不可改变的列表.
除了求长度在 Python 中是使用内置方法 len 外, 基本上 JavaScript 和 Python 都提供了类似的方法来操作列表. Python 中对列表下标的操作非常灵活也非常方便, 这是 JavaScript 所没有的. 例如 l[5:-1],l[:6]等等.
字典, 哈希表, 对象
JavaScript 中大量的使用 {} 来创建对象, 这些对象和字典没有什么区别, 可以使用 [] 或者. 来访问对象的成员. 可以动态的添加, 修改和删除成员. 可以认为对象就是 JavaScript 的字典或者哈希表. 对象的 key 必须是字符串.
Python 内置了哈希表(dictS), 和 JavaScript 不同的是, dictS 可以有各种类型的 key 值.
空值
JavaScript 定义了两种空值. undefined 表示变量没有被初始化, null 表示变量已经初始化但是值为空.
Python 中不存在未初始化的值, 如果一个变量值为空, Python 使用 None 来表示.
作用范围和包管理
JavaScript 的作用域是由方法 function 来定义的, 也就是说同一个方法内部拥有相同的作用域. 这个严重区别与 C 语言使用 {} 来定义的作用域. Closure 是 JavaScript 最有用的一个特性.
Python 的作用域是由 module,function,class 来定义的.
Python 的 import 可以很好的管理依赖和作用域, 而 JavaScript 没有原生的包管理机制, 需要借助 AMD 来异步的加载依赖的 JS 文件, RequireJS 是一个常用的工具.
++ 运算符
Python 不支持 ++ 运算符, 没错你再也不需要根据 ++ 符号在变量的左右位置来思考到底是先加一再赋值呢还是先赋值再加一.
代码块
JavaScript 使用大括号来定义代码块. 另一方面, Python 使用缩进来定义代码块. 虽然 JavaScript 有';' 作为语句终止符, Python 有换行符.
来源: http://www.css88.com/qa/javascript/12165.html