1.数据类型分类
ECMAScript标准定义了7种数据类型,主要分为两大类基本类型
和引用类型
。其中:
基本类型又称 值类型 或者 原始类型,共有六
种 。包括:
- 字符串类型(String)
- 数字类型(Number)
- 布尔类型(Boolean)
- 对空类型(Null)
- 未定义类型(Undefined)
- 符号类型(Symbol)
引用类型,只有一种。包括:
- 对象类型(Object)
另外,基于Object类型,JS还实现了其他常用的对象子类型(即不同类型的对象)。我们常见的如:
- Object
- Array
- Function
- String(注:这里是构造函数,和上面的基本类型不是一种)
- Boolean(注:这里是构造函数,和上面的基本类型不是一种)
- Number(注:这里是构造函数,和上面的基本类型不是一种)
- Date
- RegExp
- Error
- ...
所以我们可以说,Object类是所有子类的父类
2.基本包装类型
上面我们已经介绍了基本数据类型和引用类型,那基本包装类型
又是什么?
举个栗子先:
var str = 'hello'; //String 基本类型
var s2 = str.charAt(0); //调用charAt方法(用于返回指定位置的字符)。
console.log(s2); // h
上面的str是一个基本类型,又不是对象,但是它却能调用出一个 charAt() 的方法?
原因是:在基本类型中,有三个比较特殊的存在就是:String Number Boolean,在我们对这个三个类型执行访问属性和方法的操作时候,JS引擎会执行下面操作:
- 创建一个对应类型的实例;
- 在实例上调用指定的方法;
- 销毁这个实例。
所以上面的代码实际在执行过程中,是这样执行的:
var str = 'hello'; //String 基本类型
var s2 = str.charAt(0); //在执行到这一句的时候,发现基本类型要调用方法,此时后台会自动完成以下括号中的三个动作 :
(
var strObject = new String('hello'); // 1.因为str是String类型,所以创建一个String类型的实例,这个生成的实例strObject就是我们所说的`基本包装类型`
var s2 = strObject.chaAt(0); // 2. 然后通过实例来调用方法,并且返回结果给s2
strObject = null; // 3. 销毁这个实例
)
console.log(s2); // h
注意,上述代码是JS引擎自动执行的,你无法访问strObject对象,它只存在于代码的执行瞬间,然后立即销毁,所以我们无法再运行时给基本类型添加属性和方法,除非直接通过new显示调用基本包装类型创建对象。
由此我们可以知道,引用类型和基本包装对象的区别在于:生存期
引用类型所创建的对象,在执行的期间一直在内存中,而基本包装对象只是存在了一瞬间。
举个栗子
var str = 'hello'; //String 基本类型
str.number=0
(
var strObject = new String('hello'); // 1. 创建实例
strObject.number=0 // 2. 赋值
strObject = null; // 3. 销毁
)
console.log(str.number); // number类型存在于strObject上,str并没有number属性,所以为undefined
那么我们怎么才能给基本类型添加方法或者属性呢?答案是在构造函数的原型下面添加
var str = 'hello';
String.prototype.number= 0
console.log(str.number) //0
3.基本类型
String类型:用于表示文本数据
Number类型:用于表示数字数据
如:
123; // 正整数
-123; // 负整数
520.1314; // 浮点数
0; // 零
Infinity; // 正无穷
-Infinity; // 负无穷
typeof Infinity; // number
- Boolean类型:用于表示逻辑值,true或false
- Null类型:表示空,只有一个值:null
- Undefined类型:表示一个没有被赋值的变量会有个默认值 undefined
- Symbol类型:表示独一无二的值
4.引用类型
- Object类型:如对象、数组、函数等,具体就不说了