Javascript的基础知识。
ECMAScript 5的五种简单数据类型:Undefined、Null、Boolean、Number、String;
另外还有一种es6新增的Symbol也是属于简单数据类型
一种复杂数据类型: Object(Array、Function、RegExp、Date都属于 Object)
除此之外还有特殊的类型,三种基本包装类型:Boolean、Number、String
简单数据类型的值时保存在栈内存中的简单数据段,它们是按值访问的。
复杂的数据类型(引用类型)的值是保存在堆内存中的对象,它的值时按照引用访问的。
检测方法用typeof,打印出来分别是
1
   | undefined、boolean、string、number、object
   | 
 
常见类型判断方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
   | o = ''; Object.prototype.toString.call(o).slice(8, -1) === 'String' # 判断字符串 o = NaN || o = 1; Object.prototype.toString.call(o).slice(8, -1) === 'Number' # 判断数值 o = null; Object.prototype.toString.call(o).slice(8, -1) === 'Null' # 判断为Null o = undefined; Object.prototype.toString.call(o).slice(8, -1) === 'Undefined' # 判断为Undefined o = true; Object.prototype.toString.call(o).slice(8, -1) === 'Boolean' # 判断为Boolean var o = {}; Object.prototype.toString.call(o).slice(8, -1) === 'Object' # 判断对象 o = []; Object.prototype.toString.call(o).slice(8, -1) === 'Array' # 判断数组 o = function(){}; Object.prototype.toString.call(o).slice(8, -1) === 'Function' # 判断为Function o = new Date(); Object.prototype.toString.call(o).slice(8, -1) === 'Date' # 判断Date o = new RegExp(); Object.prototype.toString.call(o).slice(8, -1) === 'RegExp' # 判断RegExp
  o = Symbol() Object.prototype.toString.call(o).slice(8, -1) === 'Symbol' # 判断Symbol
   | 
 
一些特殊的类型比较
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
   | typeof null 
  typeof NaN 
  Boolean(NaN) 
  null == undefined 
  null === undefined 
  undefined == 0 
  null == 0 
  var message; message === undefined 
  [] == []  {} == {} 
  [] == false 
  NaN == NaN 
   | 
 
类型计算
1 2 3 4
   | 0.1+0.2 
  var number = Number.MAX_VALUE + Number.MAX_VALUE; isFinite(number); 
   | 
 
基本包装类型
基本包装类型也是一种引用类型,除了拥有基本类型的特征外还拥有其特殊的特征,每当读取一个基本类型的值的时候,后台就会自动创建一个对应的基本包装类型对象,从而让我们能够调用一些方法来操作这些数据。
1 2
   | var str = 'abcdefg'; var newStr = str.substring(2);
   | 
 
本来str基本数据类型是没有方法的,但是,作为基本包装类型,后台自动创建了一个String类型的实例,在实例上调用指定的方法,最后销毁这个实例。
1 2 3
   | var str = new String('abcdefg'); var newStr = str.substring(2); str = null;
  |