객체가 jQuery 객체인지 또는 기본 JavaScript 객체인지 확인하는 빠른 방법이 있습니까?
예:
var o = {};
var e = $('#element');
function doStuff(o) {
if (o.selector) {
console.log('object is jQuery');
}
}
doStuff(o);
doStuff(e);
분명히 위의 코드는 작동하지만 안전하지 않습니다. 잠재적으로 o
객체에 선택기 키를 추가 하고 동일한 결과를 얻을 수 있습니다. 객체가 실제로 jQuery 객체인지 확인하는 더 좋은 방법이 있습니까?
무엇인가 (typeof obj == 'jquery')
답변
instanceof
연산자 를 사용할 수 있습니다 :
if (obj instanceof jQuery){
console.log('object is jQuery');
}
설명 : jQuery
함수 (일명 $
)는 생성자 함수 로 구현됩니다 . 생성자 함수는 new
접두사 로 호출해야 합니다.
당신이 호출 할 때 $(foo)
, 내부적으로 jQuery를은이 변환 new jQuery(foo)
1 . JavaScript this
는 생성자 함수 내에서 초기화 하여의 새로운 인스턴스를 가리키고 jQuery
속성을 jQuery.prototype
(aka jQuery.fn
) 에있는 속성으로 설정합니다 . 따라서 is 인 new
객체 를 얻습니다 .instanceof jQuery
true
1 실제로 new jQuery.prototype.init(foo)
: 생성자 로직이이라는 다른 생성자 함수로 오프로드 init
되었지만 개념은 동일합니다.
답변
http://api.jquery.com/jquery-2/에 설명 된대로 .jquery 속성을 사용할 수도 있습니다.
var a = { what: "A regular JS object" },
b = $('body');
if ( a.jquery ) { // falsy, since it's undefined
alert(' a is a jQuery object! ');
}
if ( b.jquery ) { // truthy, since it's a string
alert(' b is a jQuery object! ');
}
답변
instanceof 연산자를 확인하십시오 .
var isJqueryObject = obj instanceof jQuery
답변
객체의 인스턴스를 확인하는 가장 좋은 방법은 instanceof 연산자를 사용 하거나 객체의 프로토 타입이 다른 객체의 프로토 타입 체인에 있는지 검사하는 isPrototypeOf () 메소드 를 사용하는 것입니다.
obj instanceof jQuery;
jQuery.prototype.isPrototypeOf(obj);
그러나 때로는 문서의 여러 jQuery 인스턴스의 경우 실패 할 수 있습니다. @Georgiy Ivankin이 언급했듯이 :
만약 내가
$
내 현재 이름 공간 가리키는jQuery2
내가 외부 네임 스페이스 (어디에서 개체를 가지고$
있다jQuery1
) 그때 사용할 수있는 방법이 없다instanceof
그 객체가있는 경우 확인하기 위해이jQuery
객체가
이 문제를 극복하는 한 가지 방법은 클로저 또는 IIFE 에서 jQuery 객체의 별칭을 지정하는 것입니다.
//aliases jQuery as $
(function($, undefined) {
/*... your code */
console.log(obj instanceof $);
console.log($.prototype.isPrototypeOf(obj));
/*... your code */
}(jQuery1));
//imports jQuery1
그 문제를 극복하는 다른 방법 jquery
은obj
'jquery' in obj
당신은 원시 값이 검사를 수행 할 경우 보장함으로써 이전의 검사를 수정할 수 있도록하지만, 그것은 오류가 발생합니다 obj
을 수Object
'jquery' in Object(obj)
이전 방법이 가장 안전하지는 않지만 ( 'jquery'
객체 에서 속성을 만들 수 있음 ) 두 가지 방법으로 작업하여 유효성을 향상시킬 수 있습니다.
if (obj instanceof jQuery || 'jquery' in Object(obj)) { }
문제는 여기에 모든 개체가 속성을 정의 할 수 있다는 것입니다 jquery
더 나은 방법이 프로토 타입에 요청하는 것, 그래서 자신으로, 그리고 객체가 아닌지 확인 null
또는undefined
if (obj && (obj instanceof jQuery || obj.constructor.prototype.jquery)) { }
인해 강제 의 if
문을 평가하여 단락을 만들 &&
때 조작자 obj
의 어느 하나 falsy 값 ( null
, undefined
, false
, 0
, ""
)하고 다른 검증을 수행하기 위해 진행한다.
마지막으로 유틸리티 함수를 작성할 수 있습니다.
function isjQuery(obj) {
return (obj && (obj instanceof jQuery || obj.constructor.prototype.jquery));
}
살펴 보자 : 논리 연산자와 진실 / 거짓
답변
return el instanceof jQuery ? el.size() > 0 : (el && el.tagName);
답변
그러나 jQuery에서 객체를 확인하는 또 다른 방법이 있습니다.
jQuery.type(a); //this returns type of variable.
나는 것들을 이해하기 위해 모범을 보였습니다.
답변
jQuery가 설치되지 않은 객체가 jQuery 객체인지 알고 싶은 경우 다음 스 니펫이 작동해야합니다.
function isJQuery(obj) {
// Each jquery object has a "jquery" attribute that contains the version of the lib.
return typeof obj === "object" && obj && obj["jquery"];
}