[javascript] 객체가 jQuery 객체인지 확인

객체가 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 jQuerytrue


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

그 문제를 극복하는 다른 방법 jqueryobj

'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"];
}