super-fool / blog

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

如何理解Null #79

Open super-fool opened 3 years ago

super-fool commented 3 years ago

null 被归类为 基本类型(primitive data).

但是typeof null 的值是object. 它为什么是个对象呢?

当然, 这是个历史遗留问题, 后面会详细解释

如何理解nullundefined, 我们看看以下三个场景:

人 = 变量 翔 = 值 厕坑 = 栈 厕所 = 内存

我们只看第二个场景: 我就占这厕所, 我就不拉, 哎, 就是玩. 典型的null.

我们再看第三个场景: 我有文明, 没翔我就走, 留给有翔的人用. 典型的undefined.

应该明白 null 和 undefined 的区别了吧.

JS的GC(警察) 怎么处理这些场景呢 ? 在场景二中, 警察打开门发现这是占着茅坑不拉屎啊, 强行把没翔的人拖走; 在场景三中, 警察以为有人, 打开门发现, 哎哟, 卧槽, 没人啊.

言归正传哈

为什么我们经常会用null来表示空值 而不是 undefined 呢?

其实还有个比较重要的一点是类型转换上的不同

详细解释: 百度搜索: 阮一峰说: null和undefined的区别

super-fool commented 3 years ago

当我们打算给一个变量赋值对象时, 我们可以将该变量初始化为null. 这里的意思就是告诉内存, 我先在栈中占一个坑, 在将来的某一个点我会填上这个坑;

当我们给一个变量赋值为一个原始类型的值时, 我们可以初始化为undefined. 这里代表, 我不需要占位置, 因为变量和原始类型的值都是保存在堆中的.