JQuery工具方法整理

本文介绍了JavaScript中的几种判断方法,如检查是否为函数、window对象、纯粹对象、空对象、类数组对象以及改进后的遍历逻辑,还提及了一套前端开发学习资料,旨在帮助开发者提升技能并提供学习资源支持。
摘要由CSDN通过智能技术生成

具体如下:

2.判断是否是函数

用于检测是否是一个函数,返回值为布尔值

//这里的nodeType是为了解决兼容问题
//在某些浏览器中,typeof对HTML 元素返回“function”
//(即“文件类型”。createElement(“object”) === “function” ')。
//我们不想将任何 DOM节点分类为函数。
function isFunction(obj){//判断是否是函数
return typeof obj === ‘function’ && typeof obj.nodeType !== “number”;
}
复制代码

3.判断是否是window

用于判断是否是一个window,返回值为布尔值

//这里巧用了window上面有个window属性
function isWindow(obj){//判断是否是window
return obj!=null && obj.window === window;
}
复制代码

4.判断是否是纯粹的对象

用于判断是否是纯粹【{},new Object,Object.create(null)】的对象,返回值为布尔值

var getProto = Object.getPrototypeOf;//获取原型
var hasOwn = class2type.hasOwnProperty;//相当于object.prototype.hasOwnProperty
function isPlainObject(obj){//判断是否是纯粹的对象({},new Object,Object.create(null))
var proto = getProto(obj),
Ctol;

if(!obj || toType(obj)!==“object”){//检测是否是object类型,不是则直接返回false
return false
}

//判断proto上面是否有constructor这个属性,有则直接获取构造器
Ctol = hasOwn.call(ptoto,“constructor”) && proto.constructor;
return typeof Ctol === “function” && fnToString.call( Ctor ) === ObjectFunctionString;
}
复制代码

5.判断是否是一个空对象

用于判断是否是一个空对象,返回值为布尔值

原jq代码 :

//缺陷:无法检测Symbol,以及原型上添加的属性也会被forin循环出来
function isEmptyObject: function( obj ) {
var name;
for ( name in obj ) {//循环如果有属性则直接返回false
return false;
}
return true;
}
复制代码

如图:`我们是希望只要当前对象没有属性,则被判断为空对象,而不是原型上有对象也被认为不是空对象

修改之后

function isEmptyObject(obj){//判断是否是一个空对象
let arr = [
…Object.getOwnPropertyNames(obj),//获取自身上的属性
…Object.getOwnPropertySymbols(obj)//获取symbol
]
return arr.length > 0;
}
复制代码

6.检测是否是类数组

用于检测是否是类数组或者数组,返回值为布尔值

function isArrayLike( obj ) {
var length = !!obj && “length” in obj && obj.length,//obj存在并且有length属性,则直接回去obj的length
type = toType( obj );//前面的检测类型

if ( isFunction( obj ) || isWindow( obj ) ) {//因为函数和对象中也有length属性,所以要排除他们
return false;
}

return type === “array” || length === 0 ||
typeof length === “number” && length > 0 && ( length - 1 ) in obj;
}
复制代码

7.jq的each遍历

用于遍历数组或者对象,返回值为每一项和索引

原jq :

//缺陷不能遍历出symbol
function each( obj, callback ) {
var length, i = 0;

if ( isArrayLike( obj ) ) {
length = obj.length;
for ( ; i < length; i++ ) {
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
break;
}
}
} else {
for ( i in obj ) {
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
break;
}
}
}

return obj;
}
复制代码

如图所示:不能遍历出symbol 

修改后 :

function getPropertyname(obj){//获取symbol加当前对象的属性,不包括原型上的属性
return [
…Object.getOwnPropertyNames(obj),
…Object.getOwnPropertySymbols(obj)
]
}
function each( obj, callback ) {
var length, i = 0;

if ( isArrayLike( obj ) ) {
length = obj.length;
for ( ; i < length; i++ ) {
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
break;
}
}
} else {

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

算法

  1. 冒泡排序

  2. 选择排序

  3. 快速排序

  4. 二叉树查找: 最大值、最小值、固定值

  5. 二叉树遍历

  6. 二叉树的最大深度

  7. 给予链表中的任一节点,把它删除掉

  8. 链表倒叙

  9. 如何判断一个单链表有环

由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-ipncVbRO-1712836115256)]

  • 19
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值