@undeflife @seeker 感谢提醒。 关于“弱类型”,我确实不是非常明白这个词专业的意义。由于平时听别人的表述,就记下了,也未去求证。 我想表达的意思是,在不需要做强制类型转换的情况下做事情: 比如 js : var a=1, b="2"; var c = a+b; 如果我想表述一种 “无需声明变量类型的语言” 和 “需要严格声明变量类型的语言” 用什么词汇去界定,虚心求教,愿闻其详。
davepkxxx
2013-06-02 02:10:07 +08:00
弱类型语言Javascript: var i = 1; i = ""; // 顺利通过编译。
Java: int i = 1; i = ""; // 无法通过编译。
比较特殊的可能就是Scala: var i = 0; // 和 var i : Int = 0; 是一个意思,可以省略声明。 i = ""; // 无法通过编译。
Ricepig
2013-06-02 02:13:24 +08:00
@emohacker 无论是强类型还是弱类型,表面上都可以达到你说的效果。强类型弱类型的区别主要在于一个变量声明了以后,是否可以改变其类型。 例如,在C#(强类型语言)中,下列语句是合法的: var a=1; var b= "2"; var c=a+b; 仅仅是因为C#提供了var这个语法糖,它会根据后面的初始值来判断这个变量是什么类型。而C#的string类型又重载了加法运算符,所以c=a+b是合法的。但是以下语句是不正确的: var a=1; a = "2"; 而在弱类型的语言中(php,js等),类似上面语句应该是合法的
@Golevka 而且我举的例子,实际上是强弱类型的差别,而不是动态静态的差别吧。因为即使是动态类型(且强类型),运行期确定了其类型后,变量类型就无法再改变了。而弱类型的话就没有这个困扰,这也是我说 var a=1; a = "2"; 可以在弱类型语言里通过,而无法在强类型语言里通过。无论动态语言还是静态语言,上面两句应该都是无法通过的,只要它们是强类型。