-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
那些不起眼的小工具? #5
Comments
This was referenced Apr 29, 2018
Open
Open
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
前言
原文链接
源码地址
第一篇文章说了undefined,那我们也从undefined开始。
_.isUndefined(obj)
示例
对于一个对象上不存在的属性
对于一个没有返回值的函数
对于声明和却没有赋值的标量
对于直接赋值为undefined(非ie8以下)或者void 0
_.isUndefined都会返回true,其他情况全都是返回false
需要特别注意的是,有时候我们会这样判断一个变量是都存在,
a == null
a == undefined
都可以通难过判断。但是_.isUndefined用的是三等强制判断,所以null是通过不了的
_.isNull(obj)
这个没啥说的,只有obj输入
null
,结果输出才为true,因为内部判断也是用的三等判断,不仅值要相等,类型也要相同。_.noConflict()
示例
遇见重名的事不新鲜对吧,全国有多少个小明啊,我们从小到大课本里到处都是小明和小红。
这里后面引入的underscore.js把lodash.js给覆盖了,因为两个库都想占用全局的_,结果后来者居上。
如果不想lodash被覆盖怎么办,总的有个先来后到啊。只需要调用noConflict方法便将占着的_坑位重新归还给了lodash,而之后我们用my_即可访问所有underscore.js的方法。
接下来我们看下源码怎么实现的
_.identity(value)
这个函数看起来没有什么软用,但是在后面能够起非常大的作用,也正体现了,工具虽小,能量却大
我们先来简单地看下它的应用,在后续的源码分析中遇到再仔细讲解。
_.constant(value)
我们来看一段github上关于下划线的一个issue,挺有意思的。也许我们比较难列举出这个函数的应用,但是至少下面这个例子是比较好的。
为什么可以缓存住18,我们看下源码大概就知道了,源码创建了常见的闭包,闭包常见的作用之一就是让外面通过函数调用的形式去访问内部的变量,以及在一定的生命周期内,缓存住变量。
_.noop()
又是一个看起来啥用都没有的函数,然而事实真的是这样吗?请移步以下几个链接
例子不用多,总结一下
1. 给一个变量赋值为一个空函数,在后续的调用中你不需要去检测他是不是undefined
2. 为什么不给需要的变量重新设置一个空函数? _.noop已经创建了一个函数空间,让其他变量也指向这个函数,可以减少js中不必要的花销
_.times(n, iteratee, context)
示例
可以看到传进去的函数执行执行了6次,并将对应的每次执行的结果存在了数组中返回。
_.random(min, max)
示例
源码
当然啦,如果你传入非整数,或者max < min的数,那结果就有可能不能按照预期出现了
_.uniqueId(prefix)
源码
_.now()
直接看源码
结尾
不介意的话,在文章开头的源码地址那里点一个小星星吧😀
不介意的话,在文章开头的源码地址那里点一个小星星吧😀
不介意的话,在文章开头的源码地址那里点一个小星星吧😀
The text was updated successfully, but these errors were encountered: