js真是一门有趣的语言。在js的世界中,数据有两种类型。
一种是引用类型。一种是基本数据类型
引用类型:
在js的世界里,有一句话“所有的一切,都是object”,那么问题来了。object是基本数据还是引用类型的呢?
嘿嘿,卖个关子,后面再讲,先来讲讲对于引用类型的定义:
引用类型值则是指那些保存在堆内存中的对象,意思是变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,该位置保存对象。
意思就是我们的引用类型是一个日记本,当我们想知道2017年8月2日我们在干什么的时候,日记本的回答永远是在写博客,对吧。
这时候,日记本中的2017年8月2日就是我们的引用类型了,也就是说这是个工具,一个指针我们村粗的位置
引用类型有很多,最常见的是我们的ARRAY,FUNCTION,OBJECT等等
基本数据
基本数据类型的概念是:基本类型值指的是那些保存在栈内存中的简单数据段,即这种值完全保存在内存中的一个位置。
意思就是我们查日记本,但是日记本怎么会知道我们那天干了什么?肯定是我们写过对吧,但是我们写的经历是哪儿来?
我们写日记的本子是怎么来?这就是基本类型要做的事情了,也就是我们每次使用基本类型去操作,我们就会去“构建”一次
那哪些才算基本类型?
Undefined / Null / Boolean / Number / String
没错,undefined也是基本类型
一些代码,便于大家理解:
String.prototype.valueOf = function() { console.log("string类别的valueof方法被调用了") }
var obj = { valueOf: function() { console.log("obj的valueof方法被调用了"); return 1 } }
var a1 = 1;
var a2 = new Number(1);
var a3 = Number(1);
var a = 1;
var b = "1";
var c = new String("1");
var d = String("1");
console.log("==================检测基本类型");
console.log(typeof b);
console.log(typeof c);
console.log(typeof d);
console.log("=======================检测引用类型")
console.log(b instanceof String);
console.log(c instanceof Object);
console.log(d instanceof String);
1 == b;
1 == c;
1 == d;
console.log(d === c);
console.log(b === c);
console.log(d === b);
console.log(typeof a1);
console.log(typeof a2);
console.log(typeof a3);
// Typeof操作符是检测基本类型的最佳工具;
//Instanceof用于检测引用类型,可以检测到具体的,它是什么类型的实例;
这儿再提一点题外话。关于为什么叫基本类型,那是因为因为string比较特殊。string的定义是引用类型的,但其操作是值类型,
所以在代码中才会出现我定义的那种情况
对于堆内存还有栈内存,下篇博客再见