다시 쓰 는 isPlainObject 방법
3344 단어 object
글자 의 양 을 통 해 정 의 된 대상 과 new Object 의 대상 에 대해 true 를 되 돌려 줍 니 다. new Object 는 매개 변 수 를 false 로 되 돌려 줍 니 다. 예 를 들 어
var p1 = new Object;
p1.name = 'tom';
var o1 = new Object('aa');
console.log($.isPlainObject({name:'Jack'})); //-> true
console.log($.isPlainObject(p1)); //-> true
console.log($.isPlainObject('aa')); //-> false
console.log($.isPlainObject(o1)); //-> false
$. isPlainObject (o1) 가 돌아 오 는 것 도 false 입 니 다.글자 의 양 을 통 해 정 의 된 대상 은 그 구조 기 가 Object 라 는 것 을 쉽게 증명 할 수 있다.
var obj = {};
console.log(obj.constructor === Object); //-> true
jq 1.4 새로 추 가 된 이 방법 은 쓸모 가 크 지 않 고 Object 구조 기 에서 생 성 된 대상 (매개 변수 전달 시 예외) 만 판단 할 수 있 습 니 다. 심지어 이것 은 jq 내부 에서 만 사용 하 는 것 이 라 고 생각 했 으 나 하필 공개 되 어 $에 걸 렸 습 니 다.
클래스 (구조 기) 를 사용자 정의 할 때 $. isPlainObject 로 new 사용자 정의 클래스 의 대상 을 판단 할 때 false 로 돌아 갑 니 다.
// ( ), p
function Person(){this.name='jack'}
var p = new Person();
$.isPlainObject(p); //-> false
따라서 글자 의 양 적 정의 와 사용자 정의 클래스 (구조 기) 를 통 해 만 든 대상 에 대해 트 루 로 돌아 가 는 방법 을 쓰 고 싶 습 니 다.
function myIsPlainObject( obj ){
return Object.prototype.toString.call(obj)==='[object Object]';
}
테스트 해 봐.
function Person(name){
this.name=name;
}
var p = new Person('jack');
var o = {name:'tom'};
console.log(myIsPlainObject(p)); //-> true
console.log(myIsPlainObject(o)); //-> true
모두 트 루 로 돌아 가 모든 것 이 순 조로 운 것 같 습 니 다.
하필 IE 에서 window / document / document. body / HTMLElement / HTMLCollection / Nodelist / 도 true 로 돌 아 왔 습 니 다.즉, IE 에서 Object. prototype. toString. call 이상 의 대상 이 되 돌아 오 는 문자열 도 '[object Object]' 입 니 다. IE 가 왜 이렇게 이 루어 졌 는 지 모 르 겠 습 니 다. Firefox / chrome / safari / Opera 는 그렇지 않 습 니 다.수정 하 다
function myIsPlainObject( obj ){
return 'isPrototypeOf' in obj && Object.prototype.toString.call(obj)==='[object Object]';
}
obj 가 isPrototype Of 속성 을 가지 고 있 는 지 판단 합 니 다. isPrototype Of 는 Object. prototype 에 걸 려 있 습 니 다.글자 의 양 이나 사용자 정의 클래스 (구조 기) 를 통 해 만 든 대상 은 이 속성 방법 을 계승 합 니 다. 약속 이 있 는 경우 이 방법 을 사용 할 수 있 습 니 다.
console.log(myIsPlainObject(window)); //-> false
console.log(myIsPlainObject(document)); //-> false
그러나 약속 을 지 키 지 않 은 상태 에서 도 실패 합 니 다. 예 를 들 어 window 에 isPrototype Of 속성 을 인위적으로 추가 하 는 것 과 같 습 니 다.
window.isPrototypeOf = '';
console.log(myIsPlainObject(window)); //-> true
관련:
new Object 에 대한 자세 한 정보
isPlainObject 는 글자 의 양 대상 여 부 를 판단 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
localStorage에 객체를 추가하는 방법은 무엇입니까?이 노트에서는 localStorage에 객체를 삽입하는 방법을 보여드리겠습니다. 경우에 따라 로컬 스토리지 또는 세션 스토리지에 데이터를 개체로 저장해야 할 수 있습니다. 어떻게 이것을 달성할 수 있습니까? 객체가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.