English 中文

所有源代码均托管在 GitHub 上.

如果发现 bug 或有改进意见,可以到上边地址发起 issue 帮助我们让该项目变得更好:)

使用 npm 安装:

Use as an npm package:

npm i licia --save
var uuid = require('licia/uuid');

console.log(uuid()); // -> 0e3b84af-f911-4a55-b78a-cedf6f0bd815

$

source test

类似 jQuery 的 dom 操作库。

支持方法列表

offset, hide, show, first, last, get, eq, on, off, html, text, val, css, attr, data, rmAttr, remove, addClass, rmClass, toggleClass, hasClass, append, prepend, before, after

var $btn = $('#btn');
$btn.html('eustia');
$btn.addClass('btn');
$btn.show();
$btn.on('click', function () {
    // Do something...
});

$attr

source test

操作元素属性。

获取元素集中第一个元素的指定属性值。

参数名类型说明
elementstring array element目标元素集
namestring属性名
返回值string第一个元素的属性值

设置元素集中一个或多个属性的值。

参数名类型说明
elementstring array element目标元素集
namestring属性名
valuestring属性值
参数名类型说明
elementstring array element目标元素集
attributesobject包含多个要设置属性-值对的对象

remove

对元素集中的所有元素,移除指定的属性。

参数名类型说明
elementstring array element目标元素集
namestring属性名
$attr('#test', 'attr1', 'test');
$attr('#test', 'attr1'); // -> test
$attr.remove('#test', 'attr1');
$attr('#test', {
    'attr1': 'test',
    'attr2': 'test'
});

$class

source test

操作元素 class。

add

对元素集中的所有元素,添加指定的 class。

参数名类型说明
elementstring array element目标元素集
namesstring array添加的 class

has

判断元素集中是否有元素含有指定的 class。

参数名类型说明
elementstring array element目标元素集
namestringclass 值
返回值boolean如果有,返回真

toggle

对于元素集中的每个元素,如果含有指定的 class 就将其删除,反之则添加。

参数名类型说明
elementstring array element目标元素集
namestringclass 值

remove

对于元素集中的所有元素,移除指定的 class。

参数名类型说明
elementstring array element目标元素集
namesstringclass 值
$class.add('#test', 'class1');
$class.add('#test', ['class1', 'class2']);
$class.has('#test', 'class1'); // -> true
$class.remove('#test', 'class1');
$class.has('#test', 'class1'); // -> false
$class.toggle('#test', 'class1');
$class.has('#test', 'class1'); // -> true

$css

source test

操作元素样式。

获取元素集中第一个元素的指定样式。

参数名类型说明
elementstring array element目标元素集
namestring样式名
返回值string样式值

设置元素集中一个或多个样式的值。

参数名类型说明
elementstring array element目标元素集
namestring样式名
valuestring样式值
参数名类型说明
elementstring array element目标元素集
propertiesobject包含多个要设置样式-值对的对象
$css('#test', {
    'color': '#fff',
    'background': 'black'
});
$css('#test', 'display', 'block');
$css('#test', 'color'); // -> #fff

$data

source test

同 $attr,自动给属性名加 data- 前缀。

$data('#test', 'attr1', 'eustia');

$event

source test

给指定 dom 元素绑定事件。

function clickHandler() {
    // Do something...
}
$event.on('#test', 'click', clickHandler);
$event.off('#test', 'click', clickHandler);

$insert

source test

插入 html 到不同位置。

before

插入 html 到元素前。

after

插入 html 到元素后。

prepend

插入 html 到元素内部前。

append

插入 html 到元素内部后。

参数名类型说明
elementstring array element目标元素集
contentstringhtml 字符串
// <div id="test"><div class="mark"></div></div>
$insert.before('#test', '<div>licia</div>');
// -> <div>licia</div><div id="test"><div class="mark"></div></div>
$insert.after('#test', '<div>licia</div>');
// -> <div id="test"><div class="mark"></div></div><div>licia</div>
$insert.prepend('#test', '<div>licia</div>');
// -> <div id="test"><div>licia</div><div class="mark"></div></div>
$insert.append('#test', '<div>licia</div>');
// -> <div id="test"><div class="mark"></div><div>licia</div></div>

$offset

source test

获取元素在文档中的位置。

参数名类型说明
elementstring array element目标元素集
$offset('#test'); // -> {left: 0, top: 0, width: 0, height: 0}

$property

source test

设置或获取元素的 html, text,val 等值。

html

设置或获取元素的 html 值。

text

设置或获取元素的 text 值。

val

设置或获取元素的 val 值。

$property.html('#test', 'licia');
$property.html('#test'); // -> licia

$remove

source test

移除指定元素集。

参数名类型说明
elementstring array element目标元素集
$remove('#test');

$safeEls

source test

将值转换为数组,如果值为字符串,使用 querySelector 获取元素集。

参数名类型说明
valueelement array string要转换的值
返回值array元素集
$safeEls('.test'); // -> Array of elements with test class

$show

source test

显示元素。

参数名类型说明
elementstring array element目标元素集
$show('#test');

Blob

source test

如果支持 Blob,直接返回 Blob,否则使用 BlobBuilder 进行兼容。

constructor

参数名类型说明
partsarrayBlob 分片
[opts]object选项
var blob = new Blob([]);

Class

source test demo

创建 JavaScript 类。

参数名类型说明
methodsobject公有方法
[statics]object静态方法
返回值function用于创建实例的函数
var People = Class({
    initialize: function People(name, age) {
        this.name = name;
        this.age = age;
    },
    introduce: function () {
        return 'I am ' + this.name + ', ' + this.age + ' years old.';
    }
});

var Student = People.extend({
    initialize: function Student(name, age, school) {
        this.callSuper(People, 'initialize', arguments);

        this.school = school;
    },
    introduce: function () {
        return this.callSuper(People, 'introduce') + '\n I study at ' + this.school + '.';
    }
}, {
    is: function (obj) {
        return obj instanceof Student;
    }
});

var a = new Student('allen', 17, 'Hogwarts');
a.introduce(); // -> 'I am allen, 17 years old. \n I study at Hogwarts.'
Student.is(a); // -> true

Color

source test

颜色转换。

constructor

参数名类型说明
colorstring object要转换的颜色

toRgb

获取颜色 rgb 格式。

toHex

获取颜色十六进制格式。

toHsl

获取颜色 hsl 格式。

parse

【静态】将颜色字符串转换为含有值及颜色模型的对象。

参数名类型说明
colorstring颜色字符串
返回值object含有值及颜色模型的对象
Color.parse('rgb(170, 287, 204, 0.5)'); // -> {val: [170, 187, 204, 0.5], model: 'rgb'}
var color = new Color('#abc');
color.toRgb(); // -> 'rgb(170, 187, 204)'
color.toHsl(); // -> 'hsl(210, 25%, 73%)'

Dispatcher

source test

Flux 调度器。

相关文档

var dispatcher = new Dispatcher();

dispatcher.register(function (payload) {
   switch (payload.actionType) {
       // Do something
   }
});

dispatcher.dispatch({
    actionType: 'action'
});

Emitter

source test

提供观察者模式的 Event emitter 类。

on

绑定事件。

off

解绑事件。

once

绑定只触发一次的事件。

参数名类型说明
eventstring事件名称
listenerfunction事件监听器

emit

触发事件。

参数名类型说明
eventstring事件名称
...args*传递给监听器的参数

mixin

【静态】 将 Emitter 类的方法绑定到指定对象上去。

参数名类型说明
objobject目标对象
var event = new Emitter();
event.on('test', function () { console.log('test') });
event.emit('test'); // Logs out 'test'.
Emitter.mixin({});

Enum

source test

Enum 类实现。

constructor

参数名类型说明
arrarray字符串数组
参数名类型说明
objobject键值对
var importance = new Enum([
    'NONE', 'TRIVIAL', 'REGULAR', 'IMPORTANT', 'CRITICAL'
]);

if (val === importance.CRITICAL) {
    // Do something.
}

JsonTransformer

source test

JSON 转换器。

constructor

参数名类型说明
[data={}]object目标 JSON 对象

set

设置属性值。

参数名类型说明
[key]string属性路径
val*

如果属性路径为空,整个对象将被值替换。

get

获取属性值。

参数名类型说明
[key]string属性路径
返回值*指定值或整个对象

remove

移除属性值。

参数名类型说明
keyarray string属性路径

map

数组 map 的快捷方式。

参数名类型说明
fromstring源对象路径
tostring目标对象路径
fnfunction真值检测函数

filter

数组 filter 的快捷方式。

compute

从多个属性值计算新值。

参数名类型说明
fromarray string源属性路径
tostring目标属性路径
fnfunction计算函数
var data = new JsonTransformer({
    books: [{
        title: 'Book 1',
        price: 5
    }, {
        title: 'Book 2',
        price: 10
    }],
    author: {
        lastname: 'Su',
        firstname: 'RedHood'
    }
});
data.filter('books', function (book) { return book.price > 5 });
data.compute('author', function (author) { return author.firstname + author.lastname });
data.set('count', data.get('books').length);
data.get(); // -> {books: [{title: 'Book 2', price: 10}], author: 'RedHoodSu', count: 1}

LinkedList

source test

双向链表实现。

push

向链表尾部添加值。

参数名类型说明
val*要添加的值
返回值number链表大小

pop

获取链表尾部值。

unshift

向链表头部添加值。

shift

获取链表头部值。

forEach

遍历链表。

toArr

将链表转换成 JavaScript 数组。

var linkedList = new LinkedList();
linkedList.push(5);
linkedList.pop(); // -> 5

LocalStore

source test

LocalStorage 存储。

继承自 Store 类。

constructor

参数名类型说明
namestringLocalStorage 存储名
dataobject默认数据
var store = new LocalStore('licia');
store.set('name', 'licia');

Logger

source test demo

带日志级别的简单日志库。

constructor

参数名类型说明
namestring日志名称
level=DEBUGnumber日志级别

setLevel

设置日志级别。

参数名类型说明
levelnumber string日志级别

getLevel

获取当前日志级别。

trace,debug,info,warn,error

打日志方法。

日志级别

TRACE,DEBUG,INFO,WARN,ERROR 和 SILENT。

var logger = new Logger('licia', Logger.level.ERROR);
logger.trace('test');

// Format output.
logger.formatter = function (type, argList) {
    argList.push(new Date().getTime());

    return argList;
};

logger.on('all', function (type, argList) {
    // It's not affected by log level.
});

logger.on('debug', function (argList) {
    // Affected by log level.
});

MutationObserver

source test

MutationObserver 安全版本,如果不支持,则什么也不做。

var observer = new MutationObserver(function (mutations) {
    // Do something.
});
observer.observe(document.htmlElement);
observer.disconnect();

Promise

source test demo

轻量 Promise 实现。

Promises 标准

function get(url) {
    return new Promise(function (resolve, reject) {
        var req = new XMLHttpRequest();
        req.open('GET', url);
        req.onload = function () {
            req.status == 200 ? resolve(req.reponse) : reject(Error(req.statusText));
        };
        req.onerror = function () { reject(Error('Network Error')) };
        req.send();
    });
}

get('test.json').then(function (result) {
    // Do something...
});

PseudoMap

source test

类似 es6 的 Map,不支持遍历器。

只支持字符串键名,当 Map 存在时会直接使用 Map。

var map = new PseudoMap();
map.set('1', 1);
map.get('1'); // -> 1

Queue

source test

队列数据结构。

clear

清空队列。

enqueue

元素入列。

参数名类型说明
item*入列元素
返回值number当前大小

dequeue

元素出列。

peek

获取第一个元素但不移除它。

forEach

遍历队列。

参数名类型说明
iterateefunction调用函数
[ctx]*函数上下文

toArr

将队列转换为 JavaScript 数组。

var queue = new Queue();

console.log(queue.size); // -> 0
queue.enqueue(2);
queue.enqueue(3);
queue.dequeue(); // -> 2
console.log(queue.size); // -> 1
queue.peek(); // -> 3
console.log(queue.size); // -> 1

ReduceStore

source test

简单类 redux 状态管理。

constructor

参数名类型说明
reducerfunction生成下一个状态的函数
initialState*初始状态

subscribe

订阅状态改变事件。

参数名类型说明
listenerfunction回调函数
返回值function取消订阅函数

dispatch

发出动作。

参数名类型说明
actionobject描述改变内容的对象
返回值object传入对象

getState

获取当前状态。

var store = new ReduceStore(function (state, action) {
    switch (action.type) {
        case 'INCREMENT': return state + 1;
        case 'DECREMENT': return state - 1;
        default: return state;
    }
}, 0);

store.subscribe(function () {
    console.log(store.getState());
});

store.dispatch({type: 'INCREMENT'}); // 1
store.dispatch({type: 'INCREMENT'}); // 2
store.dispatch({type: 'DECREMENT'}); // 1

Select

source test

querySelectorAll 的简单包装类。

constructor

参数名类型说明
selectorstring选择器

find

查找子元素。

参数名类型说明
selectorstring选择器

each

遍历匹配的元素。

参数名类型说明
fnfunction调用函数
var $test = new Select('#test');
$test.find('.test').each(function (idx, element) {
    // Manipulate dom nodes
});

SessionStore

source test

SessionStorage 存储。

继承自 Store 类。

constructor

参数名类型说明
namestringSessionStorage 存储名
dataobject默认数据
var store = new SessionStore('licia');
store.set('name', 'licia');

Stack

source test

栈数据结构。

clear

清空栈。

push

元素入栈。

参数名类型说明
item*入栈元素
返回值number当前大小

pop

元素出栈。

peek

获取最后一个元素但不移除它。

forEach

遍历栈。

参数名类型说明
iterateefunction调用函数
[ctx]*函数上下文

toArr

将栈转换为 JavaScript 数组。

var stack = new Stack();

stack.push(2); // -> 1
stack.push(3); // -> 2
stack.pop(); // -> 3

State

source test

简单状态机。

继承自 Emitter 类。

constructor

参数名类型说明
initialstring初始状态
eventsstring改变状态的事件

is

检查当前状态是否是指定状态。

参数名类型说明
valuestring要检查的状态
返回值boolean如果是,返回真
var state = new State('empty', {
    load: {from: 'empty', to: 'pause'},
    play: {from: 'pause', to: 'play'},
    pause: {from: ['play', 'empty'], to: 'pause'},
    unload: {from: ['play', 'pause'], to: 'empty'}
});

state.is('empty'); // -> true
state.load();
state.is('pause'); // -> true
state.on('play', function (src) {
    console.log(src); // -> 'eustia'
});
state.on('error', function (err, event) {
    // Error handler
});
state.play('eustia');

Store

source test

内存存储。

继承自 Emitter 类。

constructor

参数名类型说明
dataobject初始数据

set

设置值。

参数名类型说明
keystring键名
val*键值

设置多个值。

参数名类型说明
valsobject包含多个键值对的对象

该方法被调用时发触发 change 事件。

get

获取值。

参数名类型说明
keystring键名
返回值*键值

获取多个值。

参数名类型说明
keysarray键名列表
返回值object包含多个键值对的对象

remove

移除值。

参数名类型说明
keystring array键名

clear

清空数据。

each

遍历数据。

参数名类型说明
fnfunction遍历函数
var store = new Store('test');
store.set('user', {name: 'licia'});
store.get('user').name; // -> 'licia'
store.clear();
store.each(function (val, key) {
    // Do something.
});
store.on('change', function (key, newVal, oldVal) {
    // It triggers whenever set is called.
});

Tween

source test demo

JavaScript 补间动画库。

继承自 Emitter 类。

constructor

参数名类型说明
objobject要补间的对象

to

参数名类型说明
destinationobj目标属性值
durationnumber补间时长
easestring function缓动函数

play

开始播放。

pause

暂停动画。

paused

检查动画是否暂停。

progress

设置或获取动画进度。

参数名类型说明
[progress]number介于 0 到 1 之间的数字
var pos = {x: 0, y: 0};

var tween = new Tween(pos);
tween.on('update', function (target) {
    console.log(target.x, target.y);
}).on('end', function (target) {
    console.log(target.x, target.y); // -> 100, 100
});
tween.to({x: 100, y: 100}, 1000, 'inElastic').play();

Url

source test

简单 url 操作库。

constructor

参数名类型说明
url=locationstringurl 地址

setQuery

设置 query 值。

参数名类型说明
namestringquery 名
valuestringquery 值
返回值Urlthis
参数名类型说明
namesobjectquery 对象
返回值Urlthis

rmQuery

移除 query 值。

参数名类型说明
namestring arrayquery 名
返回值Urlthis

parse

【静态】将 url 解析成对象。

参数名类型说明
urlstringurl 地址
返回值objecturl 对象

stringify

【静态】将 url 对象转换为 url 地址。

参数名类型说明
urlobjecturl 对象
返回值stringurl 地址

url 对象包含以下属性值:

属性名说明
protocol协议名,(如 http:)
slashes协议名后是否有双斜杠
auth身份验证(例如 用户名:密码)
hostnameHost 名,不带端口号
port端口号
pathnameURL 路径
queryquery 对象
hashURL # 字符后边的部分,# 包含在内
var url = new Url('http://example.com:8080?eruda=true');
console.log(url.port); // -> '8080'
url.query.foo = 'bar';
url.rmQuery('eruda');
utl.toString(); // -> 'http://example.com:8080/?foo=bar'

Validator

source test

对象属性值校验。

constructor

参数名类型说明
optionsobject校验配置

validate

校验对象。

参数名类型说明
objobject目标对象
返回值*校验结果,true 表示通过

addPlugin

【静态】添加插件。

参数名类型说明
namestring插件名
pluginfunction校验函数

默认插件

required,number,boolean,string 和 regexp。

Validator.addPlugin('custom', function (val, key, config) {
    if (typeof val === 'string' && val.length === 5) return true;

    return key + ' should be a string with length 5';
});
var validator = new Validator({
    'test': {
        required: true,
        custom: true
    }
});
validator.validate({}); // -> 'test is required'
validator.validate({test: 1}); // -> 'test should be a string with length 5';
validator.validate({test: 'licia'}); // -> true

abbrev

source test

计算字符串集的缩写集合。

参数名类型说明
...arrstring字符串集
返回值object缩写集合
abbrev('lina', 'luna');
// -> {li: 'lina', lin: 'lina', lina: 'lina', lu: 'luna', lun: 'luna', luna: 'luna'}

after

source test

创建一个函数,只有在调用 n 次后才会调用一次。

参数名类型说明
nnumber调用次数
fnfunction源函数
返回值function输出函数
var fn = after(5, function() {
    // -> Only invoke after fn is called 5 times.
});

ajax

source test

执行异步 HTTP 请求。

参数名类型说明
optionsobjectAjax 选项

可用选项:

参数名类型说明
urlstring请求地址
datastring object请求数据
dataType=jsonstring响应类型(json,xml)
contentType=application/x-www-form-urlencodedstring请求内容类型
successfunction成功回调
errorfunction失败回调
completefunction结束回调
timeoutnumber请求超时

get

type = GET 的快捷方式。

post

type = POST 的快捷方式。

参数名类型说明
urlstring请求地址
[data]string object请求数据
successfunction成功回调
dataTypefunction响应类型
ajax({
    url: 'http://example.com',
    data: {test: 'true'},
    error: function () {},
    success: function (data) {
        // ...
    },
    dataType: 'json'
});

ajax.get('http://example.com', {}, function (data) {
    // ...
});

allKeys

source test

获取对象的所有键名,包括自身的及继承的。

参数名类型说明
objobject目标对象
返回值array包含所有键名的数组

Object 对象原型上的方法不会被获取到。

var obj = Object.create({zero: 0});
obj.one = 1;
allKeys(obj) // -> ['zero', 'one']

arrToMap

source test

将字符串列表转换为映射。

参数名类型说明
arrarray字符串列表
val=true*键值
返回值object映射
var needPx = arrToMap([
    'column-count', 'columns', 'font-weight', 'line-weight', 'opacity', 'z-index', 'zoom'
]);

if (needPx[key]) val += 'px';

atob

source test

window.atob,运行在 node 环境时使用 Buffer 进行模拟。

atob('SGVsbG8gV29ybGQ='); // -> 'Hello World'

average

source test

获取数字的平均值。

参数名类型说明
...numnumber要计算的数字
返回值number平均值
average(5, 3, 1); // -> 3

base64

source test

base64 编解码。

encode

将字节数组编码为 base64 字符串。

参数名类型说明
arrarray字节数组
返回值stringbase64 编码的字符串

decode

将 base64 字符串解码为字节数组。

参数名类型说明
strstringbase64 编码的字符串
返回值array字节数组
base64.encode([168, 174, 155, 255]); // -> 'qK6b/w=='
base64.decode('qK6b/w=='); // -> [168, 174, 155, 255]

before

source test

创建一个函数,只能调用少于 n 次。

参数名类型说明
nnumber调用次数
fnfunction源函数
返回值function输出函数

超过 n 次后再次调用函数将直接返回最后一次函数的调用结果。

$(element).on('click', before(5, function() {}));
// -> allow function to be call 4 times at last.

bind

source test

创建一个绑定到指定对象的函数。

参数名类型说明
fnfunction源函数
ctx*绑定对象
[...rest]*可选参数
返回值function输出函数
var fn = bind(function (msg) {
    console.log(this.name + ':' + msg);
}, {name: 'eustia'}, 'I am a utility library.');
fn(); // -> 'eustia: I am a utility library.'

btoa

source test

window.btoa,运行在 node 环境时使用 Buffer 进行模拟。

btoa('Hello World'); // -> 'SGVsbG8gV29ybGQ='

bubbleSort

source test

冒泡排序实现。

参数名类型说明
arrarray要排序的数组
[cmp]function比较器
bubbleSort([2, 1]); // -> [1, 2]

bytesToStr

source test

将字节数组转换为字符串。

参数名类型说明
strarray字节数组
返回值string目标字符串
bytesToStr([108, 105, 99, 105, 97]); // -> 'licia'

callbackify

source test

将返回 Promise 的函数转换为使用回调的函数。

参数名类型说明
fnfunction返回 Promise 的函数
返回值function使用回调的函数
function fn() {
    return new Promise(function (resolve, reject) {
        // ...
    });
}

var cbFn = callbackify(fn);

cbFn(function (err, value) {
    // ...
});

camelCase

source test

将字符串转换为驼峰式。

参数名类型说明
strstring源字符串
返回值string驼峰式字符串
camelCase('foo-bar'); // -> fooBar
camelCase('foo bar'); // -> fooBar
camelCase('foo_bar'); // -> fooBar
camelCase('foo.bar'); // -> fooBar

capitalize

source test

将字符串的第一个字符转换为大写,其余字符转换为小写。

参数名类型说明
strstring源字符串
返回值string目标字符串
capitalize('rED'); // -> Red

castPath

source test

将值转换为属性路径数组。

参数名类型说明
str*要转换的值
[obj]object目标对象
返回值array属性路径数组
castPath('a.b.c'); // -> ['a', 'b', 'c']
castPath(['a']); // -> ['a']
castPath('a[0].b'); // -> ['a', '0', 'b']
castPath('a.b.c', {'a.b.c': true}); // -> ['a.b.c']

centerAlign

source test

字符串居中。

参数名类型说明
strstring array源字符串
[width]number每行宽度
返回值string居中字符串
centerAlign('test', 8); // -> '  test'
centerAlign('test\nlines', 8); // -> '  test\n lines'
centerAlign(['test', 'lines'], 8); // -> '  test\n lines'

char

source test

根据指定的整数返回 unicode 编码为该整数的字符。

参数名类型说明
numnumber要转换的整数
返回值string对应字符
char(65); // -> 'A'
char(97); // -> 'a'

chunk

source test

将数组拆分为指定长度的子数组。

参数名类型说明
arrarray目标数组
size=1number子数组的长度
chunk([1, 2, 3, 4], 2); // -> [[1, 2], [3, 4]]
chunk([1, 2, 3, 4], 3); // -> [[1, 2, 3], [4]]
chunk([1, 2, 3, 4]); // -> [[1], [2], [3], [4]]

clamp

source test

将数字限定于指定区间。

参数名类型说明
nnumber要处理的数字
[lower]number下限
uppernumber上限
返回值number限定后的数字
clamp(-10, -5, 5); // -> -5
clamp(10, -5, 5); // -> 5
clamp(2, -5, 5); // -> 2
clamp(10, 5); // -> 5
clamp(2, 5); // -> 2

className

source test

合并 class。

参数名类型说明
...classstring object array要合并的 class
返回值string合并后的 class 字符串
className('a', 'b', 'c'); // -> 'a b c'
className('a', false, 'b', 0, 1, 'c'); // -> 'a b 1 c'
className('a', ['b', 'c']); // -> 'a b c'
className('a', {b: false, c: true}); // -> 'a c'
className('a', ['b', 'c', {d: true, e: false}]); // -> 'a b c d';

clone

source test

对指定对象进行浅复制。

任何嵌套的对象或数组只会拷贝其引用。

参数名类型说明
val*要克隆的值
返回值*克隆值
clone({name: 'eustia'}); // -> {name: 'eustia'}

cloneDeep

source test

深复制。

参数名类型说明
val*要克隆的值
返回值*克隆值
var obj = [{a: 1}, {a: 2}];
var obj2 = cloneDeep(obj);
console.log(obj[0] === obj2[1]); // -> false

cmpVersion

source test

比较版本号。

参数名类型说明
v1string版本号
v2string版本号
返回值number比较结果
cmpVersion('1.1.8', '1.0.4'); // -> 1
cmpVersion('1.0.2', '1.0.2'); // -> 0
cmpVersion('2.0', '2.0.0'); // -> 0
cmpVersion('3.0.1', '3.0.0.2'); // -> 1
cmpVersion('1.1.1', '1.2.3'); // -> -1

combine

source test

创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值。

参数名类型说明
keysarray键名数组
valuesarray键值数组
返回值object目标对象
combine(['a', 'b', 'c'], [1, 2, 3]); -> {a: 1, b: 2, c: 3}

compact

source test

返回数组的拷贝并移除其中的虚值。

虚值包括 false,null,0,空字符串,undefined 和 NaN。

参数名类型说明
arrarray源数组
返回值array目标数组
compact([0, 1, false, 2, '', 3]); // -> [1, 2, 3]

compose

source test

将多个函数组合成一个函数。

每个函数使用下一个函数的返回值作为参数。

参数名类型说明
...fnfunction要组合的函数
返回值function目标函数
var welcome = compose(function (name) {
    return 'hi: ' + name;
}, function (name) {
    return name.toUpperCase() + '!';
});

welcome('licia'); // -> 'hi: LICIA!'

compressImg

source test demo

使用 canvas 对图像进行压缩。

参数名类型说明
fileFile Blob图片文件
optsobject选项
cbfunction回调

可用选项:

参数名类型说明
maxWidthnumber最大宽度
maxHeightnumber最大高度
widthnumber输出图片宽度
heightnumber输出图片高度
mineTypestringMine 类型
quality=0.8number图片质量,从 0 到 1

为了保持图片比例,当宽度设置时高度将被忽略。

如果设置了宽高,最大宽度跟最大高度将被忽略。

compressImg(file, {
    maxWidth: 200
}, function (err, file) {
    // ...
});

concat

source test

将多个数组合并成一个数组。

参数名类型说明
...arrarray要合并的数组
返回值array合并后的数组
concat([1, 2], [3], [4, 5]); // -> [1, 2, 3, 4, 5]

contain

source test

检查数组中是否有指定值。

参数名类型说明
arrayarray object数组
value*要检查的值
返回值boolean如果有,返回真
contain([1, 2, 3], 1); // -> true
contain({a: 1, b: 2}, 1); // -> true

convertBase

source test

对数字进行进制转换。

参数名类型说明
numnumber string要转换的数字
fromnumber源进制
tonumber目标进制
返回值string转换后的数字
convertBase('10', 2, 10); // -> '2'
convertBase('ff', 16, 2); // -> '11111111'

source test

浏览器 cookie 操作库。

get

获取 cookie 值。

参数名类型说明
keystringCookie 键名
返回值string对应的 cookie 值

set

设置 cookie 值。

参数名类型说明
keystringcookie 键名
valstringcookie 值
[options]objectcookie 选项
返回值exportscookie 模块

remove

移除 cookie 值。

参数名类型说明
keystringCookie 键名
[options]objectCookie 选项
返回值exportscookie 模块
cookie.set('a', '1', {path: '/'});
cookie.get('a'); // -> '1'
cookie.remove('a');

copy

source test demo

使用 document.execCommand 将文本拷贝到剪贴板。

参数名类型说明
textstring要拷贝的文本
[cb]function可选回调
copy('text', function (err) {
    // Handle errors.
});

createAssigner

source test

用于创建 extend,extendOwn 和 defaults 等模块。

参数名类型说明
keysFnfunction获取对象键名的函数
defaultsboolean设置为真时不对值进行覆盖
返回值function目标函数

createUrl

source test

CreateObjectURL 的包裹函数。

参数名类型说明
dataFile Blob string array数据
[opts]object当数据不是 File 或者 Blob 对象时使用
返回值stringBlob 地址
createUrl('test', {type: 'text/plain'}); // -> Blob url
createUrl(['test', 'test']);
createUrl(new Blob([]));
createUrl(new File(['test'], 'test.txt'));

cssSupports

source test

检查浏览器是否支持某项 CSS 特性。

参数名类型说明
namestringCss 属性名
[val]stringCss 属性值
返回值boolean如果支持,返回真
cssSupports('display', 'flex'); // -> true
cssSupports('display', 'invalid'); // -> false
cssSupports('text-decoration-line', 'underline'); // -> true
cssSupports('grid'); // -> true
cssSupports('invalid'); // -> false

curry

source test

函数柯里化。

参数名类型说明
fnfunction源函数
返回值function目标函数
var add = curry(function (a, b) { return a + b });
var add1 = add(1);
add1(2); // -> 3

dateFormat

source test

简单日期格式化。

参数名类型说明
date=new DateDate要格式化的日期对象
maskstring日期格式
utc=falseboolean是否是 UTC
gmt=falseboolean是否是 GMT
掩码说明
d月份天数,不补零
dd月份天数,不足两位补零
ddd星期几,简称
dddd星期几,全称
m月份,数字,不补零
mm月份,数字,不足两位补零
mmm月份,简称
mmmm月份,全称
yy年份,只显示后两位数字,不足两位补零
yyyy年份,显示四位数字
h小时,不补零 (12 小时制)
hh小时,不足两位补零(12 小时制)
H小时,不补零(24 小时制)
HH小时,不足两位补零(24 小时制)
M分钟,不补零
MM分钟,不足两位补零
s秒数,不补零
ss秒数,不足两位补零
l L毫秒,l 显示 3 位, L 显示 2 位
t小写显示上午下午,a 或 p
tt小写显示上午下午,am 或 pm
T大写显示上午下午,A 或 P
TT大写显示上午下午,AM 或 PM
Z美国时区缩写,比如 EST 或 MDT
oGMT/UTC 时区时差,比如 -0500 或 +0230
S月份天数序数后缀 (st,nd,rd,或 th)
UTC:是否是 UTC,必须写在最前面
dateFormat('isoDate'); // -> 2016-11-19
dateFormat('yyyy-mm-dd HH:MM:ss'); // -> 2016-11-19 19:00:04
dateFormat(new Date(), 'yyyy-mm-dd'); // -> 2016-11-19

debounce

source test

返回函数的防反跳版本。

参数名类型说明
fnfunction源函数
waitnumber延迟毫秒数
返回值function目标函数
$(window).resize(debounce(calLayout, 300));

debug

source test demo

简单的 JavaScript 输出 debug 日志函数。

参数名类型说明
namestring名称
返回值function打印格式化日志的函数
var d = debug('test');
d('doing lots of uninteresting work');
d.enabled = false;

decodeUriComponent

source test

类似 decodeURIComponent 函数,只是输入不合法时不抛出错误并尽可能地对其进行解码。

参数名类型说明
strstring要解码的字符串
返回值string解码后的字符串
decodeUriComponent('%%25%'); // -> '%%%'
decodeUriComponent('%E0%A4%A'); // -> '\xE0\xA4%A'

defaults

source test

填充对象的默认值。

参数名类型说明
objobject目标对象
...srcobject提供默认值对象
返回值object目标对象
defaults({name: 'RedHood'}, {name: 'Unknown', age: 24}); // -> {name: 'RedHood', age: 24}

define

source test

定义一个模块,需要跟 use 模块配合使用。

参数名类型说明
namestring模块名
[requires]array依赖
methodfunction模块主体函数

模块主体函数只有被 use 模块使用时才会被执行。

define('A', function () {
    return 'A';
});
define('B', ['A'], function (A) {
    return 'B' + A;
});

defineProp

source test

Object.defineProperty(defineProperties) 的快捷方式。

参数名类型说明
objobject要定义的对象
propstring属性路径
descriptorobject属性描述
返回值object传入对象
参数名类型说明
objobject要定义的对象
propobject属性描述
返回值object传入对象
var obj = {b: {c: 3}, d: 4, e: 5};
defineProp(obj, 'a', {
    get: function () {
        return this.e * 2;
    }
});
console.log(obj.a); // -> 10
defineProp(obj, 'b.c', {
    set: (function (val) {
        // this is pointed to obj.b
        this.e = val;
    }).bind(obj)
});
obj.b.c = 2;
console.log(obj.a); // -> 4;

obj = {a: 1, b: 2, c: 3};
defineProp(obj, {
    a: {
        get: function () {
            return this.c;
        }
    },
    b: {
        set: function (val) {
            this.c = val / 2;
        }
    }
});
console.log(obj.a); // -> 3
obj.b = 4;
console.log(obj.a); // -> 2

delay

source test

在指定时长后执行函数。

参数名类型说明
fnfunction源函数
waitnumber延迟的毫秒数
[...args]*绑定参数
delay(function (text) {
    console.log(text);
}, 1000, 'later');
// -> Logs 'later' after one second

delegate

source test

事件委托。

add

添加事件委托。

参数名类型说明
elelement父元素
typestring事件类型
selectorstring匹配选择器
cbfunction事件回调

remove

移除事件委托。

var container = document.getElementById('container');
function clickHandler() {
    // Do something...
}
delegate.add(container, 'click', '.children', clickHandler);
delegate.remove(container, 'click', '.children', clickHandler);

detectBrowser

source test

使用 ua 检测浏览器信息。

参数名类型说明
ua=navigator.userAgentstring浏览器用户代理
返回值object包含名称和版本的对象

支持浏览器:ie,chrome,edge,firefox,opera,safari,ios(mobile safari),android(android browser)

var browser = detectBrowser();
if (browser.name === 'ie' && browser.version < 9) {
    // Do something about old IE...
}

detectMocha

source test

检测是否有 mocha 测试框架在运行。

detectMocha(); // -> True if mocha is running.

detectOs

source test

使用 ua 检测操作系统。

参数名类型说明
ua=navigator.userAgentstring浏览器用户代理
返回值string操作系统名称

支持操作系统: windows, os x, linux, ios, android, windows phone

if (detectOs() === 'ios') {
    // Do something about ios...
}

difference

source test

创建一个数组,该数组的元素不存在于给定的其它数组中。

参数名类型说明
arrarray源数组
[...rest]array要排除的元素
返回值array目标数组
difference([3, 2, 1], [4, 2]); // -> [3, 1]

dotCase

source test

将字符串转换为点式。

参数名类型说明
strstring源字符串
返回值string点式字符串
dotCase('fooBar'); // -> foo.bar
dotCase('foo bar'); // -> foo.bar

download

source test demo

在浏览器端触发文件下载。

参数名类型说明
dataBlob File string array下载的数据
namestring文件名
type=text/plainstring数据类型
download('test', 'test.txt');

each

source test benchmark

遍历集合中的所有元素,用每个元素当做参数调用迭代器。

参数名类型说明
objobject array目标集合
iteratorfunction迭代器
[ctx]*函数上下文
each({'a': 1, 'b': 2}, function (val, key) {});

easing

source test

缓动函数,参考 http://jqueryui.com/

参数名类型说明
percentnumber位于 0 到 1 之前的数字
返回值number计算结果
easing.linear(0.5); // -> 0.5
easing.inElastic(0.5, 500); // -> 0.03125

endWith

source test

检查字符串是否以指定字符串结尾。

参数名类型说明
strstring目标字符串
suffixstring字符串后缀
返回值boolean如果是后缀,返回真
endWith('ab', 'b'); // -> true

escape

source test

转义 HTML 字符串,替换 &,<,>,",`,和 ' 字符。

参数名类型说明
strstring源字符串
返回值string目标字符串
escape('You & Me'); -> // -> 'You &amp; Me'

escapeJsStr

source test

转义字符串为合法的 JavaScript 字符串字面量。

http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4

参数名类型说明
strstring源字符串
返回值string目标字符串
escapeJsStr('\"\n'); // -> '\\"\\\\n'

escapeRegExp

source test

转义特殊字符用于 RegExp 构造函数。

参数名类型说明
strstring源字符串
返回值string目标字符串
escapeRegExp('[licia]'); // -> '\\[licia\\]'

evalCss

source test

加载 css 到页面中。

参数名类型说明
cssstringcss 代码
evalCss('body{background:#08c}');

evalJs

source test benchmark

在指定的上下文执行 js 代码。

参数名类型说明
jsstringJavaScript 代码
ctx=globalobject上下文
evalJs('5+2'); // -> 7
evalJs('this.a', {a: 2}); // -> 2

every

source test

检查是否集合中的所有元素都能通过 predicate 的真值检测。

参数名类型说明
objarray object目标集合
predicatefunction真值检测函数
ctx*函数上下文
返回值boolean如果都能通过,返回真
every([2, 4], function (val) {
    return val % 2 === 0;
}); // -> false

extend

source test

复制多个对象中的所有属性到目标对象上。

参数名类型说明
objobject目标对象
...srcobject源对象
返回值object目标对象
extend({name: 'RedHood'}, {age: 24}); // -> {name: 'RedHood', age: 24}

extendDeep

source test

类似 extend,但会递归进行扩展。

参数名类型说明
objobject目标对象
...srcobject源对象
返回值object目标对象
extendDeep({
    name: 'RedHood',
    family: {
        mother: 'Jane',
        father: 'Jack'
    }
}, {
    family: {
        brother: 'Bruce'
    }
});
// -> {name: 'RedHood', family: {mother: 'Jane', father: 'Jack', brother: 'Bruce'}}

extendOwn

source test

类似 extend,但只复制自己的属性,不包括原型链上的属性。

参数名类型说明
objobject目标对象
*srcobject源对象
返回值object目标对象
extendOwn({name: 'RedHood'}, {age: 24}); // -> {name: 'RedHood', age: 24}

extractBlockCmts

source test

从源码中提取块注释。

参数名类型说明
strstring源码
返回值array块注释
extractBlockCmts('\/*licia*\/'); // -> ['licia']

extractUrls

source test

从文本中提取 url。

参数名类型说明
strstring文本
返回值arrayurl 列表
var str = '[Official site: http://eustia.liriliri.io](http://eustia.liriliri.io)';
extractUrl(str); // -> ['http://eustia.liriliri.io']

fetch

source test

将 XMLHttpRequest 转换为 promise 的形式。

注意:这并不是 fetch 的 pollyfill。

参数名类型说明
urlstring请求地址
optionsobject请求选项
返回值Promise请求 promise
fetch('test.json', {
    method: 'GET',
    timeout: 3000,
    headers: {},
    body: ''
}).then(function (res) {
    return res.json();
}).then(function (data) {
    console.log(data);
});

fibonacci

source test

计算斐波那契数列中某位数字。

参数名类型说明
nnumber序号 n
返回值number斐波那契数列 n 位的数字
fibonacci(1); // -> 1
fibonacci(3); // -> 2

fileSize

source test

将字节数转换为易于阅读的形式。

参数名类型说明
bytesnumber文件字节大小
返回值string易于阅读的文件大小
fileSize(5); // -> '5'
fileSize(1500); // -> '1.46K'
fileSize(1500000); // -> '1.43M'
fileSize(1500000000); // -> '1.4G'
fileSize(1500000000000); // -> '1.36T'

fill

source test

在数组指定位置填充指定值。

参数名类型说明
arrarray源数组
val*填充数组的值
start=0number起始位置
end=arr.lengthnumber结束位置,不包括
返回值array目标数组
fill([1, 2, 3], '*'); // -> ['*', '*', '*']
fill([1, 2, 3], '*', 1, 2); // -> [1, '*', 3]

filter

source test

遍历集合中的每个元素,返回所有通过真值检测的元素组成的数组。

参数名类型说明
objarray要遍历的集合
predicatefunction真值检测函数
[ctx]*函数上下文
返回值array包含所有通过真值检测元素的数组
filter([1, 2, 3, 4, 5], function (val) {
    return val % 2 === 0;
}); // -> [2, 4]

find

source test

找到集合中第一个通过真值检测的元素。

参数名类型说明
objarray object目标集合
predicatefunction真值检测函数
[ctx]*函数上下文
返回值*第一个通过的元素
find([{
    name: 'john',
    age: 24
}, {
    name: 'jane',
    age: 23
}], function (val) {
    return val.age === 23;
}); // -> {name: 'jane', age: 23}

findIdx

source test

返回第一个通过真值检测元素在数组中的位置。

参数名类型说明
arrarray目标集合
predicatefunction真值检测函数
返回值number第一个符合条件元素的位置
findIdx([{
    name: 'john',
    age: 24
}, {
    name: 'jane',
    age: 23
}], function (val) {
    return val.age === 23;
}); // -> 1

findKey

source test

返回对象中第一个通过真值检测的属性键名。

参数名类型说明
objobject目标对象
predicatefunction真值检测函数
[ctx]*函数上下文
返回值string符合条件的键名
findKey({a: 1, b: 2}, function (val) {
    return val === 1;
}); // -> a

findLastIdx

source test

同 findIdx,只是查找顺序改为从后往前。

参数名类型说明
arrarray目标集合
predicatefunction真值检测函数
返回值number从后往前,第一个符合条件元素的位置
findLastIdx([{
    name: 'john',
    age: 24
}, {
    name: 'jane',
    age: 23
}, {
    name: 'kitty',
    age: 24
}], function (val) {
    return val.age === 24;
}); // -> 2

flatten

source test

递归拍平数组。

参数名类型说明
arrarray源数组
返回值array目标数组
flatten(['a', ['b', ['c']], 'd', ['e']]); // -> ['a', 'b', 'c', 'd', 'e']

fnParams

source test

获取函数的参数名列表。

参数名类型说明
fnfunction目标函数
返回值array参数名
fnParams(function (a, b) {}); // -> ['a', 'b']

format

source test

使用类似于 printf 的方式来格式化字符串。

参数名类型说明
strstring源字符串
...values*替换占位符的值
返回值string目标字符串

格式占位符

占位符说明
%s字符串
%d, %i整数
%f浮点数
%o对象
format('%s_%s', 'foo', 'bar'); // -> 'foo bar'

fraction

source test

转换数字为分数形式。

参数名类型说明
numnumber数字
返回值string对应的分数
fraction(1.2); // -> '6/5'

freeze

source test

Object.freeze 的快捷方式。

如果不支持 Object.freeze,使用 Object.defineProperties 进行模拟。

参数名类型说明
objobject目标对象
返回值object目标对象
var a = {b: 1};
freeze(a);
a.b = 2;
console.log(a); // -> {b: 1}

freezeDeep

source test

递归进行 Object.freeze。

参数名类型说明
objobject目标对象
返回值object目标对象
var a = {b: {c: 1}};
freezeDeep(a);
a.b.c = 2;
console.log(a); // -> {b: {c: 1}}

fs

source test

node.js fs 模块的 promise 版本。

fs.readFile('test.js').then(function (data) {
    // Do something
}).catch(function (err) {
    // Handle errors
});

gcd

source test

使用欧几里德算法求最大公约数。

参数名类型说明
anumber要计算的数字
bnumber要计算的数字
返回值number最大公约数
gcd(121, 44); // -> 11

getPort

source test

获取有效的 TCP 端口。

参数名类型说明
[port]number array首选端口
返回值Promise有效端口

如果首选端口无法使用,将会返回一个有效的随机端口。

getPort([3000, 3001]).then(port => {
    console.log(port);
});

getUrlParam

source test

获取 url 参数值。

参数名类型说明
namestring参数名
url=locationstring目标 url
返回值string参数值
getUrlParam('test', 'http://example.com/?test=true'); // -> 'true'

has

source test

检查属性是否是对象自身的属性(原型链上的不算)。

参数名类型说明
objobject目标对象
keystring键名
返回值boolean如果是自身的属性,返回真
has({one: 1}, 'one'); // -> true

hotkey

source test demo

监听键盘触发对应的事件。

on

注册键盘按键监听器。

参数名类型说明
keystring按键
listenerfunction监听器

off

注销监听器。

hotkey.on('k', function () {
    console.log('k is pressed');
});
function keyDown() {}
hotkey.on('shift+a, shift+b', keyDown);
hotkey.off('shift+a', keyDown);

hslToRgb

source test

将 hsl 格式的颜色值转换为 rgb 格式。

参数名类型说明
hslarrayhsl 值
返回值arrayrgb 值
hslToRgb([165, 59, 50, 0.8]); // -> [52, 203, 165, 0.8]

identity

source test

返回传入的第一个参数。

参数名类型说明
val*任何值
返回值*第一个参数
identity('a'); // -> 'a'

idxOf

source test

返回指定值第一次在数组中出现的位置。

参数名类型说明
arrarray目标数组
val*要查找的值
fromIdx=0number查找起始位置
返回值number第一次出现的位置,如果没有,返回 -1
idxOf([1, 2, 1, 2], 2, 2); // -> 3

indent

source test

对文本的每一行进行缩进处理。

参数名类型说明
strstring源字符串
[char]string缩进字符
[len]number缩进长度
返回值string目标字符串
indent('foo\nbar', ' ', 4); // -> 'foo\n    bar'

inherits

source test

使构造函数继承另一个构造函数原型链上的方法。

参数名类型说明
Classfunction子类
SuperClassfunction父类
function People(name) {
    this._name = name;
}
People.prototype = {
    getName: function () {
        return this._name;
    }
};
function Student(name) {
    this._name = name;
}
inherits(Student, People);
var s = new Student('RedHood');
s.getName(); // -> 'RedHood'

insertionSort

source test

插入排序实现。

参数名类型说明
arrarray要排序的数组
[cmp]function比较器
insertionSort([2, 1]); // -> [1, 2]

intersect

source test

计算所有数组的交集。

参数名类型说明
...arrarray源数组
返回值array交集
intersect([1, 2, 3, 4], [2, 1, 10], [2, 1]); // -> [1, 2]

intersectRange

source test

计算两个区间的交集。

参数名类型说明
aobject区间 a
bobject区间 b
返回值object如果存在区间交集,返回它
intersectRange({start: 0, end: 12}, {start: 11, end: 13});
// -> {start: 11, end: 12}
intersectRange({start: 0, end: 5}, {start: 6, end: 7});
// -> undefined

invert

source test

生成一个新对象,该对象的键名和键值进行调换。

参数名类型说明
objobject源对象
返回值object目标对象

如果对象存在重复的键值,后面的值会覆盖前面的值。

invert({a: 'b', c: 'd', e: 'f'}); // -> {b: 'a', d: 'c', f: 'e'}

isAbsoluteUrl

source test

检查 url 是否是绝对地址。

参数名类型说明
urlstring目标 url
返回值boolean如果是绝对地址,返回真
isAbsoluteUrl('http://www.surunzi.com'); // -> true
isAbsoluteUrl('//www.surunzi.com'); // -> false
isAbsoluteUrl('surunzi.com'); // -> false

isArgs

source test

检查值是否是参数类型。

参数名类型说明
val*要检查的值
返回值boolean如果是参数类型,返回真
(function () {
    isArgs(arguments); // -> true
})();

isArr

source test

检查值是否是数组类型。

参数名类型说明
val*要检查的值
返回值boolean如果是数组类型,返回真
isArr([]); // -> true
isArr({}); // -> false

isArrBuffer

source test

检查值是否是 ArrayBuffer 类型。

参数名类型说明
val*要检查的值
返回值boolean如果是 ArrayBuffer 类型,返回真
isArrBuffer(new ArrayBuffer(8)); // -> true

isArrLike

source test

检查值是否是类数组对象。

参数名类型说明
val*要检查的值
返回值boolean如果是类数组对象,返回真

对于函数,返回假。

isArrLike('test'); // -> true
isArrLike(document.body.children); // -> true;
isArrLike([1, 2, 3]); // -> true

isBlob

source test

检查值是否是 Blob 类型。

参数名类型说明
val*要检查的值
返回值boolean如果是 Blob 类型,返回真
isBlob(new Blob([])); // -> true;
isBlob([]); // -> false

isBool

source test

检查值是否是布尔类型。

参数名类型说明
val*要检查的值
返回值boolean如果是布尔类型,返回真
isBool(true); // -> true
isBool(false); // -> true
isBool(1); // -> false

isBrowser

source test

检测是否运行于浏览器环境。

console.log(isBrowser); // -> true if running in a browser

isBuffer

source test

检查值是否是 Buffer 类型。

参数名类型说明
val*要检查的值
返回值boolean如果是 Buffer 类型,返回真
isBuffer(new Buffer(4)); // -> true

isClose

source test

检查两个数字是否近似相等。

abs(a-b) <= max(relTol * max(abs(a), abs(b)), absTol)

参数名类型说明
anumber要比较的数字
bnumber要比较的数字
relTol=1e-9number相对误差
absTol=0number绝对误差
返回值boolean如果近似相等,返回真
isClose(1, 1.0000000001); // -> true
isClose(1, 2); // -> false
isClose(1, 1.2, 0.3); // -> true
isClose(1, 1.2, 0.1, 0.3); // -> true

isDataUrl

source test

检查字符串是否是有效的 Data Url。

参数名类型说明
strstring要检查的字符串
返回值boolean如果是有效的 Data Url,返回真
isDataUrl('http://eustia.liriliri.io'); // -> false
isDataUrl('data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D'); // -> true

isDate

source test

检查值是否是 Date 类型。

参数名类型说明
val*要检查的值
返回值boolean如果是 Date 类型,返回真
isDate(new Date()); // -> true

isEl

source test

检查值是否是 DOM 元素。

参数名类型说明
val*要检查的值
返回值boolean如果是 DOM 元素,返回真
isEl(document.body); // -> true

isEmail

source test

简单检查值是否是合法的邮件地址。

参数名类型说明
valstring要检查的值
返回值boolean如果是合法的邮件地址,返回真
isEmail('surunzi@foxmail.com'); // -> true

isEmpty

source test

检查值是否是空对象或空数组。

参数名类型说明
val*要检查的值
返回值boolean如果为空,返回真
isEmpty([]); // -> true
isEmpty({}); // -> true
isEmpty(''); // -> true

isEqual

source test

对两个对象进行深度比较,如果相等,返回真。

参数名类型说明
val*要比较的对象
other*要比较的对象
返回值boolean如果相等,返回真
isEqual([1, 2, 3], [1, 2, 3]); // -> true

isErr

source test

检查值是否是 Error 类型。

参数名类型说明
val*要检查的值
返回值boolean如果是 Error 类型,返回真
isErr(new Error()); // -> true

isEven

source test

检查数字是否是偶数。

参数名类型说明
numnumber要检查的数字
返回值boolean如果是偶数,返回真
isOdd(0); // -> true
isOdd(1); // -> false
isOdd(2); // -> true

isFile

source test

检查值是否是 File 类型。

参数名类型说明
val*要检查的值
返回值boolean如果是 File 类型,返回真
isFile(new File(['test'], "test.txt", {type: "text/plain"})); // -> true

isFinite

source test

检查值是否是有限数字。

参数名类型说明
val*要检查的值
返回值boolean如果是有限数字,返回真
isFinite(3); // -> true
isFinite(Infinity); // -> false

isFn

source test

检查值是否是函数。

参数名类型说明
val*要检查的值
返回值boolean如果是函数,返回真

Generator 函数返回真。

isFn(function() {}); // -> true
isFn(function*() {}); // -> true

isGeneratorFn

source test

检查值是否是 Generator 函数。

参数名类型说明
val*要检查的值
返回值boolean如果是 Generator 函数,返回真
isGeneratorFn(function * () {}); // -> true;
isGeneratorFn(function () {}); // -> false;

isInt

source test

检查值是否是整数。

参数名类型说明
val*要检查的值
返回值boolean如果是整数,返回真
isInt(5); // -> true
isInt(5.1); // -> false
isInt({}); // -> false

isJson

source test

检查值是否是有效的 JSON。

该模块使用 JSON.parse()try... catch 进行检测。

参数名类型说明
valstringJSON 字符串
返回值boolean如果是有效的 JSON,返回真
isJson('{"a": 5}'); // -> true
isJson("{'a': 5}"); // -> false

isLeapYear

source test

检查年份是否是闰年。

参数名类型说明
yearnumber要检查的年份
返回值boolean如果是闰年,返回真
isLeapYear(2000); // -> true
isLeapYear(2002); // -> false

isMap

source test

检查值是否是 Map 对象。

参数名类型说明
val*要检查的值
返回值boolean如果是 Map 类型,返回真
isMap(new Map()); // -> true
isMap(new WeakMap()); // -> false

isMatch

source test

检查对象所有键名和键值是否在指定的对象中。

参数名类型说明
objobject目标对象
srcobject进行匹配的对象
返回值boolean如果匹配,返回真
isMatch({a: 1, b: 2}, {a: 1}); // -> true

isMiniProgram

source test

检测是否运行于微信小程序环境中。

console.log(isMiniProgram); // -> true if running in mini program.

isMobile

source test

使用 ua 检测是否运行于移动端浏览器。

参数名类型说明
ua=navigator.userAgentstring浏览器用户代理
返回值boolean如果是移动端浏览器,返回真
isMobile(navigator.userAgent);

isNaN

source test

检测值是否是 NaN。

参数名类型说明
val*要检查的值
返回值boolean如果是 NaN,返回真

跟全局 isNaN 不同的是,Undefined 不是 NaN。

isNaN(0); // -> false
isNaN(NaN); // -> true

isNative

source test

检查值是否是原生函数。

参数名类型说明
val*要检查的值
返回值boolean如果是原生函数,返回真
isNative(function () {}); // -> false
isNative(Math.min); // -> true

isNil

source test

检查值是否是 null 或 undefined,等价于 value == null。

参数名类型说明
val*要检查的值
返回值boolean如果是 null 或 undefined,返回真
isNil(null); // -> true
isNil(void 0); // -> true
isNil(undefined); // -> true
isNil(false); // -> false
isNil(0); // -> false
isNil([]); // -> false

isNode

source test

检测是否运行于 node 环境中。

console.log(isNode); // -> true if running in node

isNull

source test

检查值是否是 Null 类型。

参数名类型说明
val*要检查的值
返回值boolean如果是 Null 类型,返回真
isNull(null); // -> true

isNum

source test

检测值是否是数字类型。

参数名类型说明
val*要检查的值
返回值boolean如果是数字,返回真
isNum(5); // -> true
isNum(5.1); // -> true
isNum({}); // -> false

isNumeric

source test

检查值是否是数字,包括数字字符串。

参数名类型说明
val*要检查的值
返回值boolean如果是数字,返回真
isNumeric(1); // -> true
isNumeric('1'); // -> true
isNumeric(Number.MAX_VALUE); // -> true
isNumeric(0144); // -> true
isNumeric(0xFF); // -> true
isNumeric(''); // -> false
isNumeric('1.1.1'); // -> false
isNumeric(NaN); // -> false

isObj

source test

检查值是否是对象。

参数名类型说明
val*要检查的值
返回值boolean如果是对象,返回真

标准定义

isObj({}); // -> true
isObj([]); // -> true

isOdd

source test

检查数字是否是奇数。

参数名类型说明
numnumber要检查的数字
返回值boolean如果是奇数,返回真
isOdd(0); // -> false
isOdd(1); // -> true
isOdd(2); // -> false

isPlainObj

source test

检查值是否是用 Object 构造函数创建的对象。

参数名类型说明
val*要检查的值
返回值boolean如果是 plain object,返回真
isPlainObj({}); // -> true
isPlainObj([]); // -> false
isPlainObj(function () {}); // -> false

isPrime

source test

检查整数是否是质数。

参数名类型说明
numnumber要检查的数字
返回值boolean如果是质数,返回真
isPrime(11); // -> true
isPrime(8); // -> false

isPrimitive

source test

检测值是否是字符串,数字,布尔值或 null。

参数名类型说明
val*要检查的值
返回值boolean如果是原始类型,返回真
isPrimitive(5); // -> true
isPrimitive('abc'); // -> true
isPrimitive(false); // -> true

isPromise

source test

检查值是否是类 promise 对象。

参数名类型说明
val*要检查的值
返回值boolean如果是类 promise 对象,返回真
isPromise(new Promise(function () {})); // -> true
isPromise({}); // -> false

isRegExp

source test

检查值是否是正则类型。

参数名类型说明
val*要检查的值
返回值boolean如果是正则类型,返回真
isRegExp(/a/); // -> true

isRelative

source test

检查路径是否是相对路径。

参数名类型说明
pathstring要检查的路径
返回值boolean如果是相对路径,返回真
isRelative('README.md'); // -> true

isRetina

source test

判断是否运行在 retina 屏幕的设备上。

console.log(isRetina); // -> true if high DPR

isSet

source test

检查值是否是 Set 类型。

参数名类型说明
val*要检查的值
返回值boolean如果是 Set 类型,返回真
isSet(new Set()); // -> true
isSet(new WeakSet()); // -> false

isSorted

source test

检查数组是否有序。

参数名类型说明
arrarray目标数组
[cmp]function比较器
isSorted([1, 2, 3]); // -> true
isSorted([3, 2, 1]); // -> false

isStr

source test

检查值是否是字符串。

参数名类型说明
val*要检查的值
返回值boolean如果是字符串,返回真
isStr('licia'); // -> true

isStream

source test

检查值是否是 Node.js Stream 类型。

参数名类型说明
val*要检查的值
返回值boolean如果是 Node.js Stream 类型,返回真
var stream = require('stream');

isStream(new stream.Stream()); // -> true

isTypedArr

source test

检查值是否 TypedArray 类型。

参数名类型说明
val*要检查的值
返回值boolean如果值是 TypedArray 类型,返回真
isTypedArr([]); // -> false
isTypedArr(new Unit8Array); // -> true

isUndef

source test

检查值是否是 undefined。

参数名类型说明
val*要检查的值
返回值boolean如果是 undefined,返回真
isUndef(void 0); // -> true
isUndef(null); // -> false

isUrl

source test

简单检查值是否是有效的 url 地址。

参数名类型说明
valstring要检查的值
返回值boolean如果是有效的 url 地址,返回真
isUrl('http://www.example.com?foo=bar&param=test'); // -> true

isWeakMap

source test

检查值是否是 WeakMap 类型。

参数名类型说明
val*要检查的值
返回值boolean如果是 WeakMap 类型,返回真
isWeakMap(new Map()); // -> false
isWeakMap(new WeakMap()); // -> true

isWeakSet

source test

检查值是否是 WeakSet 类型。

参数名类型说明
val*要检查的值
返回值boolean如果是 WeakSet 类型,返回真
isWeakSet(new Set()); // -> false
isWeakSet(new WeakSet()); // -> true

isWindows

source test

检测是否运行在 windows 操作系统上。

console.log(isWindows); // -> true if running on windows

jsonp

source test

简单 jsonp 实现。

参数名类型说明
optsobjectjsonp 选项

可用选项:

参数名类型说明
urlstring请求地址
dataobject请求数据
successfunction成功回调
param=callbackstring回调参数名
[name]string回调函数名
errorfunction失败回调
completefunction结束回调
timeoutnumber请求超时
jsonp({
    url: 'http://example.com',
    data: {test: 'true'},
    success: function (data) {
        // ...
    }
});

kebabCase

source test

将字符串转换为短横线式。

参数名类型说明
strstring源字符串
返回值string短横线式字符串
kebabCase('fooBar'); // -> foo-bar
kebabCase('foo bar'); // -> foo-bar
kebabCase('foo_bar'); // -> foo-bar
kebabCase('foo.bar'); // -> foo-bar

keyCode

source test

键码键名转换。

获取键码对应的键名。

参数名类型说明
codenumber键码
返回值string对应的键名

获取键名对应的键码。

参数名类型说明
namestring键名
返回值number对应的键码
keyCode(13); // -> 'enter'
keyCode('enter'); // -> 13

keys

source test

返回包含对象自身可遍历所有键名的数组。

参数名类型说明
objobject目标对象
返回值array所有键名
keys({a: 1}); // -> ['a']

last

source test

获取数组的最后一个元素。

参数名类型说明
arrarray目标数组
返回值*数组的最后一个元素
last([1, 2]); // -> 2

lazyRequire

source test

模块懒加载。

var r = lazyRequire(require);

var _ = r('underscore');

// underscore is required only when _ is called.
_().isNumber(5);

linkify

source test

将文本中的 url 地址转换为超链接。

参数名类型说明
strstring源字符串
[hyperlink]function转换超链接函数
返回值string目标字符串
var str = 'Official site: http://eustia.liriliri.io'
linkify(str); // -> 'Official site: <a href="http://eustia.liriliri.io">http://eustia.liriliri.io</a>'
linkify(str, function (url) {
    return '<a href="' + url + '" target="_blank">' + url + '</a>';
});

loadCss

source test

往页面插入样式链接。

参数名类型说明
srcstring样式文件地址
cbfunction加载完回调
loadCss('style.css', function (isLoaded) {
    // Do something...
});

loadImg

source test

加载指定地址的图片。

参数名类型说明
srcstring图片地址
[cb]function加载完回调
loadImg('http://eustia.liriliri.io/img.jpg', function (err, img) {
    console.log(img.width, img.height);
});

loadJs

source test

往页面插入脚本链接。

参数名类型说明
srcstring脚本地址
cbfunction加载完回调
loadJs('main.js', function (isLoaded) {
    // Do something...
});

longest

source test

获取数组中最长的一项。

参数名类型说明
arrarray目标数组
返回值*最长的一项
longest(['a', 'abcde', 'abc']); // -> 'abcde'

lowerCase

source test

转换字符串为小写。

参数名类型说明
strstring源字符串
返回值string目标字符串
lowerCase('TEST'); // -> 'test'

lpad

source test

对字符串进行左填充。

参数名类型说明
strstring源字符串
lennumber填充长度
[chars]string填充字符串
返回值string目标字符串
lpad('a', 5); // -> '    a'
lpad('a', 5, '-'); // -> '----a'
lpad('abc', 3, '-'); // -> 'abc'
lpad('abc', 5, 'ab'); // -> 'ababc'

ltrim

source test

删除字符串头部指定字符或空格。

参数名类型说明
strstring源字符串
charsstring array删除字符
返回值string目标字符串
ltrim(' abc  '); // -> 'abc  '
ltrim('_abc_', '_'); // -> 'abc_'
ltrim('_abc_', ['a', '_']); // -> 'bc_'

map

source test

对集合的每个元素调用转换函数生成与之对应的数组。

参数名类型说明
objarray object源集合
iterateefunction转换函数
[ctx]*函数上下文
返回值array目标集合
map([4, 8], function (n) { return n * n; }); // -> [16, 64]

mapObj

source test

类似 map,但针对对象,生成一个新对象。

参数名类型说明
objobject源对象
iterateefunction转换函数
[ctx]*函数上下文
返回值object目标对象
mapObj({a: 1, b: 2}, function (val, key) { return val + 1 }); // -> {a: 2, b: 3}

matcher

source test

传入对象返回函数,如果传入参数中包含该对象则返回真。

参数名类型说明
attrsobject要匹配的对象
返回值function真值检测函数
var objects = [
    {a: 1, b: 2, c: 3 },
    {a: 4, b: 5, c: 6 }
];
filter(objects, matcher({a: 4, c: 6 })); // -> [{a: 4, b: 5, c: 6 }]

max

source test

获取数字中的最大值。

参数名类型说明
...numnumber要计算的数字
返回值number最大值
max(2.3, 1, 4.5, 2); // 4.5

md5

source test

MD5 算法实现。

参数名类型说明
msgstring密文
返回值stringMD5 摘要
md5('licia'); // -> 'e59f337d85e9a467f1783fab282a41d0'

memStorage

source test

Web Storage 接口的纯内存实现。

当 localStorage 或者 sessionStorage 无法使用时可以使用其作为替代。

var localStorage = window.localStorage || memStorage;
localStorage.setItem('test', 'licia');

memoize

source test

缓存函数计算结果。

参数名类型说明
fnfunction源函数
[hashFn]function计算缓存键名函数
返回值function目标函数
var fibonacci = memoize(function(n) {
    return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
});

mergeSort

source test

归并排序实现。

注意:它不改变原数组。

参数名类型说明
arrarray要排序的数组
[cmp]function比较器
mergeSort([2, 1]); // -> [1, 2]

meta

source test

meta 操作库,将 name 和 content 属性值转换为键值对。

获取指定 meta 值。如果忽略 meta 名,所有的 meta 键值对都被返回。

参数名类型说明
[name]string arraymeta 名
返回值stringmeta 值

设置 meta 值。

参数名类型说明
namestringmeta 名
contentstringmeta 值
参数名类型说明
metasobject包含所有 meta 键值对的对象

remove

移除指定 meta。

参数名类型说明
namestring arraymeta 名
// <meta name="a" content="1"/> <meta name="b" content="2"/> <meta name="c" content="3"/>
meta(); // -> {a: '1', b: '2', c: '3'}
meta('a'); // -> '1'
meta(['a', 'c']); // -> {a: '1', c: '3'}
meta('d', '4');
meta({
    d: '5',
    e: '6',
    f: '7'
});
meta.remove('d');
meta.remove(['e', 'f']);

methods

source test

获取对象中所有方法名。

参数名类型说明
objobject目标对象
返回值array方法名列表
methods(console); // -> ['Console', 'assert', 'dir', ...]

min

source test

获取数字中的最小值。

参数名类型说明
...numnumber要计算的数字
返回值number最小值
min(2.3, 1, 4.5, 2); // 1

mkdir

source test

递归地创建文件夹。

参数名类型说明
dirstring文件夹路径
mode=0777number文件夹模式
[callback]function回调
mkdir('/tmp/foo/bar/baz', function (err) {
    if (err) console.log(err);
    else console.log('Done');
});

moment

source test

简单的类 moment.js 实现。

它只支持一小部分的 moment.js api。

可用方法

format,isValid,isLeapYear,isSame,isBefore,isAfter,year, month,date,hour,minute,second,millisecond,unix,clone, toDate,toArray,toJSON,toISOString,toObject,toString,set, startOf,endOf,add,subtract,diff

不支持特性

时区以及 quarter 和 week 单位。

注意:格式化功能使用 dateFormat 模块,所以掩码格式并不完全与 moment.js 一致。

moment('20180501').format('yyyy-mm-dd'); // -> '2018-05-01'

ms

source test

时长字符串与毫秒转换库。

转换时长字符串为毫秒。

参数名类型说明
strstring字符串格式
返回值number毫秒

转换毫秒为时长字符串。

参数名类型说明
numnumber毫秒
返回值string字符串格式
ms('1s'); // -> 1000
ms('1m'); // -> 60000
ms('1.5h'); // -> 5400000
ms('1d'); // -> 86400000
ms('1y'); // -> 31557600000
ms('1000'); // -> 1000
ms(1500); // -> '1.5s'
ms(60000); // -> '1m'

negate

source test

创建一个将原函数结果取反的函数。

参数名类型说明
predicatefunction源函数
返回值function目标函数
function even(n) { return n % 2 === 0 }
filter([1, 2, 3, 4, 5, 6], negate(even)); // -> [1, 3, 5]

nextTick

source test

能够同时运行在 node 和浏览器端的 next tick 实现。

参数名类型说明
cbfunction调用函数

如果支持 process.nextTick,则调用它,否则使用 setImmediate 或 setTimeout 进行兼容。

nextTick(function () {
    // Do something...
});

noop

source test

一个什么也不做的空函数。

noop(); // Does nothing

normalizeHeader

source test

标准化 HTTP 头部名。

参数名类型说明
headerstring源头部名
返回值string目标头部名
normalizeHeader('content-type'); // -> 'Content-Type'
normalizeHeader('etag'); // -> 'ETag'

normalizePath

source test

标准化文件路径中的斜杠。

参数名类型说明
pathstring源路径
返回值string目标路径
normalizePath('\\foo\\bar\\'); // -> '/foo/bar/'
normalizePath('./foo//bar'); // -> './foo/bar'

now

source test

获取当前时间戳。

now(); // -> 1468826678701

objToStr

source test

Object.prototype.toString 的别名。

参数名类型说明
val*目标值
返回值string字符串表示
objToStr(5); // -> '[object Number]'

omit

source test

类似 pick,但结果相反。

参数名类型说明
objobject源对象
filterstring array function对象过滤器
返回值object目标对象
omit({a: 1, b: 2}, 'a'); // -> {b: 2}
omit({a: 1, b: 2, c: 3}, ['b', 'c']) // -> {a: 1}
omit({a: 1, b: 2, c: 3, d: 4}, function (val, key) {
    return val % 2;
}); // -> {b: 2, d: 4}

once

source test

创建只能调用一次的函数。

参数名类型说明
fnfunction源函数
返回值function目标函数
function init() {};
var initOnce = once(init);
initOnce();
initOnce(); // -> init is invoked once

open

source test

打开 url 地址或文件。

参数名类型说明
targetstring要打开的目标
返回值ChildProcess子进程对象
open('https://eustia.liriliri.io/');

optimizeCb

source test

用于高效的函数上下文绑定。

orientation

source test demo

屏幕方向工具库。

on

绑定 change 事件。

off

解绑 change 事件。

get

获取当前屏幕方向(横屏 landscape 或 竖屏 portrait)。

orientation.on('change', function (direction) {
    console.log(direction); // -> 'portrait'
});
orientation.get(); // -> 'landscape'

pad

source test

对字符串进行左右填充。

参数名类型说明
strstring源字符串
lennumber填充长度
charsstring填充字符串
返回值string目标字符串
pad('a', 5); // -> '  a  '
pad('a', 5, '-'); // -> '--a--'
pad('abc', 3, '-'); // -> 'abc'
pad('abc', 5, 'ab'); // -> 'babca'
pad('ab', 5, 'ab'); // -> 'ababa'

pairs

source test

将对象转换为包含【键名,键值】对的数组。

参数名类型说明
objobject目标对象
返回值array键值对数组
pairs({a: 1, b: 2}); // -> [['a', 1], ['b', 2]]

parallel

source test

同时执行多个函数。

参数名类型说明
tasksarray函数数组
[cb]function结束回调
parallel([
    function(cb) {
        setTimeout(function () { cb(null, 'one') }, 200);
    },
    function(cb) {
        setTimeout(function () { cb(null, 'two') }, 100);
    }
], function (err, results) {
    // results -> ['one', 'two']
});

parseArgs

source test

命令行参数简单解析。

参数名类型说明
argsarray参数数组
optsobject解析选项
返回值object解析结果

options

参数名类型说明
namesobject选项名及类型
shorthandsobject选项名缩写
parseArgs(['eustia', '--output', 'util.js', '-w'], {
    names: {
        output: 'string',
        watch: 'boolean'
    },
    shorthands: {
        output: 'o',
        watch: 'w'
    }
});
// -> {remain: ['eustia'], output: 'util.js', watch: true}

partial

source test

返回局部填充参数的函数,与 bind 模块相似。

参数名类型说明
fnfunction源函数
...partials*局部填充参数
返回值function目标函数
var sub5 = partial(function (a, b) { return b - a }, 5);
sub(20); // -> 15

pascalCase

source test

将字符串转换为帕斯卡式。

参数名类型说明
strstring源字符串
返回值string帕斯卡式字符串
pascalCase('fooBar'); // -> FooBar
pascalCase('foo bar'); // -> FooBar
pascalCase('foo_bar'); // -> FooBar
pascalCase('foo.bar'); // -> FooBar

perfNow

source test

高精度时间戳。

var start = perfNow();

// Do something.

console.log(perfNow() - start);

pick

source test

过滤对象。

参数名类型说明
objobject源对象
filterstring array function对象过滤器
返回值object目标对象
pick({a: 1, b: 2}, 'a'); // -> {a: 1}
pick({a: 1, b: 2, c: 3}, ['b', 'c']) // -> {b: 2, c: 3}
pick({a: 1, b: 2, c: 3, d: 4}, function (val, key) {
    return val % 2;
}); // -> {a: 1, c: 3}

pluck

source test

提取数组对象中指定属性值,返回一个数组。

参数名类型说明
objobject array目标集合
keystring array属性路径
返回值array指定属性值列表
var stooges = [
    {name: 'moe', age: 40},
    {name: 'larry', age: 50},
    {name: 'curly', age: 60}
];
pluck(stooges, 'name'); // -> ['moe', 'larry', 'curly']

precision

source test

获取数字的精度。

参数名类型说明
numnumber要检查的数字
返回值number精度
precision(1.234); // -> 3;

prefix

source test

给 css 属性名增加浏览器前缀。

参数名类型说明
namestring源属性名
返回值string目标属性名

dash

同上,但返回短横线命名方式的版本。

prefix('text-emphasis'); // -> 'WebkitTextEmphasis'
prefix.dash('text-emphasis'); // -> '-webkit-text-emphasis'
prefix('color'); // -> 'color'

promisify

source test

转换使用回调的异步函数,使其返回 Promise。

参数名类型说明
fnfunction源函数
multiArgs=falseboolean回调是否有多个结果
返回值boolean目标函数

如果 multiArgs 设为真,返回的 Promise 会将回调的结果合并成一个数组。

var fs = require('fs');

var readFile = promisify(fs.readFile);
readFile('test.js', 'utf-8').then(function (data) {
    // Do something with file content.
});

property

source test

返回一个函数,该函数返回任何传入对象的指定属性。

参数名类型说明
pathstring array属性路径
返回值function目标函数
var obj = {a: {b: 1}};
property('a')(obj); // -> {b: 1}
property(['a', 'b'])(obj); // -> 1

query

source test

解析序列化 url 的 query 部分。

parse

将 query 字符串解析成对象。

参数名类型说明
strstringquery 字符串
返回值objectquery 对象

stringify

将对象序列化成 query 字符串。

参数名类型说明
objobjectquery 对象
返回值stringquery 字符串
query.parse('foo=bar&eruda=true'); // -> {foo: 'bar', eruda: 'true'}
query.stringify({foo: 'bar', eruda: 'true'}); // -> 'foo=bar&eruda=true'
query.parse('name=eruda&name=eustia'); // -> {name: ['eruda', 'eustia']}

quickSort

source test benchmark

快排实现。

参数名类型说明
arrarray要排序的数组
[cmp]function比较器
quickSort([2, 1]); // -> [1, 2]

raf

source test

requestAnimationFrame 快捷方式。

如果原生 requestAnimationFrame 不支持,使用 setTimeout 进行兼容。

var id = raf(function tick() {
    // Animation stuff
    raf(tick);
});
raf.cancel(id);

random

source test

在给定区间内生成随机数。

参数名类型说明
minnumber最小值
maxnumber最大值
floating=falseboolean是否允许浮点数
返回值number随机数
random(1, 5); // -> an integer between 0 and 5
random(5); // -> an integer between 0 and 5
random(1.2, 5.2, true); /// -> a floating-point number between 1.2 and 5.2

randomBytes

source test

随机字节序列生成器。

如果支持,使用 node 的 crypto 模块或浏览器的 crypto 对象。

参数名类型说明
sizenumberNumber of bytes to generate
返回值objectRandom bytes of given length
randomBytes(5); // -> [55, 49, 153, 30, 122]

randomItem

source test

随机获取数组中的某项。

参数名类型说明
arrarray目标数组
返回值*随机项
randomItem([1, 2, 3]); // -> 2

range

source test

创建整数数组。

参数名类型说明
[start]number起始值
endnumber结束值
step=1number相邻差
range(5); // -> [0, 1, 2, 3, 4]
range(0, 5, 2) // -> [0, 2, 4]

rc4

source test

RC4 对称加密算法实现。

encrypt

RC4 加密,结果表示为 base64 字符串。

decrypt

RC4 解密,传入 base64 字符串。

参数名类型说明
keystring密钥
strstring源字符串
返回值string目标字符串
rc4.encrypt('licia', 'Hello world'); // -> 'j9y2VpSfR3AdNN8='
rc4.decrypt('licia', 'j9y2VpSfR3AdNN8='); // -> 'Hello world'

ready

source test

dom 准备好时调用回调函数,类似于 jQuery 的 ready 方法。

参数名类型说明
fnfunction回调函数
ready(function () {
    // It's safe to manipulate dom here.
});

reduce

source test benchmark

合并多个值成一个值。

参数名类型说明
objobject array目标集合
iteratee=identityfunction合并函数
[initial]*初始值
[ctx]*函数上下文
返回值*合并值
reduce([1, 2, 3], function (sum, n) { return sum + n }, 0); // -> 6

reduceRight

source test

类似于 reduce,只是从后往前合并。

reduceRight([[1], [2], [3]], function (a, b) { return a.concat(b) }, []); // -> [3, 2, 1]

reject

source test

类似 filter,但结果相反。

参数名类型说明
objarray要遍历的集合
predicatefunction真值检测函数
[ctx]*函数上下文
返回值array包含所有未通过真值检测元素的数组
reject([1, 2, 3, 4, 5], function (val) {
    return val % 2 === 0;
}); // -> [1, 3, 5]

remove

source test

移除集合中所有通过真值检测的元素,返回包含所有删除元素的数组。

与 filter 不同,该模块会改变原数组。

参数名类型说明
objarray要遍历的集合
predicatefunction真值检测函数
[ctx]*函数上下文
返回值array包含所有删除元素的数组
var arr = [1, 2, 3, 4, 5];
var evens = remove(arr, function (val) { return val % 2 === 0 });
console.log(arr); // -> [1, 3, 5]
console.log(evens); // -> [2, 4]

repeat

source test

重复字符串指定次数。

参数名类型说明
strstring源字符串
nnumber重复次数
返回值string目标字符串
repeat('a', 3); // -> 'aaa'
repeat('ab', 2); // -> 'abab'
repeat('*', 0); // -> ''

restArgs

source test

将给定序号后的参数合并成一个数组。

参数名类型说明
functionfunction源函数
[startIndex]number合并参数起始位置
返回值function目标函数
var paramArr = restArgs(function (rest) { return rest });
paramArr(1, 2, 3, 4); // -> [1, 2, 3, 4]

rgbToHsl

source test

将 rgb 格式的颜色值转换为 hsl 格式。

参数名类型说明
rgbarrayrgb 值
返回值arrayhsl 值
rgbToHsl([52, 203, 165, 0.8]); // -> [165, 59, 50, 0.8]

rmCookie

source test

遍历所有可能的路径和域名将 cookie 删除。

参数名类型说明
keystringcookie 名
rmCookie('test');

rmdir

source test

递归地删除文件夹。

参数名类型说明
dirstring文件夹路径
callbackfunction回调
rmdir('/tmp/foo/bar/baz', function (err) {
    if (err) console.log (err);
    else console.log('Done');
});

root

source test

根对象引用,对于 nodeJs,取 global 对象,对于浏览器,取 window 对象。

rpad

source test

对字符串进行右填充。

参数名类型说明
strstring源字符串
lennumber填充长度
charsstring填充字符
返回值string目标字符串
rpad('a', 5); // -> 'a    '
rpad('a', 5, '-'); // -> 'a----'
rpad('abc', 3, '-'); // -> 'abc'
rpad('abc', 5, 'ab'); // -> 'abcab'

rtrim

source test

删除字符串尾部指定字符或空格。

参数名类型说明
strstring源字符串
charsstring array删除字符
返回值string目标字符串
rtrim(' abc  '); // -> ' abc'
rtrim('_abc_', '_'); // -> '_abc'
rtrim('_abc_', ['c', '_']); // -> '_ab'

safeCb

source test

创建回调函数,内部模块使用。

safeDel

source test

删除对象属性。

参数名类型说明
objobject目标对象
patharray string属性路径
返回值*删除值或 undefined
var obj = {a: {aa: {aaa: 1}}};
safeDel(obj, 'a.aa.aaa'); // -> 1
safeDel(obj, ['a', 'aa']); // -> {}
safeDel(obj, 'a.b'); // -> undefined

safeGet

source test

获取对象属性值,路径不存在时不报错。

参数名类型说明
objobject目标对象
patharray string属性路径
返回值*属性值或 undefined
var obj = {a: {aa: {aaa: 1}}};
safeGet(obj, 'a.aa.aaa'); // -> 1
safeGet(obj, ['a', 'aa']); // -> {aaa: 1}
safeGet(obj, 'a.b'); // -> undefined

safeSet

source test

设置对象属性值。

如果路径的某一层不存在,将会创建一个空对象。

参数名类型说明
objobject目标对象
patharray string属性路径
val*要设置的值
var obj = {};
safeSet(obj, 'a.aa.aaa', 1); // obj = {a: {aa: {aaa: 1}}}
safeSet(obj, ['a', 'aa'], 2); // obj = {a: {aa: 2}}
safeSet(obj, 'a.b', 3); // obj = {a: {aa: 2, b: 3}}

safeStorage

source test

安全地使用 storage,使其在旧浏览器及 safari 无痕模式下能正常运行。

参数名类型说明
type='local'string模式,local 或 session
返回值object指定 storage
var localStorage = safeStorage('local');
localStorage.setItem('licia', 'util');

sample

source test

从集合中随机抽取部分样本。

参数名类型说明
objarray object目标集合
nnumber样本数量
返回值array样本
sample([2, 3, 1], 2); // -> [2, 3]
sample({a: 1, b: 2, c: 3}, 1); // -> [2]

scrollTo

source test demo

以动画的形式滚动到指定目标。

参数名类型说明
targetelement string number滚动目标
optionsobject滚动选项

选项

选项名类型默认值说明
tolerancenumber0偏移
durationnumber800时长
easingstring functionoutQuart缓动函数
callbackfunctionnoop结束回调
scrollTo('body', {
    tolerance: 0,
    duration: 800,
    easing: 'outQuart',
    callback: function () {}
});

selectionSort

source test

选择排序实现。

参数名类型说明
arrarray要排序的数组
[cmp]function比较器
selectionSort([2, 1]); // -> [1, 2]

shuffle

source test

将数组中元素的顺序打乱。

参数名类型说明
arrarray源数组
返回值array目标数组
shuffle([1, 2, 3]); // -> [3, 1, 2]

size

source test

获取对象的大小或类数组元素的长度。

参数名类型说明
objarray object目标集合
返回值number集合大小
size({a: 1, b: 2}); // -> 2
size([1, 2, 3]); // -> 3

slice

source test

截取数组的一部分生成新数组。

参数名类型说明
arrayarray目标数组
[start=0]number起始位置
[end=array.length]number结束位置,不包含
slice([1, 2, 3, 4], 1, 2); // -> [2]

snakeCase

source test

转换字符串为下划线式。

参数名类型说明
strstring源字符串
返回值string下划线式字符串
snakeCase('fooBar'); // -> foo_bar
snakeCase('foo bar'); // -> foo_bar
snakeCase('foo.bar'); // -> foo_bar

some

source test

检查集合中是否有元素通过真值检测。

参数名类型说明
objarray object目标集合
predicatefunction真值检测函数
ctx*函数上下文
返回值boolean如果有元素通过真值检测,返回真
some([2, 5], function (val) {
    return val % 2 === 0;
}); // -> true

sortBy

source test

遍历集合中的元素,将其作为参数调用函数,并以得到的结果为依据对数组进行排序。

参数名类型说明
arrobject array源集合
[iteratee=identity]function排序依据生成函数
[ctx]*函数上下文
返回值array排序后的数组
sortBy([1, 2, 3, 4, 5, 6], function (num) {
    return Math.sin(num);
}); // -> [5, 4, 6, 3, 1, 2]

spaceCase

source test

将字符串转换为空格式。

参数名类型说明
strstring源字符串
返回值string空格式字符串
spaceCase('fooBar'); // -> foo bar
spaceCase('foo.bar'); // -> foo bar
spaceCase('foo.bar'); // -> foo bar

splitCase

source test

将不同命名式的字符串拆分成数组。

参数名类型说明
strstring目标字符串
返回值array拆分成的数组
splitCase('foo-bar'); // -> ['foo', 'bar']
splitCase('foo bar'); // -> ['foo', 'bar']
splitCase('foo_bar'); // -> ['foo', 'bar']
splitCase('foo.bar'); // -> ['foo', 'bar']
splitCase('fooBar'); // -> ['foo', 'bar']
splitCase('foo-Bar'); // -> ['foo', 'bar']

splitPath

source test

将路径拆分为文件夹路径,文件名和扩展名。

参数名类型说明
pathstring目标路径
返回值object包含文件夹路径,文件名和扩展名的对象
splitPath('f:/foo/bar.txt'); // -> {dir: 'f:/foo/', name: 'bar.txt', ext: '.txt'}
splitPath('/home/foo/bar.txt'); // -> {dir: '/home/foo/', name: 'bar.txt', ext: '.txt'}

startWith

source test

检查字符串是否以指定字符串开头。

参数名类型说明
strstring目标字符串
prefixstring字符串前缀
返回值boolean如果是前缀,返回真
startWith('ab', 'a'); // -> true

strHash

source test

使用 djb2 算法进行字符串哈希。

参数名类型说明
strstring目标字符串
返回值number哈希结果
strHash('test'); // -> 2090770981

strToBytes

source test

将字符串转换为字节数组。

参数名类型说明
strstring目标字符串
返回值array字节数组
strToBytes('licia'); // -> [108, 105, 99, 105, 97]

stringify

source test

JSON 序列化,支持循环引用和函数。

undefined 被当作 null 处理。

参数名类型说明
objobject目标对象
spacesnumber缩进
返回值string序列化后的字符串
stringify({a: function () {}}); // -> '{"a":"[Function function () {}]"}'
var obj = {a: 1};
obj.b = obj;
stringify(obj); // -> '{"a":1,"b":"[Circular ~]"}'

stripAnsi

source test

清除字符串中的 ansi 控制码。

参数名类型说明
strstring源字符串
返回值string目标字符串
stripAnsi('\u001b[4mcake\u001b[0m'); // -> 'cake'

stripCmt

source test

清除源码中的注释。

参数名类型说明
strstring源码
返回值string无注释代码
stripCmts('// comment \n var a = 5; /* comment2\n * comment3\n *\/'); // -> ' var a = 5; '

stripColor

source test

清除字符串中的 ansi 颜色控制码。

参数名类型说明
strstring源字符串
返回值string目标字符串
stripColor('\u001b[31mred\u001b[39m'); // -> 'red'

stripHtmlTag

source test

清除字符串中的 html 标签。

参数名类型说明
strstring源字符串
返回值string目标字符串
stripHtmlTag('<p>Hello</p>'); // -> 'Hello'

sum

source test

计算数字和。

参数名类型说明
...numnumber要计算的数字
返回值number数字和
sum(1, 2, 5); // -> 8

swap

source test

交换数组中的两项。

参数名类型说明
arrarray目标数组
anumber序号一
bnumber序号二
返回值array数组本身
var arr = [1, 2];
swap(arr, 0, 1); // -> [2, 1]

template

source test

将模板字符串编译成函数用于渲染。

参数名类型说明
strstring模板字符串
返回值function编译后的模板函数
template('Hello <%= name %>!')({name: 'licia'}); // -> 'Hello licia!'
template('<p><%- name %></p>')({name: '<licia>'}); // -> '<p>&lt;licia&gt;</p>'
template('<%if (echo) {%>Hello licia!<%}%>')({echo: true}); // -> 'Hello licia!'

throttle

source test

返回函数的节流阀版本。

参数名类型说明
fnfunction源函数
waitnumber延迟毫秒数
返回值function目标函数
$(window).scroll(throttle(updatePos, 100));

through

source test

stream Transform 类的简单包装。

参数名类型说明
opts={}Object初始化流选项
transformfunctionTransform 实现
[flush]functionFlush 实现

obj

设置 objectMode 为真的快捷方式。

ctor

返回继承 Transform 的类。

fs.createReadStream('in.txt')
  .pipe(through(function (chunk, enc, cb) {
      // Do something to chunk
      this.push(chunk);
      cb();
  })).pipe(fs.createWriteStream('out.txt'));

timeAgo

source test

将时间格式化成多久之前的形式。

参数名类型说明
dateDate目标日期
[now=new Date]Date当时日期
返回值string格式化时间表示
var now = new Date().getTime();
timeAgo(now - 1000 * 6); // -> right now
timeAgo(now + 1000 * 15); // -> in 15 minutes
timeAgo(now - 1000 * 60 * 60 * 5, now); // -> 5 hours ago

timeTaken

source test

获取函数的执行时间。

参数名类型说明
fnfunction要计算执行时间的函数
返回值number执行时间,单位毫秒
timeTaken(function () {
    // Do something.
}); // -> Time taken to execute given function.

times

source test

调用目标函数 n 次。

参数名类型说明
nnumber调用次数
fnfunction目标函数
[ctx]*函数上下文
返回值array结果数组
times(3, String); // -> ['0', '1', '2', '3']

toArr

source test

将任意值转换为数组。

参数名类型说明
val*要转换的值
返回值array转换后的数组
toArr({a: 1, b: 2}); // -> [{a: 1, b: 2}]
toArr('abc'); // -> ['abc']
toArr(1); // -> [1]
toArr(null); // -> []

toBool

source test

将任意值转换为布尔值。

参数名类型说明
val*要转换的值
返回值boolean转换后的布尔值
toBool(true); // -> true
toBool(null); // -> false
toBool(1); // -> true
toBool(0); // -> false
toBool('0'); // -> false
toBool('1'); // -> true
toBool('false'); // -> false

toDate

source test

将任意值转换为日期类型。

参数名类型说明
val*要转换的值
返回值Date转换后的日期值
toDate('20180501');
toDate('2018-05-01');
toDate(1525107450849);

toEl

source test

将 html 字符串转换为 dom 元素。

必须只有一个根元素。

参数名类型说明
strstringhtml 字符串
返回值elementhtml 元素
toEl('<div>test</div>');

toInt

source test

将任意值转换为整数。

参数名类型说明
val*要转换的值
返回值number转换后的整数
toInt(1.1); // -> 1
toInt(undefined); // -> 0

toNum

source test

将任意值转换为数字。

参数名类型说明
val*要转换的值
返回值number转换后的数字
toNum('5'); // -> 5

toSrc

source test

将函数转换为源码。

参数名类型说明
fnfunction目标函数
返回值string源码
toSrc(Math.min); // -> 'function min() { [native code] }'
toSrc(function () {}) // -> 'function () { }'

toStr

source test

将任意值转换为字符串。

参数名类型说明
val*要转换的值
返回值string转换后的字符串
toStr(null); // -> ''
toStr(1); // -> '1'
toStr(false); // -> 'false'
toStr([1, 2, 3]); // -> '1,2,3'

topoSort

source test

拓扑排序实现。

参数名类型说明
edgesarray依赖关系
返回值array排序后的数组
topoSort([[1, 2], [1, 3], [3, 2]]); // -> [1, 3, 2]

trigger

source test

触发浏览器事件。

参数名类型说明
[el=document]element目标元素
typestring事件类型
optsobject选项
trigger(el, 'mouseup');
trigger('keydown', {keyCode: 65});

trim

source test

删除字符串两边指定字符或空格。

参数名类型说明
strstring源字符串
charsstring array删除字符
返回值string目标字符串
trim(' abc  '); // -> 'abc'
trim('_abc_', '_'); // -> 'abc'
trim('_abc_', ['a', 'c', '_']); // -> 'b'

tryIt

source test

在 try catch 块中运行函数。

参数名类型说明
fnfunction目标函数
[cb]function回调
tryIt(function () {
    // Do something that might cause an error.
}, function (err, result) {
    if (err) console.log(err);
});

type

source test

获取 JavaScript 对象的内部类型。

参数名类型说明
val*目标对象
返回值string对象类型,小写
type(5); // -> 'number'
type({}); // -> 'object'
type(function () {}); // -> 'function'
type([]); // -> 'array'

ucs2

source test

UCS-2 编解码。

encode

通过码点序列创建字符串。

参数名类型说明
arrarray码点序列
返回值string编码后的字符串

decode

通过字符串创建码点序列。

参数名类型说明
strstring字符串
返回值array码点序列
ucs2.encode([0x61, 0x62, 0x63]); // -> 'abc'
ucs2.decode('abc'); // -> [0x61, 0x62, 0x63]
'𝌆'.length; // -> 2
ucs2.decode('𝌆').length; // -> 1

uncaught

source test demo

全局错误监听。

start

开始监听错误。

stop

停止监听错误。

addListener

添加监听器。

参数名类型说明
fnfunction错误监听器

rmListener

移除监听器。

rmAllListeners

移除所有监听器。

uncaught.start();
uncaught.addListener(err => {
    // Do something.
});

unescape

source test

和 escape 相反,转义 HTML 实体回去。

参数名类型说明
strstring源字符串
返回值string目标字符串
unescape('You &amp; Me'); -> // -> 'You & Me'

union

source test

返回传入所有数组的并集。

参数名类型说明
...arrarray要合并的数组
返回值array数组并集
union([2, 1], [4, 2], [1, 2]); // -> [2, 1, 4]

uniqId

source test

生成全局唯一 id。

参数名类型说明
[prefix]stringid 前缀
返回值string全局唯一 id
uniqId('eusita_'); // -> 'eustia_xxx'

unique

source test

返回数组去重后的副本。

参数名类型说明
arrarray源数组
[compare]function比较函数
返回值array目标数组
unique([1, 2, 3, 1]); // -> [1, 2, 3]

unzip

source test

与 zip 相反。

参数名类型说明
arrarray源数组
返回值array目标数组
unzip([['a', 1, true], ['b', 2, false]]); // -> [['a', 'b'], [1, 2], [true, false]]

upperCase

source test

转换字符串为大写。

参数名类型说明
strstring源字符串
返回值string目标字符串
upperCase('test'); // -> 'TEST'

upperFirst

source test

将字符串的第一个字符转换为大写。

参数名类型说明
strstring源字符串
返回值string目标字符串
upperFirst('red'); // -> Red

use

source test

使用 define 创建的模块。

参数名类型说明
[requires]array依赖
methodfunction要执行的代码
define('A', function () {
    return 'A';
});
use(['A'], function (A) {
    console.log(A + 'B'); // -> 'AB'
});

utf8

source test

UTF-8 编解码。

encode

UTF-8 编码。

参数名类型说明
strstring源字符串
返回值string目标字符串

decode

UTF-8 解码。

参数名类型说明
strstring源字符串
safe=falseboolean如果设为真,不抛错误
返回值string目标字符串
utf8.encode('\uD800\uDC00'); // ->  '\xF0\x90\x80\x80'
utf8.decode('\xF0\x90\x80\x80'); // -> '\uD800\uDC00'

uuid

source test benchmark

生成符合 RFC4112 版本 4 协议的 uuid。

相关标准 RFC4122 4.4

uuid(); // -> '53ce0497-6554-49e9-8d79-347406d2a88b'

values

source test

返回对象所有的属性值。

参数名类型说明
objobject目标对象
返回值array所有属性值
values({one: 1, two: 2}); // -> [1, 2]

viewportScale

source test

获取窗口缩放比。

viewportScale(); // -> 3

waterfall

source test

按顺序执行函数序列。

参数名类型说明
tasksarray函数序列
[cb]function结束回调
waterfall([
    function (cb) {
        cb(null, 'one');
    },
    function (arg1, cb) {
        // arg1 -> 'one'
        cb(null, 'done');
    }
], function (err, result) {
    // result -> 'done'
});

workerize

source test demo

将函数运行在 worker 线程中。

参数名类型说明
fnfunction源函数
返回值function目标函数
var worker = workerize(function (a, b) {
    return a + b;
});
worker(1, 2).then(function (value) {
    console.log(value); // -> 3
});

wrap

source test

将函数封装到包裹函数里面, 并把它作为第一个参数传给包裹函数。

参数名类型说明
fn*要包裹的函数
wrapperfunction包裹函数
返回值function目标函数
var p = wrap(escape, function(fn, text) {
    return '<p>' + fn(text) + '</p>';
});
p('You & Me'); // -> '<p>You &amp; Me</p>'

zip

source test

将每个数组中相应位置的值合并在一起。

参数名类型说明
...arrarray源数组
返回值array目标数组
zip(['a', 'b'], [1, 2], [true, false]); // -> [['a', 1, true], ['b', 2, false]]