JQuery工具方法整理

简介: JQuery工具方法整理

具体如下:

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 {


相关文章
|
3月前
|
JavaScript
jQuery 遍历 方法
jQuery 遍历 方法
34 5
|
2月前
|
XML JavaScript 数据格式
jquery中html()方法的使用
jquery中html()方法的使用
28 1
|
2月前
|
前端开发 JavaScript
jQuery - AJAX load() 方法
jQuery load() 方法是简单但强大的 AJAX 方法。
53 6
|
3月前
|
JavaScript
jQuery parentsUntil() 方法
jQuery parentsUntil() 方法
31 10
|
3月前
|
XML JSON JavaScript
jQuery 实用工具
jQuery 实用工具
23 2
|
3月前
|
JavaScript 前端开发
jQuery 杂项方法
jQuery 杂项方法
32 2
|
3月前
|
JavaScript
jQuery 效果 方法
jQuery 效果 方法
16 3
|
3月前
|
JavaScript 前端开发
jQuery - noConflict() 方法
jQuery - noConflict() 方法
24 5
|
3月前
|
JSON 前端开发 JavaScript
jQuery AJAX 方法
jQuery AJAX 方法
35 1
|
3月前
|
XML 前端开发 JavaScript
jQuery HTML / CSS 方法
jQuery HTML / CSS 方法
17 2