基本数据类型
typeof
- 返回结果有"string"、“number”、“boolean”、“undefined”、“object”、“function”
- number,string,boolean,undefined基本数据类型可正确判断,null与NaN例外。
console.log(typeof 1);//number
console.log(typeof '1');//string
console.log(typeof true);//boolean
console.log(typeof undefined);//undefined
console.log(typeof NaN);//number
- Symbol、function返回function,不分明
console.log(typeof Symbol);//function
function fn() { };
console.log(typeof fn);//function
- null 数组 日期 正则返回object,不分明
console.log(typeof null);//object,指空对象索引
console.log(typeof []);//object
console.log(typeof new Date());//object
console.log(typeof new RegExp());//object
引用数据类型
instanceof
判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上 (是否出现在对象的原型链中的任何位置)或 对象A是不是在B的prototype上。
基本数据类型不能判断。只有函数才有原型链。
- 数组
console.log([] instanceof Array); //true
思路是这样的
故 console.log([] instanceof Object);//ture
也是成立
- 对象
var o = {};
console.log(o instanceof Object); // true码片
- 日期 正则
console.log(new Date() instanceof Date); // true
console.log(new RegExp() instanceof RegExp) ; // true
- 函数
function fn() { };
console.log(fn instanceof Function);//true
所有类型,但不稳定
constructor
对象A的constructor ===创建对象A的函数,查看对象对应的构造函数
- 基本类型
字符,数字,布尔 判断正确
console.log('A'.constructor==String);//true
var num=2;
console.log(num.constructor==Number);//true
console.log(true.constructor==Boolean);//true
undefined 与 null 判断错误 。 因为他们指的是无效对象
console.log(undefined.constructor==undefined);// undefined has no properties
console.log(undefined.constructor==Object);// undefined has no properties
console.log(null.constructor==Object);//TypeError: null has no properties
- 引用类型
时间,正则,函数,(对象)成功
console.log(new Date().constructor==Date);//true
console.log(new RegExp().constructor== RegExp);//true
function fn() { };
console.log(fn.constructor== Function);//true
var o = {};
console.log(o.constructor== Object); // true
但不建议,因为能重写,如下
function A(){};
Aaa.prototype.constructor = A;//程序可以自动添加,当我们写个构造函数的时候,程序会自动添加这句代码
function B(){};
Aaa.prototype.constructor = B;//此时我们就修改了Aaa构造函数的指向问题
alert(Aaa.construtor==A);//false
终极方法 全类型
Object.prototype.toString.call()
返回一个表示当前函数源代码的字符串
基本类型
var str = 'A';
console.log(Object.prototype.toString.call(str));//[object String]
var bool = true;
console.log(Object.prototype.toString.call(bool))//[object Boolean]
var num = 123;
console.log(Object.prototype.toString.call(num));//[object Number]
var nul = null;
console.log(Object.prototype.toString.call(nul));//[object Null]
var und = undefined;
console.log(Object.prototype.toString.call(und));//[object Undefined]
引用类型 函数 对象
var date = new Date();
console.log(Object.prototype.toString.call(date));//[object Date]
var json = {};
console.log(Object.prototype.toString.call(json));//[object Object]
var arr = [];
console.log(Object.prototype.toString.call(arr));//[object Array]
var reg = /a/;
console.log(Object.prototype.toString.call(reg));//[object RegExp]
var fn = function(){};
console.log(Object.prototype.toString.call(fn));//[object Function]
var error = new Error();
console.log(Object.prototype.toString.call(error));//[object Error
最后 偷一张图,忘记在哪里看的了 感觉不错贴一下
最后的最后,加一个小东西
- 判断null与undefined的函数