@lizlalala
2015-12-05T13:49:47.000000Z
字数 2275
阅读 1411
codewars javascript
@(高程)[codewars]
总结来说:
* step 1: obj.constructor.toString().match来判断
* step 2: null用===
* step 3: undefined用typeof
| 方法 | 内置基本类型 | 内置引用类型 | 自定义对象 |
|---|---|---|---|
| typeof | √(1) | (2) | |
| Object.prototype.toString | √ | √ | |
| constructor | √(3) | √ | √ |
| instanceof | √ | √ |
* typeof:(1处)null除外,会把null识别为object,(2)处type能识别function类型,但不能识别其他任何对象类型。
* constructor:(3)处,null与undefined是无法判断的,因为他们没有构造函数。其他类型则是可以判断的,具体方法如下:
function isTypeOf(input,typename){return input &&input.constructor && input.constructor.toString().match(/function\s*(\w*)/)[1]==typename;}function getConstructorName(input){return input.constructor.toString().match(/[A-Z]\w+/);}//!!需要注意的是,constructor判断Number类型时也有点问题,因为NaN会被认为是Number类型。因此还需要进一步判断function(input){return getConstructiorName(input,"Number") && !isNaN(input);}
举个栗子
function hello(){}function Point(x, y) {this.x = x;this.y = y;}var p = new Point(1, 2);
那么null与undefined该怎么判断呢?
//最简单的方法:===var value = null;value === null//方法二:function isNull(){return !exp && typeof exp != "undefined" && exp != 0}
用typeof去判断
回归正题
* prototype:不能识别自定义对象类型。具体方法:
Object.prototype.toString.call(input).match(/[A-Z]\w+/)
因为
* instanceof:不能识别自定义对象类型。具体方法:
p instanceof Point
var typer = (function() {function getConstructiorName(input,typename){return input &&input.constructor &&input.constructor.toString().match(/function\s*(\w*)/)[1]==typename;}return {isNumber: function(input){return getConstructiorName(input,"Number") && !isNaN(input);}, isNaN的constructor出来是Number.比如Number("h")isString: function(input){return getConstructiorName(input,"String");},isArray: function(input){return Array.isArray(input);},isFunction: function(input){return getConstructiorName(input,"Function");},isDate: function(input){return getConstructiorName(input,"Date");},isRegExp: function(input){return getConstructiorName(input,"RegExp");},isBoolean: function(input){return getConstructiorName(input,"Boolean");},isError: function(input){return getConstructiorName(input,"Error");},isNull: function(exp){return !exp && typeof exp != "undefined" && exp != 0},isUndefined: function(input){return typeof(input)=== "undefined";}};}(null));
function isIntArray(arr) {if(Array.isArray(arr)){if(arr.length==0) return true;if(arr.every(function(value){return Number.isInteger(value);})) return true;}return false;}

判断integer方法
1,Number.isInteger()
2,Math.floor(x)===x
