目录javascript
console.log(typeof 12); var name = 'xiaoke'; console.log(typeof name);
使用typeof检测数据类型,首先返回的都是一个字符串,其次字符串中包含了对应的数据类型java
- 例如:"number"、"string"、"boolean"、"undefined"、"function"、"object"、""
局限性: typeof null->"object"数组
- 不能具体细分是数组仍是正则,仍是对象中其余的值,由于使用type哦对检测数据类型,对于对象数据类型中的值,最后返回的结果都是"object"
console.log(typeof typeof typeoof function());//->"string" function fn(callback){ //typeof callback === "function"?callback:null; callback&&callback(); } fn(function(){});
var obj = [12,23]; console.log(obj instanceof Array);//true console.log(obj instanceof RegExp);//false
局限性:浏览器
- 在类的原型继承中,咱们最后检测出来的结果不必定正确
在原型被修改以后均可能不正确函数
console.log(1 instanceof Number);//false console.log("" instanceof String);//false var ary = []; console.log(ary instanceof Array);//true function fn(){} var ary = new Array; fn.prototype = new Array;//->原型继承;让子类的原型等于父类的一个实例 var f = new fn; f.__proto__ = fn.prototype=ary.__proto__=Array.prototype; fn.prototype->Array.prototype->Object.prototype console.log(f instanceof Array);//true
做用和instanceof很是类似this
- 能够处理基本数据类型的检测
- constructor检测Object和instanceof不同,通常状况下是检测不了的
局限性:prototype
- 咱们能够把类的原型进行重写,在重写的过程当中颇有可能出现以前的constructor给覆盖了,这样检测出来的结果就是不正确的
var num = 1; console.log(num.constructor ===Number);// var reg = /^$/; console.log(reg.constructor===RegExp);//true console.log(reg.constructor===Object);//false function Fn(){} Fn.protoype = new Array; var f = new Fn; console.log(f.constructor);//Array
注意:对于特殊的数据类型,好比:null和undefined,他们的所属类是Null和Undefined,可是浏览器把这两个类保护起来了,不容许在外面访问使用
什么叫Object?code
- Object是内置类、是全部对象的基类、Object是引用数据类型
- 首先获取Object原型上的toString方法,让方法执行,而且改变方法中的this关键字
- 做用:Object.prototype.toString它的做用是返回当前方法的执行主体(方法中的
this
)所属类的详细信息,[object Object]
,第一个object表明当前实例是对象数据类型(这个是固定死的),第二个Object表明的是obj所属类是Object
var obj = {}; console.log(obj.toString());//->toString中的this是谁?->obj,返回的是obj所属类的信息->"[object Object]"
咋一看应该是转换为字符串,可是某些toString方法不单单是转换为字符串
对于Number、String、Boolean、Array、RegExp、Date、Function原型上的toString方法都是把当前的数据类型转换为字符串类型的(它们的做用仅仅是用来转换为字符串的)对象
- Number.prototype.toString()是用来转换为字符串的,若是toString()的参数为一个,能够转换为各类进制的数字
console.log(({}).toString());//[object Object]
继承
- 字符串的原型上的toString()也是用来转换为字符串的,进制转换无论用
console.log((1).toString());//Number.prototype.toString()转换为字符串 console.log((true).toString());//"true" console.log((null).toString());//Cannot read property''toString' of null console.log((undefined).toString());//Cannot read property''toString' of undefined console.log(({}).toString());//[object Object]