Open super-fool opened 3 years ago
每一个语言都会先进行转换(翻译)成机器语言, 这个过程我们称为编译. 编译过程中, 其中有一个步骤只会在静态类型语言中出现, 那就是类型检查: 所有声明变量的数据类型均是固定且不可改变的, 并且 想要赋值一个变量前, 必须先声明变量的类型.
那么就可以对动态类型做出解释: 运行时才会做类型检查的语言
JS中, 只有 var, const, let 这些关键字用来声明变量. 所以, 如果要区分一个语言是否是动态还是静态类型语言, 只需要去看: 变量声明时, 变量类型是否用到了String, Number 这种象征数据类型关键字.
var, const, let
// Java int i = 0; public class Test () {} Test test = new Test(); // JavaScript var a = 1; function Test() {} var test = new Test();
在JS中, 以下的代码是可以通过编译的.
var a = 1; a = 'a';
在执行第一行时, 变量a被检查到是Number类型; 在执行第二行时, 又被检查到是String类型. 这个就是弱类型: 变量的数据类型在执行期间赋值其他类型的值, 之前的类型可以被忽略.
a
Number
String
那么强类型也就是说一旦声明了数据类型就不能在赋值其他类型的值
强类型中, 其实也可以改变变量类型, 但是必须经过强制转换, 比如下面的Java代码: byte b = 50; // b = b * 2; // Type mismatch: cannot convert from int to byte. b = (byte)(b * 2);
强类型中, 其实也可以改变变量类型, 但是必须经过强制转换, 比如下面的Java代码:
byte b = 50; // b = b * 2; // Type mismatch: cannot convert from int to byte. b = (byte)(b * 2);
动态 和 静态: 做类型检查的步骤是在 编译期 还是在 运行期.
强 和 弱: 初始化了变量的数据类型后, 能不能将一种类型当作另一种类型.
弱类型语言虽然coding很爽, 但是严谨性就非常差, 所以我们有了: 类型检查预处理器 TyepScript
TyepScript
JS的动态类型, 弱类型
动态类型
每一个语言都会先进行转换(翻译)成机器语言, 这个过程我们称为编译. 编译过程中, 其中有一个步骤只会在静态类型语言中出现, 那就是类型检查: 所有声明变量的数据类型均是固定且不可改变的, 并且 想要赋值一个变量前, 必须先声明变量的类型.
那么就可以对动态类型做出解释: 运行时才会做类型检查的语言
JS中, 只有
var, const, let
这些关键字用来声明变量. 所以, 如果要区分一个语言是否是动态还是静态类型语言, 只需要去看: 变量声明时, 变量类型是否用到了String, Number 这种象征数据类型关键字.弱类型
在JS中, 以下的代码是可以通过编译的.
在执行第一行时, 变量
a
被检查到是Number
类型; 在执行第二行时, 又被检查到是String
类型. 这个就是弱类型: 变量的数据类型在执行期间赋值其他类型的值, 之前的类型可以被忽略.那么强类型也就是说一旦声明了数据类型就不能在赋值其他类型的值
总结:
动态 和 静态: 做类型检查的步骤是在 编译期 还是在 运行期.
强 和 弱: 初始化了变量的数据类型后, 能不能将一种类型当作另一种类型.
弱类型语言虽然coding很爽, 但是严谨性就非常差, 所以我们有了: 类型检查预处理器
TyepScript