1. 원래 값과 참고 값
원래 값은 스택에 저장되고 참조 값은 힙에 저장됩니다.
다음과 같이 코드 코드를 복사합니다.
함수 사람(ID,이름,나이){
this.id = 아이디;
this.name = 이름;
this.나이 = 나이;
}
바넘 = 10;
var bol = 사실;
var str = "abc";
var obj = 새로운 객체();
var arr = ['a','b','c'];
var person = new Person(100,"멍청이의 좌우명",25);
2. 정의되지 않음 및 null
정의되지 않음: 변수가 정의되지 않았습니다. 정의되지 않은 유형의 독점 값입니다.
null: 참조가 할당되지 않았습니다. Null 유형의 배타적 값입니다.
typeof(정의되지 않음) == 정의되지 않음;
typeof(null) == 객체;
정의되지 않음==null;
정의되지 않음!==null;
null 인스턴스 객체 == false;
정의되지 않은 인스턴스 객체 == false;
정의되지 않음 및 Null 유형이 있지만 다음 예에서는 이 두 유형이 표시되지 않음을 보여줍니다. 즉, 해당 값만 사용할 수 있습니다.
경고(정의되지 않은 인스턴스of 정의되지 않음);
경고(Null의 null 인스턴스);
3. 의사 배열
특징:
1) 길이 속성이 있습니다.
2) 배열처럼 인덱스 순서로 데이터에 액세스합니다.
3) 푸시, 팝, 슬라이스 등 배열별 데이터 조작 방법이 없습니다...
의사 배열은 Array.prototype.slice를 통해 실제 배열로 변환될 수 있습니다.
var FaceArray = {0: 'a', 1: 'b', length: 2}//표준 의사 배열;
var realArray = Array.prototype.slice.call(fakeArray);
js의 의사 배열: 인수, node.childNodes, document.getElementsByTagName()...
IE의 문제: IE의 node.childNodes를 슬라이스로 변환할 수 없습니다.
Jquery의 의사 배열: Jquery 자체는 의사 배열입니다.
경보($('.class1').length); 경보($('.class1').[0].tagName);
4. 단순형 리터럴에 대하여
var a = 1; b = 참, c = "ccc";
리터럴에 유형이 있는 것 같습니다.
경고(a 유형);//번호
경고(b 유형);//부울
경고(c 유형);//문자열
그러나 인스턴스 오브를 통해서는 측정할 수 없습니다.
경고(숫자 인스턴스)//false
경고(객체 인스턴스)//false
경고(부울 인스턴스b)//false
경고(b 객체 인스턴스)//false
경고(문자열 인스턴스)//false
경고(c 객체 인스턴스)//false
5. 함수의 프로토타입 속성과 객체 인스턴스의 내부 프로토타입 속성
각 함수(생성자)에는 프로토타입 속성이 있으며, 각 객체 인스턴스에는 생성자의 프로토타입 속성을 가리키는 보이지 않는(Mozilla가 이를 공개하고 __proto__를 통해 얻을 수 있음) 내부 프로토타입 속성이 있습니다. 프로토타입 체인을 형성하는 자체 프로토타입 속성입니다. Object는 최상위 객체이므로 객체 인스턴스의 속성/메서드에 액세스할 때 모든 프로토타입 체인은 결국 Object.prototype을 가리킵니다. 객체 인스턴스 자체에서 검색을 시작합니다. 찾을 수 없으면 Object.prototype.prototype == null이 될 때까지 프로토타입 체인을 따라 위쪽으로 검색합니다.
6. 생성자의 작은 비밀
다음과 같이 코드 코드를 복사합니다.
var s = new function(){return "sss"};
경고(들);//[객체 객체]
s = 새 함수(){return new String("sss")};
경고;//sss
이 코드에 대한 설명:
new 표현식 뒤의 생성자가 참조 객체(배열, 객체, 함수 등)를 반환하는 한, 기본 유형을 반환하는 경우(반환이 없으면 실제로는 반환) 생성된 익명 객체를 덮어씁니다. 기본 유형 undefine ), new에 의해 생성된 익명 객체가 반환됩니다.
7. 객체 생성 과정
다음과 같이 코드 코드를 복사합니다.
함수 사람(이름){
this.name = 이름;
}
Person.prototype = {
getName: function(){return this.name}
};
var p = new Person('장산');
p의 생성 프로세스를 해독합니다.
◦ 내장 객체 obj를 생성하고 초기화합니다.
◦ p의 내부 [[Prototype]]을 Person.prototype으로 지정합니다.
◦ p를 사용하고 인수 매개변수를 사용하여 Person의 내부 [[Call]] 메서드를 호출합니다. 즉, Person 함수 본문을 실행하고 반환 값을 반환합니다. 반환이 없으면 undefound가 반환됩니다.
◦ 이전 단계에서 객체 유형을 반환하는 경우 이 값을 p로 반환하고, 그렇지 않으면 obj를 반환합니다.
8. 객체의 고유 속성과 상속 속성
다음과 같이 코드 코드를 복사합니다.
함수 사람(이름){
this.name = 이름;
}
Person.prototype = {
유형: '인간',
getName: function(){return this.name}
};
var p = new Person('장산');
Alert(p.hasOwnProperty('type'));//false
p.type = '렌';
Alert(p.hasOwnProperty('type'));//true
실행 결과는 매우 명확합니다. 객체의 속성은 프로토타입에서 동일한 이름의 속성을 수정할 수 없으며 동일한 이름의 속성만 생성하고 여기에 값을 할당합니다.
9.함수객체 생성과정
내장 객체 객체 fn을 생성합니다.
fn의 내부 [[Prototype]]을 Function.prototype으로 설정합니다.
함수 호출의 논리를 처리하는 내부적으로 구현된 메서드인 내부 [[Call]] 특성을 설정합니다. (단순히 함수 본문을 가리키는 것으로 이해됩니다.)
fn.length를 funArgs.length로 설정합니다. 함수에 매개변수가 없으면 fn.length를 0으로 설정합니다.
fn.prototype의 생성자는 fn 자체를 가리킵니다.
Fn을 반환합니다.
10.Instanceof의 원리
a가 B의 인스턴스인지 확인하려면 B의 프로토타입(생성자의 프로토타입 속성)이 가리키는 객체가 a의 프로토타입 체인에 있는지 확인해야 합니다.
11. 기능과 대상에 대한 추측
경고(함수 인스턴스의 함수);//true
경고(객체 인스턴스 함수);//true
Alert(함수 객체 인스턴스);//true
경고(객체 인스턴스의 객체);//true
오랫동안 생각해봤는데 이해가 안가더라구요...