javascript数据类型

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引擎会执行下面操作:

  1. 创建一个对应类型的实例;
  2. 在实例上调用指定的方法;
  3. 销毁这个实例。

所以上面的代码实际在执行过程中,是这样执行的:

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类型:如对象、数组、函数等,具体就不说了

5.参考

前端进阶系列(第1期):理解JavaScript数据类型

js基本类型和基本包装类型的区别