弱类型:容忍隐式类型转换。比如js中:
1+'a'
> '1a'
以及c中double可以隐式转换为int
强类型:不容忍隐式类型转换。比如python中:
>>> "1"+2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
静态类型:编译的时候就知道每一个变量的类型,因为类型错误而不能做的事情是语法错误(能做到运行前错误检查,故语言本身就能提供类型报错、代码提示、自动补全等功能,IDE也能提供各类服务,比如智能的rename、快捷进入相应类内部阅读代码等)。
动态类型:编译的时候不知道每一个变量的类型,运行时进行类型检查和绑定,因为类型错误而不能做的事情是运行时错误。
var a = 1;
typeof a;
> "number"
a = 'aa'
typeof a;
> "string"
各种类型语言列举:
弱类型、静态类型 : C/C++
弱类型、动态类型: JS/VB/Perl/PHP
强类型、静态类型 :Java/C#
强类型、动态类型 :Python, Scheme
静态显式类型 :Java/C
静态隐式类型 :Ocaml, Haskell