JS基础数据类型总结

总结js数据类型的识别判断方法
tyoeof
instanceof
Object.prototype.toString.call
constructor
最后封装一个函数,可以判别所有的类型*

1.数据类型
基本类型:

Undefined类型:该类型只有一个值,即undefined(小写),在使用var声明变量但是未对其加以初始化时,这个变量的值就是undefined。
Null类型:该类型也只有一个值,即null(小写),null值表示一个空对象指针,所以用typeof操作符检测null值会返回object的原因。
Boolean类型:改类型有两个值:true和false(小写)。
Number类型:表示整数和浮点数
String类型:即字符串
引用类型

Object类型:即对象
Array类型:数组
Date类型:日期
RegExp类型:正则
Function类型
2.类型的识别的判断方法
(1)typeof总结:
首先typeof不是方法,只是一个操作符。

可以识别标准类型(Null除外)
不能识别具体的对象类型(Function除外)
返回的值首字母都是小写!!!!!!!!

//识别标准类型
    typeof "jerry";      //"string"
    typeof 12;           //"number"
    typeof true;         //"boolean"
    typeof undefined;   //"undefined"
    typeof null;         //"object"
    typeof {name:"jerry"};   //"object"
    
//识别引用类型
    typeof function(){};  //"function"
    typeof [];            //"object"
    typeof new Date;     //"object"
    typeof /\d/;         //"object"
    //创建一个自定义对象
    function Person(){};
    typeof new Person;      //"object"

(2)instanceof

//能够判别引用类型
[] instanceof Array;       //true
/\d/ instanceof RegExp;    //true
new Date instanceof Date;  //true
var a = function(){}; 
a instanceof Function;     //true

//不能判别原始类型
1 instanceof Number;          //false
"jerry" instanceof String;  //false

//能够判别自定义对象类型及父子类型
//自定义类型
function Person(){};
Person instanceof Function;  //true
//父子类型
function Point(x,y){
    this.x = x;
    this.y = y;
}
function Cirele(x,y,r){
    Point.call(this,x,y);
    this.radius = r;
}
Circle.prototype = new Point();
Circle.prototype.constructor = Circle;
var c = new Circle(1,1,2);
c instanceof Circle  //true
c instanceof Point  //true

结论:

可以判别内置对象类型
不能判别原始类型
判别自定义对象类型
结合1和3,用instanceof可以识别所有的对象类型
(3)Object.prototype.toString.call

Object.prototype.toString.call("123");    //"[object String]"

//封装函数,并做截取
function type(obj){
    return Object.prototype.toString.call(obj).slice(8,-1);
}
//测试
type("123");  //"String"

//自定义类型
function Point(x,y){
    this.x = x;
    this.y = y;
}
//测试
type(new Point(1,2));       //"Object"

结论:

上述封装的函数可以识别基本类型以及引用对象类型
不能识别自定义对象类型
(4)constructor(构造这个对象的构造函数的本身)

//判断基本类型(基本类型也有构造函数);但是null和undefined除外,它俩没有构造函数
"jerry".constructor === String;  //true
(1).constructor ===Number;        //true

//判断引用类型
new Date().constructor === Date;  //true
[].constructor === Array;   //true

//判断自定义对象
function Person(name){
    this.name = name;
}
new Person("jerry").constructor === Person; //true

//对constructor判别进行方法的封装
function getConstructorName(obj){
    return (obj===undefined||obj===null)?obj:        
       (obj.constructor && obj.constructor.toString().match(/function\s*([^(]*)/)[1]);
}

封装的原理:

obj:假如传入的参数是null或者undefined,没有构造函数直接返回
obj.constructor如果存在执行&&后面的语句
obj.constructor.toString():将类型对应的构造函数转化成字符串 "Function Number(){code...}"
math(/function\s(1)/)[1]:匹配构造函数的名称,正则匹配
结论:

判别基本类型(Undefined/Null除外)
判别引用类型
判别自定义对象类型
结论:所以可以封装一个函数getConstructorName判断所有类型,但是这个函数返回的除了null和undefined是小写之外,其他的首字母都是大写。


  1. (

你可能感兴趣的:(javascript)