앞에 쓰십시오
오늘 저는 노드 유형에 대한 지식과 요약하고 싶은 지식을 확인하고 싶습니다. Google에서 기사를 보았지만 원래 링크는 사라졌습니다. 스냅 샷 에서이 기사를 뽑았습니다. 원래 저자에게 질문이 있으시면 저에게 연락하십시오!
이 기사는 모두 일부 JS를 기반으로하며 전문가는 자동으로 건너 뛸 것입니다! 나는 이전에 JS에 대해 많은 글을 쓰지 않았으며,이 측면은 상대적으로 약하기 때문에 노드를 작성할 때도 문제가 발생했습니다. 여기 내 지식에 대한 보충이 있습니다!
텍스트
node.js의 기초는 스크립팅 언어 인 JavaScript입니다. 대부분의 스크립팅 언어의 일반적인 특징 중 하나는 "약한 유형"입니다.
PHP와 달리 PHP에 새로운 변수가 있더라도 선언 할 필요는 없지만 JavaScript는 여전히 var를 선언해야합니다. 이 var는 int, String, char 등과 같은 모든 유형의 의미를 C ++ 및 함수로 다룹니다.
이 기사의 모든 내용과 다음 기사는 Linux 또는 Cygwin에서 VIM을 사용하여 편집됩니다 (그렇지 않은 경우 자체 방법으로 변환하십시오). 그런 다음 명령 줄 아래에서 결과를보십시오.
기본 구문
변수 선언
C/C ++에서는 다음과 같은 변수를 선언합니다.
```C ++
코드 사본은 다음과 같습니다.
void foo () {}
int a = 0;
char b = 'a';
float c = 1.0f;
void (*d) () = foo; /// <그게 내가 쓴 내용이라면 잊어 버렸습니다. 간단히 말해서 기능 포인터입니다.
그리고 node.js에서는 다음과 같습니다.
````JavaScript
코드 사본은 다음과 같습니다.
함수 foo () {}
var a = 0;
var b = 'a';
var c = 1.0;
var d = foo;
따라서 변수의 유형이든 Node.js의 Var로 해결됩니다.
루프 명령문
… i
이 루프 명령문은 기본적으로 C/C ++와 동일합니다.
```C ++
코드 사본은 다음과 같습니다.
for (int i = 0; i <foo; i ++)
{
// ...
}
Node.js는 약한 유형이므로 다음과 같습니다.
````JavaScript
코드 사본은 다음과 같습니다.
for (var i = 0; i <foo; i ++) {
// ...
}
…
이것은 PHP의 foreach와 유사한 포스트 형 루프 명령문입니다.
예를 들어, 우리는 다음과 같이 JSON 객체를 가지고 있습니다.
자바 스크립트
코드 사본은 다음과 같습니다.
var foo = {
"Hello": "World",
"노드": "JS",
"Blahblah": "Bar"
};
현재로서는 ... IN에 사용할 수 있습니다.
자바 스크립트
코드 사본은 다음과 같습니다.
for (foo in foo) {
console.log (key + ":" + foo [key]);
}
명령 줄에 다음 명령을 입력하면 다음과 같습니다.
코드 사본은 다음과 같습니다.
$ 노드 foo.js
다음 내용이 화면에 표시됩니다.
코드 사본은 다음과 같습니다.
안녕하세요
: 세계
노드 : JS
블라 블라 : 바
팁 : 위에서, for ... in 문은 키 값 트래버스를 제공하지 않고 JSON 객체, 어레이 및 객체의 주요 이름을 가로 지르는 데 사용됩니다. 키 값을 얻으려면 Foo [<현재 키 이름>] 형식으로 만 얻을 수 있습니다. 이것은 여전히 PHP foreach와 약간 다릅니다.
...하는 동안…
나는 이것을 많이 설명하지 않을 것입니다. 그것은 다른 언어와 큰 차이가 아닙니다. 변수 선언이 있다면 Var를 사용하기에 충분합니다.
운영자
+, -, *, /
이것은 이러한 연산자의 경우입니다. +에주의를 기울여야합니다. 문자열과 수치 작업 모두에서 작용할 수 있습니다. 약한 언어는 유형이 약하다고 말하지만 숫자는 때때로 문자열 형태로 나타날 수 있으며 때로는 문자열이 숫자 값의 형태로 나타날 수 있지만 필요한 경우에도 여전히 유형에 대해 이야기해야합니다. 다음 코드를 사용하여 결과를 볼 수 있습니다.
코드 사본은 다음과 같습니다.
var a = "1";
var b = 2;
Console.log (A + B);
Console.log (parseint (a) + b);
여기서 parseint는 node.js의 내장 함수이며, int 유형 변수로 문자열을 구문 분석하는 데 사용됩니다.
위의 코드 실행 결과는 다음과 같습니다.
코드 사본은 다음과 같습니다.
12
3
참고 : 첫 번째 콘솔의 결과는 12입니다. A는 문자열이므로 B는 시스템에 의해 문자열로 추가됩니다. 결과는 두 줄이 함께 붙어 있고 12가됩니다. 두 번째 콘솔의 결과는 첫 번째 A를 int 유형으로 변환하고 두 개의 int 유형 변수, 즉 값을 추가하며 결과는 3입니다.
==, ==,! =,! ==
다음은이 논리 연산자의 길이가 2 (==,! =) 일 때 외부 값이 동일한 지 여부 만 결정하지만 유형을 결정하지 않는다고 설명하는 점입니다. 좋다
코드 사본은 다음과 같습니다.
var a = 1, b = "1";
Console.log (a == B);
출력의 결과는 사실입니다. 그러나 중간에 판단 할 때 동등한 신호를 추가하면 엄격한 판단을 내릴 것입니다. 유형과 값이 동일 할 때만 사실입니다. 그렇지 않으면 거짓입니다. 즉
코드 사본은 다음과 같습니다.
var a = 1, b = "1";
Console.log (a === B);
a는 int 유형이고 b는 문자열이기 때문에 결과는 거짓입니다.
그건 그렇고, 조건부 진술에 대해 이야기합시다. 실제로, 여기서 다른 언어와 다르지 않다면, 여러 논리 연산자에게는 두 개의 동등한 징후와 3 개의 동일한 징후의 문제 일뿐입니다. 그래서 나는 많은 피곤한 진술을하지 않을 것입니다.
타입
여기서 나는 그것을 함수가 아닌 연산자로 간주 할 것이다.
이 연산자의 기능은 변수의 유형을 판단하는 것이며 문자열, 즉 유형 이름을 반환합니다. 다음 코드를 실행하는지 알 수 있습니다.
코드 사본은 다음과 같습니다.
함수 foo () {}
var a = 0;
var b = 'shh ~ 달걀 꽃 수프가 자고 있습니다. ';;
var c = 1.0;
var d = foo;
var e = { "a": a};
var f = [1, 2, 3];
var g = null;
var h = 정의되지 않은;
Console.log (타입 A);
Console.log (typeof b);
Console.log (Typeof C);
Console.log (typeof d);
Console.log (Typeof e);
Console.log (typeof f);
Console.log (Typeof g);
Console.log (유형 H);
여기서 실행 결과는 다음과 같습니다.
코드 사본은 다음과 같습니다.
숫자
끈
숫자
기능
물체
물체
물체
한정되지 않은
널, 정의되지 않은, 난
JavaScript에는 제목에 표시된 것처럼 세 가지 특별 값이 있습니다. 모두가 첫 번째에 익숙 할 수 있습니다. C/C ++도 있지만 대문자가 있으며 본질은 하나입니다.
```C ++
null을 정의하십시오
JavaScript에서는이 세 값의 의미가 다릅니다.
### null ###
Null은 특수한 물체로 대략 비어 있습니다. 예를 들어:
var a = null;
모두가 이해할 수 있으므로 설명하지는 않습니다. 그러나 C/C ++와 달리이 널은 0과 같지 않습니다.
### 한정되지 않은 ###
이 의미는이 변수가 선언되지 않았다는 것입니다. NULL을 더 잘 구별하기 위해 샘플 코드는 다음과 같습니다.
````JavaScript
코드 사본은 다음과 같습니다.
var a = {
"foo": null
};
console.log (a [ "foo"]);
Console.log (A [ "Bar"]);
위의 코드에서는 [ "foo"] 비어있는 값, 즉 Null의 가치를 만듭니다. 그리고 전혀 선언되지 않으며 비어 있지 않습니다. 모든 사람은 출력 결과를 추측해야합니다.
코드 사본은 다음과 같습니다.
널
한정되지 않은
난
이것은 빈 값, 특별 번호입니다. 전체 이름은 숫자가 아닙니다. 조금 이상합니다. 숫자 형식이 아닌 숫자 유형 변수 또는 오류가있는 숫자 유형 변수로 이해할 수 있습니다.
부동 소수점 수치 조작 오류 (예 : 0으로 나누기) 또는 사용자는 오류 값을 반환하여 기능이 작동 중 오류가 있음을 알 수 있도록 사용자가 NAN과 동일한 변수를 만들 수 있습니다.
작은 기타
다른 나머지 진술은 Break, Switch, 계속 등과 같은 다른 기존 언어와 유사합니다.
가변 유형
이 섹션은 주로 JavaScript 객체에 대해 이야기하며 다른 유형은 거의 동일합니다.
기본 유형
node.js에 포함 된 기본 유형은 거의 다음과 같습니다.
숫자
끈
부울
정렬
처음 세 가지 유형은 직접 할당 할 수 있으며 배열 할당은 단지 참조 할당입니다. 새 변수에서 특정 값이 변경되면 이전 변수의 값도 변경됩니다. 다음 코드를 직접 시도 할 수 있습니다.
자바 스크립트
var foo = [1, 2, 3];
var bar = foo;
막대 [0] = 3;
Console.log (foo);
결과는 다음과 같습니다.
자바 스크립트
[3, 2, 3]
다시 말해, 배열이 새 배열로 복사 된 경우 값을 직접 할당하는 데 사용될 수 없지만 "깊이 복사"해야합니다.
여기서 우리는 배열을 만드는 세 가지 방법에 대해 이야기해야합니다.
첫 번째 유형 :
자바 스크립트
코드 사본은 다음과 같습니다.
var dog = new Array ();
개 [0] = "shh ~";
개 [1] = "달걀 꽃 수프";
개 [2] = "수면";
두 번째 유형 :
자바 스크립트
코드 사본은 다음과 같습니다.
var dog = new Array ( "shh ~", "Egg Flower Soup", "Sleeping");
네 번째 유형 :
자바 스크립트
코드 사본은 다음과 같습니다.
var dog = [
"shh ~",
"달걀 꽃 수프",
"자고 있는"
];
나는 개인적으로 비교적 간결한 세 번째 글쓰기 방법을 선호합니다.
JSON 객체
여기서 나는 JavaScript 객체로 분류하는 대신 JSON 객체를 별도로 꺼냅니다. 내가 조금 오도된다고 생각되면이 섹션을 직접 건너 뛸 수 있습니다.
JSON 객체와 JavaScript 객체의 차이점은 클래스의 인스턴스화가 아닌 데이터 만 저장하는 데 사용되는지 여부입니다. 실제로 JSON의 본질은 JavaScript 객체 표기법입니다.
JSON에 대한 자세한 내용은 백과 사전을 직접 방문하십시오.
node.js에서 JSON 객체를 선언하는 것은 매우 간단합니다.
자바 스크립트
코드 사본은 다음과 같습니다.
var dog = {
"pre": "shh ~",
"sub": {
"이름": "달걀 꽃 수프",
"ACT": "수면",
"시간": 12
},
"suf": [ "나는 말했다", "자고있다", "자고있다"]
};
JSON 객체에서 특정 키 이름의 키 값을 얻는 두 가지 방법이 있습니다. 첫 번째는 도트와 연결하는 것이고 두 번째는 브래킷을 사용하는 것입니다.
자바 스크립트
코드 사본은 다음과 같습니다.
개
.pre;
개 [ "pre"];
참고 : 위의 점을 사용하면 JSON의 키가 직접 따릅니다. 키를 변수로 취급하면 Dog [Key]로만 시도 할 수 있습니다. 이제 직접 시도하고 위의 JSON 객체를 가로 지르기 위해 사용할 수 있습니다. Typeof ~를 사용하는 것을 잊지 마십시오
클래스의 기초 (개체)
엄밀히 말하면, node.js의 클래스는 클래스로 간주 될 수 없습니다. 실제로, 일부 멤버 변수를 추가하는 함수 모음 일뿐입니다. 그것의 본질은 실제로 기능입니다.
그러나 상식을 위해, 우리는 이것을 다음과 나중에 "클래스"라고 부를 것이며, 인스턴스형을 "객체"라고합니다.
클래스에는 많은 기능이 있거나 본질이 기능이기 때문에 조심하지 않을 때 기능의 기본 사항에 대해 이야기 할 수 있습니다.
수업의 선언 및 인스턴스화
수업을 매우 간단하게 선언하는 것은 웃지 마십시오.
자바 스크립트
함수 foo () {
// ...
}
좋아, 우리는 foo 수업을 썼습니다.
진실이거나 가짜? ! 진짜.
믿지 않습니까? 믿지 않으면 코드를 입력하고 읽을 수 있습니다.
자바 스크립트
var bar = new foo ();
그것을 함수로 보지 말고, 그러한 형태 (신규)로 작성된 경우이 클래스의 인스턴스화입니다.
그리고이 소위 foo ()는 실제로이 foo () 클래스의 생성자입니다.
멤버 변수
회원 변수를 얻는 두 가지 좋은 방법이 있습니다.
첫 번째는 이것을 사용하는 것입니다. <변수 이름> 클래스 생성자 또는 생성자에서. 언제든지 회원 변수를 선언 할 수 있으며 외부 사용에 영향을 미치지 않습니다. 어쨌든, 선언되지 않았을 때 사용하더라도, 그것을 지원하기 위해 정의되지 않은 것이있을 것입니다. 이것이 첫 번째 방법입니다.
코드 사본은 다음과 같습니다.
자바 스크립트
함수 foo () {
this.hello = "World";
}
참고 : 이것은 호출 클래스의 멤버 변수입니다. 그렇지 않으면 함수의 로컬 변수 일뿐입니다. 이 변수의 동작 범위가 있는지 여부를 구별해야합니다.
두 번째 방법은 생성자 또는 멤버 함수 외부에서 선언하는 것이며 그 형식은 <class name> .prototype. <변수 이름> :입니다.
자바 스크립트
코드 사본은 다음과 같습니다.
함수 foo () {
// ...
}
foo.prototype.hello = "World";
위의 방법 중 어느 것이 멤버 변수의 선언인지 상관없이 다음을 볼 수 있습니다.
자바 스크립트
코드 사본은 다음과 같습니다.
var bar = new foo ();
Console.log (Bar.Hello);
이 클래스를 다음과 같이 수정할 수도 있습니다.
자바 스크립트
코드 사본은 다음과 같습니다.
함수 foo () {
this.hello = "World";
}
foo.prototype.hello = "달걀 꽃 수프";
그런 다음 위의 코드를 사용하여 출력하십시오.
계란 수프 대신 출력이 왜 세상인지 생각해보십시오.
건설자
우리는 그 전에 foo ()가 실제로 생성자라고 말했습니다. 그런 다음 분명히 매개 변수를 생성자에게 전달할 수 있으므로 다음 코드가 있습니다.
자바 스크립트
코드 사본은 다음과 같습니다.
// 코드 2.1
기능 foo (hello) {
if (hello === 정의되지 않은) {
this.hello = "World";
} 또 다른 {
hello = 안녕하세요;
}
}
(Hello === 정의되지 않은 경우)에 대한 이상한 판단이 있습니다. 이 판결의 사용은 무엇입니까? 첫 번째 가능성은 개발자가 특별히 정의되지 않은 고통을 보냈다는 것입니다. 현재로서는 정의되지 않았습니다.
또 다른 상황이 있습니다. 우리는 처음부터 JavaScript가 약한 언어라고 말했습니다. 실제로, 그것은 약한 유형 일뿐 만 아니라, 전송 매개 변수도 매우 무의미합니다. (프로그램이 더 많거나 적을 때 프로그램이 오류가 발생하지 않는 한) 원칙적으로 괜찮습니다. 다중 패스의 매개 변수는 자동으로 무시되는 반면, 몇 가지 패스의 매개 변수에는 정의되지 않은 것으로 보충됩니다.
다음 코드 만 보면 다음을 이해할 수 있습니다.
자바 스크립트
코드 사본은 다음과 같습니다.
// 코드 2.1을 연결합니다
var bar1 = new foo ();
var bar2 = new foo ( "달걀 꽃 수프");
두 개의 바 헬로 변수를 혼자서 출력하십시오. 하나는 세상이고 다른 하나는 계란 수프라는 것을 알게 될 것입니다. 분명히, 우리의 첫 BAR1이 선언되었을 때, 그것은 자동으로 node.js로 간주되었습니다.
자바 스크립트
코드 사본은 다음과 같습니다.
var bar1 = new foo (정의되지 않은);
그래서 그것이 세상이라는 말이 있습니다.
또한이 생성자에서 우리는 전달 된 매개 변수가 hello 이고이 클래스에는 this.hello 인 멤버 변수가 있음을 알 수 있습니다. 그러나 우리는 이전에 범위가 다르고 그렇지 않을 때 범위가 다르다고 말했습니다. 이 매개 변수는 생성자에서만 사용되며,이 매개 변수는 멤버 변수입니다. 이것을 사용하여 즉시 구별하므로 같은 이름이 있더라도 중요하지 않습니다.
회원 기능
회원 기능 선언
멤버 함수의 선언은 멤버 변수의 두 번째 선언 방법, 즉 <class name> .prototype. <function name> = <function>과 유사합니다.
자바 스크립트
코드 사본은 다음과 같습니다.
// 코드 2.1을 연결합니다
기능 세텔로 (Hello) {
hello = 안녕하세요;
}
foo.prototype.sethello = Sethello;
Bar1.Sethello ( "Egg Cake");
위의 코드는 명백하므로 FOO 클래스의 Sethello 함수를 구현하여 foo.hello의 값을 수정할 수 있습니다.
그러나 이렇게 쓰는 것이 조금 번거 롭지 않습니까? 다음으로 JavaScript 기능의 중요한 기능에 대해 이야기하겠습니다.
★ 익명 기능 ★
여러 번, 우리의 기능 중 일부는 한 곳에서만 참조되거나 호출 되므로이 기능에 이름을 부여하는 것이 너무 가치가 있으며 필요하지 않으므로이 기능을 일시적으로 작성하고 참조하는 사람에게이를 참조하도록 직접 요청할 수 있습니다. 따라서 함수는 다음과 같은 기능 이름을 생략 할 수 있습니다.
자바 스크립트
코드 사본은 다음과 같습니다.
기능 (hello) {
hello = 안녕하세요;
}
인용하거나 전화하는 방법에 관해서? 위의 수업을 인용 해야하는 경우 다음과 같이 작성됩니다.
자바 스크립트
코드 사본은 다음과 같습니다.
foo.prototype.sethello = function (hello) {
hello = 안녕하세요;
}
이 쓰기 방법은 멤버 함수 선언과 동일하며 많은 코드를 저장합니다. 실제로, 기본적으로 클래스 멤버 기능 선언은 이러한 익명 기능의 이러한 방식으로 선언됩니다.
익명 기능을하는 방법에 관해서는? 이것은 일반적으로 특정 함수에 의해서만 호출되는 함수를 전달할 때 다음과 같이 작성됩니다.
예를 들어, 기능의 프로토 타입이 있습니다.
자바 스크립트
코드 사본은 다음과 같습니다.
/**
* 우리는 두 가지 변수 A와 B를 통과합니다.
* A+B의 값을 계산 한 후 FUNC (NUM)로 넘겨줍니다.
* 출력으로 이동하십시오
*/
함수 sumab (a, b, func) {
var c = a + b;
func (a, b, c);
}
예를 들어, 우리는 두 가지 버전의 출력 기능이 있으며, 하나는 중국 출력이고 다른 하나는 영어 출력입니다. 익명 기능을 사용하지 않으면 :
자바 스크립트
코드 사본은 다음과 같습니다.
함수 ZH (a, b, sum) {
console.log의 값 (a + " +" + b + "는 다음과 같습니다." + sum);
}
함수 en (a, b, sum) {
console.log (a + "plus" + b + "는" + sum);
}
Sumab (1, 2, ZH);
Sumab (3, 4, en);
이 코드를 한 번 실행하면 출력이 다음과 같습니다.
1 + 2의 값은 : 3입니다
3 플러스 4는 7입니다
그러한 코드가 익명 함수의 형태 인 경우 다음과 같습니다.
자바 스크립트
코드 사본은 다음과 같습니다.
sumab (1, 2, 함수 (a, b, sum) {
console.log의 값 (a + " +" + b + "는 다음과 같습니다." + sum);
});
Sumab (3, 4, 함수 (a, b, sum) {
console.log (a + "plus" + b + "는" + sum);
});
이 양식은 일반적으로 콜백 함수에 사용됩니다. 콜백 메커니즘은 node.js 또는 javaScript의 본질입니다. 미래의 장에서 소개하겠습니다.
멤버 함수 선언에서 익명 기능을 선언하는 방법
이전 섹션에서 그것에 대해 이야기했지만 다시 이야기하겠습니다.
일반적으로 클래스 멤버 함수를 선언 할 때 익명 함수를 사용하여이를 선언합니다. 어쨌든 해당 기능은이 클래스의 멤버 기능 일뿐 아니라 다른 장소에서는 참조되거나 호출되지 않으므로 다음 코드를 사용할 수 있습니다.
자바 스크립트
코드 사본은 다음과 같습니다.
// 코드 2.1을 연결합니다
foo.prototype.sethello = function (hello) {
hello = 안녕하세요;
}
이런 식으로, 우리는 foo 클래스에 Sethello 기능이 있습니다.
2.3.4. 임의의 클래스
이것은 다시 내 말도 안됩니다. 소위 클래스의 무작위성은 JavaScript에서 Ruby와 특정 유사점을 가진 클래스를 어디서나 수정할 수 있음을 의미합니다.
예를 들어, 문자열은 실제로 클래스이며 길이와 같은 멤버 변수와 indexof 및 substr와 같은 멤버 함수가 있습니다. 그러나이 문자열의 일부 부분이 완벽하지 않고 우리 자신의 방법을 추가하고 싶다고 생각한다면, 원하는 위치에 기능을 추가 할 수 있습니다.
자바 스크립트
코드 사본은 다음과 같습니다.
String.prototype.sb = function () {
var newsstr = "";
for (var i = 0; i <this.length; i ++) {
if (i % 2 === 0) newsr += "s";
else newsr += "b";
}
리턴 Newsr;
};
이 기능의 의미는 문자열을 채우고 SB의 화신으로 만들 수 있습니다.
테스트하자 :
코드 사본은 다음과 같습니다.
var str = "shh ~ 달걀 꽃 수프가 자고 있습니다.";
Console.log (str.sb ());
다음과 같은 결과를 얻을 수 있습니다.
SBSBSBSBSBSBS
"shhh ~ 달걀 꽃 수프가 자고있다"고 말하면. 당신의 컴퓨터는 4 번 반 동안 바보가 된 것에 대해 당신을 꾸짖을 것입니다. (빨리 부딪 히다)
3. 첨부
3.1. 딥 카피
소위 딥 카피는 스스로 새 배열 또는 객체를 직접 작성하고 소스 배열 또는 객체에 대한 참조를 사용하는 대신 소스 배열 또는 개체의 기본 유형 변수 값을 하나씩 수동으로 복사하는 것입니다. 따라서 여기에는 재귀적인 전화 나 무언가가 포함됩니다.
아래는 내가 구현 한 딥 카피 함수입니다. 직접 작성하여 자신의 Node.js 지식 기반에 추가 할 수 있습니다.
자바 스크립트
코드 사본은 다음과 같습니다.
함수 cloneobject (src) {
var dest = {};
for (src의 var 키) {
if (typeof src === "object") dest [key] = cloneobject (src [key]);
else dest [key] = src [key];
}
반환 데스트;
}