目录
一、基本类型
对语言引擎和开发人员来说, 类型是值的内部特征,它定义了值的行为,以使其区别于其它值。如对Number类型的值进行数学运算,对String类型的值进行字符串操作。
简单数据类型:String, Number, Boolean, Undefined, Null, Symbol, BigInt
特性
-
值是不可变的
-
存放在栈区
原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。 -
比较是值的比较
var a = 1;
var b = true;
console.log(a == b); // true
console.log(a === b); // false
通过=赋值得到的两个基本类型a和b可以记为两家连锁店,两者之间相互独立。
通过=赋值得到的两个引用类型a和b可以记为一家店里的两把钥匙,指向的都是同一家店。
null 和undefined
null表示"没有对象",代表一个空对象指针,即该处不应该有值。
(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点。
Object.prototype.__proto__ // null
undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。
(1)变量被声明了,但没有赋值时,就等于undefined。
(2)对象没有赋值的属性,该属性的值为undefined。
(3)调用函数时,应该提供的参数没有提供,该参数等于undefined。
(4)函数没有返回值时,默认返回undefined。
var i;
i // undefined
var o = new Object();
o.p // undefined
function f(x){
console.log(x)}
f() // undefined
var x = f();
x // undefined
两者都可以通过!判断
var a = null;
var b; // undefined
!a; // true
!b; // true
二、引用类型
- 值是可变的
var a={
age:20};
a.age=21;
console.log(a.age)//21
-
指针存在栈内存和实体对象存在堆内存
javascript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间,引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储指针,该指针指向堆中存储的对象。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。 -
比较是堆内存地址的比较
var person1 = {
};