var class2type = {};//定义一个空对象
var toString = class2type.toString;//相当于Object.prototype.toString
[“Boolean”,“Number”,“String”,“Function”,“Array”,“Date”,“RegExp”,“Object”,“Error”,“Symbol”,“BigInt”,“GeneratorFunction”].forEach(item=>{
class2type[“[object “+item+”]”] = item.toLowerCase(); //遍历数组为class2type添加属性和对应的值,如class2type[object String]:string
})
function toType(obj){
if(obj==null){//排除null和undefined
return obj+‘’;
}
return typeof obj === “object” || typeof obj === “function” ?
class2type[toString.call(obj)] || “object” : typeof obj;
}
复制代码
具体如下:
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;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
css
1,盒模型
2,如何实现一个最大的正方形
3,一行水平居中,多行居左
4,水平垂直居中
5,两栏布局,左边固定,右边自适应,左右不重叠
6,如何实现左右等高布局
7,画三角形
8,link @import导入css
9,BFC理解
js
1,判断 js 类型的方式
2,ES5 和 ES6 分别几种方式声明变量
3,闭包的概念?优缺点?
4,浅拷贝和深拷贝
5,数组去重的方法
6,DOM 事件有哪些阶段?谈谈对事件代理的理解
7,js 执行机制、事件循环
8,介绍下 promise.all
9,async 和 await,
10,ES6 的 class 和构造函数的区别
11,transform、translate、transition 分别是什么属性?CSS 中常用的实现动画方式,
12,介绍一下rAF(requestAnimationFrame)
13,javascript 的垃圾回收机制讲一下,
14,对前端性能优化有什么了解?一般都通过那几个方面去优化的?
ion 分别是什么属性?CSS 中常用的实现动画方式,
12,介绍一下rAF(requestAnimationFrame)
13,javascript 的垃圾回收机制讲一下,
14,对前端性能优化有什么了解?一般都通过那几个方面去优化的?
[外链图片转存中…(img-d5398UX2-1711756883266)]