首页 > Web开发 > 详细

js高阶函数--判断数据类型、函数胡柯里化;

时间:2016-06-16 17:56:04      阅读:202      评论:0      收藏:0      [点我收藏+]

一、判断数据类型;

常见的判断有typeof、instanceof、 constructor、 prototype,先来看typeof;

var a = "hello world";
var b = 10;
var c = [1, 3, 5];
var d = new Date();
var e = function() {};

console.log(typeof a); // string
console.log(typeof b); // number
console.log(typeof c); // object
console.log(typeof d); // object
console.log(typeof e); // function

其中typeof返回的类型都是字符串形式,需注意,例如:
alert(typeof a == "string") -------------> true
alert(typeof a == String) --------------> false
另外typeof 可以判断function的类型;在判断除Object类型的对象时比较方便。

判断已知对象类型的方法: instanceof。

console.log(c instanceof Array);    // true
console.log(d instanceof Date);     // true
console.log(e instanceof Function); // true

注意:instanceof 后面一定要是对象类型,并且大小写不能错,该方法适合一些条件选择或分支。

根据对象的constructor判断: constructor。

console.log(c.constructor === Array);     // true
console.log(d.constructor === Date);      // true
console.log(e.constructor === Function);  // true

通用且更好的判断方式:Object.prototype.toString。

Object.prototype.toString.call( obj )返回一个字符串, 比如Object.prototype.toString.call( [1,2,3] ) 总是返回"[object Array]" , 而Object.prototype.toString.call( “str”)总是返回"[object String]"。

console.log(Object.prototype.toString.call(a) === "[object String]");   // true
console.log(Object.prototype.toString.call(b) === "[object Number]");   // true
console.log(Object.prototype.toString.call(c) === "[object Array]");    // true
console.log(Object.prototype.toString.call(d) === "[object Date]");     // true
console.log(Object.prototype.toString.call(e) === "[object Function]"); // true

对于Object.prototype.toString,可以编写一个通用的isType函数,代码如下:

var isType = function(type) {
    return function(obj) {
        return Object.prototype.toString.call(obj) === "[object " + type + "]";
    }
}
// 调用
var isString = isType("String");
var isArray = isType("Array");
var isNumber = isType("Number");
var isFunction = isType("Function");
var string = isString("hello world");
var number = isNumber(10);
var array = isArray([]);
var func = isFunction(function() {});

console.log(string); // true
console.log(number); // true
console.log(array);  // true
console.log(func);   // true

二、函数的柯里化currying;

函数柯里化(function currying)。currying 的概念最早由俄国数学家MosesSchönfinkel 发明,而后由著名的数理逻辑学家Haskell Curry 将其丰富和发展,currying 由此得名。currying 又称部分求值。一个currying 的函数首先会接受一些参数,接受了这些参数之后,该函数并不会立即求值,而是继续返回另外一个函数,刚才传入的参数在函数形成的闭包中被保存起来。待到函数被真正需要求值的时候,之前传入的所有参数都会被一次性用于求值。

通用的function currying(){},

var currying = function(fn) {
    var args = [];
    return function() {
        if (arguments.length === 0) {
            return fn.apply(this, args);
        } else {
            [].push.apply(args, arguments);
            return arguments.callee;
        }
    }
};

 

js高阶函数--判断数据类型、函数胡柯里化;

原文:http://www.cnblogs.com/jone-chen/p/5591639.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!