super-fool / blog

珍藏经典, 分享思想, 共同进步.加油
3 stars 0 forks source link

JS的动态类型, 弱类型 #78

Open super-fool opened 3 years ago

super-fool commented 3 years ago

JS的动态类型, 弱类型

动态类型

每一个语言都会先进行转换(翻译)成机器语言, 这个过程我们称为编译. 编译过程中, 其中有一个步骤只会在静态类型语言中出现, 那就是类型检查: 所有声明变量的数据类型均是固定且不可改变的, 并且 想要赋值一个变量前, 必须先声明变量的类型.

那么就可以对动态类型做出解释: 运行时才会做类型检查的语言

JS中, 只有 var, const, let 这些关键字用来声明变量. 所以, 如果要区分一个语言是否是动态还是静态类型语言, 只需要去看: 变量声明时, 变量类型是否用到了String, Number 这种象征数据类型关键字.


// 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类型. 这个就是弱类型: 变量的数据类型在执行期间赋值其他类型的值, 之前的类型可以被忽略.

那么强类型也就是说一旦声明了数据类型就不能在赋值其他类型的值

强类型中, 其实也可以改变变量类型, 但是必须经过强制转换, 比如下面的Java代码:

byte b = 50;
// b = b * 2; // Type mismatch: cannot convert from int to byte.
b = (byte)(b * 2);

总结:

弱类型语言虽然coding很爽, 但是严谨性就非常差, 所以我们有了: 类型检查预处理器 TyepScript