javascript类型判断(typeof instanceof ,toStirng.call())

来源:互联网 发布:java做计算器界面 编辑:程序博客网 时间:2024/06/05 05:00

javascript类型判断(typeof instanceof ,toStirng.call())

对typeof instanceof Object.prototype.toString.call(),比较

  • 最近写代码时遇到了对一个变量是arry还是String进行判断,开始使用typeof,发现有问题,来了兴致就把这个方面都研究了下.

    typeof

    function testTypeof(){var str ="aa";var obj = {};var num = 99;var bl = true;var nu = null;var und  ;function  Person(name){    this,name = name;};var person = new Person("aa");var arr = [];var data = Date.now();var reExp = /\[bc\]at/i;var fu = function fu(){};console.log(typeof str ); //Stringconsole.log(typeof str=='object' ); //falseconsole.log(typeof obj ); //objectconsole.log(typeof str=='object' ); //falseconsole.log(typeof num ); //numberconsole.log(typeof str=='object' ); //falseconsole.log(typeof bl ); //booleanconsole.log(typeof str=='object' ); //falseconsole.log(typeof nu ); //objectconsole.log(typeof str=='object' ); //falseconsole.log(typeof und ); //undefinedconsole.log(typeof str=='object' ); //falseconsole.log(typeof person ); //objectconsole.log(typeof str=='object' ); //falseconsole.log(typeof arr ); //objectconsole.log(typeof str=='object' ); //falseconsole.log(typeof data ); //numberconsole.log(typeof str=='object' ); //falseconsole.log(typeof reExp ); //objectconsole.log(typeof str=='object' ); //falseconsole.log(typeof fu ); //functionconsole.log(typeof str=='object' ); //false}
    • 总结:在基本类型 String,Number,boolean,undefined function 类型判断时可以使用

instanceof

function testInstanceof(){    var str ="aa";    var obj = {};    var num = 99;    var bl = true;    var nu = null;    var und  ;    function  Person(name){        this,name = name;    };    var person = new Person("aa");    var arr = [];    var data = Date.now();    var reExp = /\[bc\]at/i;    var fu = function fu(){};    console.log(str instanceof String); //false    console.log(str instanceof Object); //false    console.log(obj instanceof Object); //true    console.log(num instanceof Number); //false    console.log(num instanceof Object); //false    console.log(bl instanceof Boolean); //false    console.log(bl instanceof Object); //false    console.log( nu instanceof Object ); //false    console.log(und instanceof Object  ); //false    console.log(person instanceof Person ); //true    console.log(person instanceof Object ); //true    console.log(arr instanceof Array); //true    console.log(arr instanceof Object ); //true//    console.log(data instanceof Data); //false    console.log(data instanceof Object); //false  //  console.log(reExp instanceof ReExp ); //false    console.log(reExp instanceof Object ); //true    console.log(fu instanceof Function); //true,    console.log(fu instanceof Object); //true}
  • 总结:如上所看,instanceof 在引用类型方面使用比较合适,原始object,自定义对象,Function,特别是自定义对象

Object.prototype.toString.call()

function testStirngCall(){    var str ="aa";    var obj = {};    var num = 99;    var bl = true;    var nu = null;    var und  ;    function  Person(name){        this,name = name;    };    var person = new Person("aa");    var arr = [];    var data = Date.now();    var reExp = /\[bc\]at/i;    var fu = function fu(){};    console.log(Object.prototype.toString.call(str)); //[object String]    console.log(Object.prototype.toString.call(obj)); //[object Object]    console.log(Object.prototype.toString.call(num)); //[object Number]    console.log(Object.prototype.toString.call(bl)); // [object Boolean]    console.log(Object.prototype.toString.call(nu)); //[object Null]    console.log(Object.prototype.toString.call(und)); //[object Undefined]    console.log(Object.prototype.toString.call(person)); // [object Object]    console.log(Object.prototype.toString.call(arr)); // [object Array]    console.log(Object.prototype.toString.call(data)); // [object Number]    console.log(Object.prototype.toString.call(reExp)); // [object RegExp]    console.log(Object.prototype.toString.call(json)); // [object Function]}
  • 除了自定义对像person,不能识别,其他都能识别,完胜


总结:自定义对像( var person = new Person())用instanceof ,其他使用String.prototype.toString().call(),这样才能尽可能的避免问题

0 0
原创粉丝点击