>  기사  >  웹 프론트엔드  >  NodeJs 기본 구문 및 type_node.js

NodeJs 기본 구문 및 type_node.js

WBOY
WBOY원래의
2016-05-16 16:14:181494검색

앞에

라고 써있어요

오늘은 Node의 종류에 대한 지식을 확인해보고자 합니다. Googol에서 기사를 봤는데, 원저자가 이 기사를 더 이상 꺼내지 않습니다. 질문이 있으시면 저에게 연락해주세요!

이 글은 JS의 기본에 관한 내용이므로 전문가라면 자동으로 건너뛸 것입니다! 나는 이전에 js에 대해 많이 쓰지 않았고 상대적으로 이 분야에 약해서 node를 작성할 때 문제가 발생했습니다. 여기에 약간의 지식을 추가하겠습니다!

텍스트

Node.js는 JavaScript 스크립팅 언어를 기반으로 합니다. 대부분의 스크립팅 언어의 일반적인 특징은 "약한 타이핑"입니다.

PHP와 달리 PHP는 새 변수가 있어도 새 변수를 선언할 필요가 없지만 JavaScript에서는 변수를 선언하기 위해 여전히 var가 필요합니다. 그리고 이 var는 C의 int, string, char 등과 같은 모든 유형, 심지어 함수의 의미도 포괄합니다.

이 기사와 다음 기사의 모든 내용은 Linux 또는 Cygwin에서 vim을 사용하여 편집한 다음(그렇지 않은 경우 자신의 방법으로 변환하세요) 명령줄에서 결과를 확인하세요.

기본문법

변수 선언

C/C에서는 다음과 같이 변수를 선언합니다.

```C

코드 복사 코드는 다음과 같습니다.

무효 foo() {}
int a = 0;
char b = 'a';
부동 c = 1.0f;
void (*d)() = foo; ///< 이렇게 썼는지 잊어버렸는데 함수 포인터입니다

Node.js에서는 다음과 같습니다.
``자바스크립트

코드 복사 코드는 다음과 같습니다.

함수 foo() {}
var a = 0;
var b = 'a';
var c = 1.0;
var d = foo;

그래서 어떤 변수든 Node.js에서는 var로 해결됩니다.

루프문

...나를 위해

이 루프 문은 기본적으로 C/C와 동일하며 둘 다

```C

코드 복사 코드는 다음과 같습니다.

for(int i = 0; i < foo; i )
{
//...
}

Node.js는 약한 유형이므로 다음만 필요합니다.
``자바스크립트

코드 복사 코드는 다음과 같습니다.

for(var i = 0; i < foo; i ) {
//...
}
...에서

PHP의 foreach와 유사한 사후 유형 루프 문입니다.

예를 들어 다음과 같은 JSON 개체가 있습니다.

자바스크립트

코드 복사 코드는 다음과 같습니다.

var foo = {
"안녕하세요": "세상",
"노드": "js",
"blahblah": "바"
};

이제 for...in을 사용하여 반복할 수 있습니다.

자바스크립트

코드 복사 코드는 다음과 같습니다.

for(foo의 var 키) {
console.log(key ": " foo[key]);
}

명령줄에 다음 명령을 입력하면:

코드 복사 코드는 다음과 같습니다.

$ 노드 foo.js

화면에 다음 내용이 표시됩니다.

코드 복사 코드는 다음과 같습니다.

안녕하세요
: 세상
노드: js
어쩌구저쩌구: 바

팁: 위에서 볼 수 있듯이 for...in 문은 JSON 개체, 배열, 개체의 키 이름을 순회하는 데 사용되지만 키 값 순회는 제공하지 않습니다. 키 값을 얻으려면 foo[<현재 키 이름>] 형식으로만 얻을 수 있습니다. 이는 PHP의 foreach와 다소 다릅니다.

하는 동안…하는, 하는…동안

이건 길게 설명하지 않겠습니다. 단지 변수 선언이 있으면 var를 사용해야 한다는 점만 다를 뿐입니다.

운영자

, -, *, /

이런 운영자들이 주목해야 할 점은 . 문자열과 숫자 연산 모두에서 작동할 수 있습니다. 약한 유형의 언어는 유형이 약하다고 말하지만 숫자가 문자열의 형태로 나타날 수도 있고 문자열이 숫자 값의 형태로 나타날 수도 있습니다. 그러나 필요한 경우에는 여전히 그것이 어떤 유형인지 말해야 합니다. 다음 코드를 사용하여 결과를 확인할 수 있습니다.

코드 복사 코드는 다음과 같습니다.

var a = "1";
var b = 2;
console.log(ab);
console.log(parseInt(a) b);

여기서 parsInt는 문자열을 int 유형의 변수로 구문 분석하는 데 사용되는 Node.js의 내장 함수입니다.

위 코드의 실행 결과는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

12
3

참고: 첫 번째 console.log 결과는 12입니다. a는 문자열이므로 b도 시스템에 의해 문자열로 추가됩니다. 결과적으로 두 문자열이 서로 붙어 12가 됩니다. 두 번째 console.log 결과는 첫 번째 a를 int 유형으로 변환했기 때문에 3입니다. 두 개의 int 유형 변수를 추가하면 결과는 당연히 3입니다.

==, ===, !=, !==

여기서 설명할 점은 이 논리연산자의 길이가 2(==, !=)인 경우 외부 값이 같은지 여부만 판단할 뿐, 유형을 판단하지는 않는다는 점입니다.

코드 복사 코드는 다음과 같습니다.

var a = 1, b = "1";
console.log(a == b);

출력된 결과는 true 입니다. 하지만 판단 중간에 등호를 추가하면 유형과 값이 동일할 때만 참이고, 그렇지 않으면 거짓입니다. 즉

코드 복사 코드는 다음과 같습니다.

var a = 1, b = "1";
console.log(a === b);

반환된 결과는 false입니다. 왜냐하면 a는 int 유형이고 b는 문자열이기 때문입니다.

그런데 조건문에 대해 이야기해 볼까요. 사실 여기도 다른 언어와 별반 차이가 없다면 두 개의 등호와 세 개의 등호만 있으면 됩니다. 그래서 너무 자세히 설명하지는 않겠습니다.

유형

여기에서는 함수가 아닌 연산자로 다루겠습니다.

이 연산자의 기능은 변수의 유형을 결정하는 것입니다. 즉, 다음 코드를 실행하면 유형 이름을 알 수 있습니다.

코드 복사 코드는 다음과 같습니다.

함수 foo() {}
var a = 0;
var b = '쉿~ 계란탕이 자고 있어요. ';
var c = 1.0;
var d = foo;
var e = { "a" : a };
var f = [ 1, 2, 3 ];
var g = null;
var h = 정의되지 않음;
console.log(typeof a);
console.log(b 유형);
console.log(c 유형);
console.log(d 유형);
console.log(e 유형);
console.log(f 유형);
console.log(g 유형);
console.log(h 유형);

여기서 실행 결과는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

번호
문자열
번호
기능
객체
객체
객체
정의되지 않음

널, 정의되지 않음, NaN

JavaScript에는 제목과 같이 세 가지 특수 값이 있습니다. 첫 번째는 C/C에서도 찾아볼 수 있지만 그 본질은

입니다.

```C

NULL 0을 정의

자바스크립트에서는 이 세 가지 값의 의미가 다릅니다.

### null ###

null은 특별한 종류의 객체로 대략 비어 있음을 의미합니다. 예:

var a = null;
누구나 다 이해하실 수 있으니 길게 설명하지 않겠습니다. 그러나 C/C와 달리 이 null은 0이 아닙니다.

### 정의되지 않음 ###

이것은 이 변수가 선언되지 않았음을 의미합니다. null을 더 잘 구별하기 위해 샘플 코드는 다음과 같습니다.

```자바스크립트

코드 복사 코드는 다음과 같습니다.

var a = {
"foo": null
};
console.log(a["foo"]);
console.log(a["bar"]);

위 코드에서는 a["foo"]의 값을 비워, 즉 null로 만듭니다. 그리고 a["bar"] 선언이 전혀 없으며 비어 있지도 않습니다. 모두가 출력 결과를 짐작했을 것입니다:

코드 복사 코드는 다음과 같습니다.


정의되지 않음

NaN

빈 값, 특수 숫자입니다. 전체 이름은 Not a Number입니다. 좀 이상하네요. 디지털 형식이 아니거나 잘못된 값을 갖는 숫자형 변수로 이해하시면 됩니다.

주로 부동 소수점 수치 연산 오류(예: 0으로 나누기)가 발생할 때 발생합니다. 이 함수 연산이 오류 값을 반환하기 위해 사용자가 직접 NaN과 동일한 변수를 만들 수도 있습니다. 잘못됐어.

작은 내장

나머지 문장은 break, switch, continue 등 기존의 다른 언어와 유사합니다.

변수형

이 섹션에서는 주로 JavaScript 개체에 대해 설명하고 다른 유형은 거의 건너뜁니다.

기본형

Node.js에는 거의 다음과 같은 기본 유형이 포함되어 있습니다.

번호
문자열
부울
배열
그 중 처음 세 가지 유형은 직접 할당할 수 있으며 배열 할당은 단지 참조 할당일 뿐입니다. 새 변수에서 값이 변경되면 이전 변수의 값도 직접 변경될 수 있습니다. :

자바스크립트
var foo = [ 1, 2, 3 ];
var bar = foo;
바[0] = 3;
console.log(foo);
결과는 다음과 같습니다.

자바스크립트
[ 3, 2, 3 ]
즉, array가 새 배열을 복사하는 경우 직접 할당을 사용할 수 없지만 "깊은 복사"를 수행해야 합니다.

배열의 세 가지 생성 방법에 대해 이야기할 필요가 있습니다.

첫 번째 유형:

자바스크립트

코드 복사 코드는 다음과 같습니다.

var dog = new Array();
dog[0] = "쉿~";
dog[1] = "계란 수프";
dog[2] = "자고 있는 중";

두 번째 유형:

자바스크립트

코드 복사 코드는 다음과 같습니다.

var dog = new Array( "쉿~", "계란탕", "잠자고 있어요" );

네 번째 유형:

자바스크립트

코드 복사 코드는 다음과 같습니다.

var 개 = [
"쉿~",
"계란탕",
"잠"
];

저는 개인적으로 좀 더 간결한 세 번째 글쓰기 방식을 선호합니다.

JSON 객체

여기에서는 JSON 개체를 JavaScript 개체로 분류하는 대신 분리합니다. 제가 약간 오해의 소지가 있다고 생각되면 이 섹션을 바로 건너뛰셔도 됩니다.

JSON 개체와 JavaScript 개체의 차이점은 클래스를 인스턴스화하는 것이 아니라 데이터를 저장하는 데만 사용되는지 여부에 있습니다. 사실 JSON의 핵심은 JavaScript Object Notation입니다.

JSON에 대한 자세한 내용은 직접 백과사전을 찾아보세요.

Node.js에서 JSON 객체를 선언하는 것은 매우 간단합니다.

자바스크립트

코드 복사 코드는 다음과 같습니다.

var 개 = {
"pre" : "쉿~",
"하위": {
"name" : "계란탕",
"act": "자고 있는",
"시간": 12
},
"suf" : [ "내가 말했지", "자고 있어", "그냥 자고 있어" ]
};

JSON 객체에서 특정 키 이름의 키 값을 가져오는 방법에는 두 가지가 있습니다. 첫 번째는 점 연결을 사용하는 것이고, 두 번째는 대괄호를 사용하는 것입니다.

자바스크립트

코드 복사 코드는 다음과 같습니다.


.pre;
개["pre"];

참고: 위의 점을 사용할 때 JSON의 키가 바로 뒤에옵니다. 키를 변수로 처리하는 경우 dog[key]로만 시도할 수 있습니다. 이제 직접 시도할 수 있습니다. ...in form은 위의 JSON 객체를 순회합니다. 야옹(meow) 유형을 사용하는 것을 잊지 마세요~

클래스(객체)의 기본

엄밀히 말하면 Node.js 클래스는 클래스로 간주할 수 없습니다. 실제로는 일부 멤버 변수가 포함된 함수의 모음일 뿐입니다. 그 본질은 실제로 기능입니다.

그러나 단순화를 위해 다음과 이후에서는 이를 "클래스"라고 하고 인스턴스화를 "객체"라고 하겠습니다.

클래스에는 많은 함수 특성이 있거나 그 본질이 함수이기 때문에 여기서는 실수로 함수의 기본을 설명할 수도 있습니다.

클래스 선언 및 인스턴스화

클래스 선언은 매우 간단합니다. 웃지 마세요.

자바스크립트
함수 foo() {
//...
}
좋아요, 우리는 foo 클래스를 작성했습니다.

진짜인가 가짜인가? ! 진짜.

믿기지 않나요? 믿을 수 없다면 코드를 입력해 확인해 보세요.

자바스크립트
var bar = new foo();
함수인지 여부에 관계없이 이 형식(new)으로 작성되면 이 클래스의 인스턴스화입니다.

그리고 소위 foo()는 실제로 foo() 클래스의 생성자입니다.

멤버변수

멤버 변수를 사용하는 방법에는 두 가지가 있습니다.

첫 번째는 클래스의 생성자나 임의의 생성자에서 this.<변수 이름>을 사용하는 것입니다. 멤버 변수는 언제든지 선언할 수 있으며, 외부적으로 사용하는데는 영향을 미치지 않습니다. 어쨌든 선언하기 전에 사용해도 이를 지원하는 undefine이 있을 것입니다. 이것이 첫 번째 방법입니다:

코드 복사 코드는 다음과 같습니다.

자바스크립트
함수 foo() {
This.hello = "세계";
}

참고: 이 항목이 추가된 경우에만 호출 클래스의 멤버 변수이고, 그렇지 않으면 함수 내의 지역 변수일 뿐입니다. this가 없을 때 변수의 범위를 구분할 필요가 있습니다.

두 번째 방법은 생성자 또는 멤버 함수 외부에서 선언하는 것입니다. 형식은 <클래스 이름>.prototype.<변수 이름>입니다.

자바스크립트

코드 복사 코드는 다음과 같습니다.

함수 foo() {
//...
}
foo.prototype.hello = "세계";

위의 어떤 방법이 멤버 변수 선언이든 관계없이 다음과 같은 효과를 볼 수 있습니다.

자바스크립트

코드 복사 코드는 다음과 같습니다.

var bar = new foo();
console.log(bar.hello);

이 클래스를 다음과 같이 수정할 수도 있습니다.

자바스크립트

코드 복사 코드는 다음과 같습니다.

함수 foo() {
This.hello = "세계";
}
foo.prototype.hello = "계란 수프";

그런 다음 위 코드를 사용하여 출력합니다.

계란 수프 대신 출력이 Still world인 이유를 생각해 보세요.

건축자

앞서 foo()는 실제로 생성자라고 말했습니다. 따라서 매개변수를 생성자에 전달할 수 있으므로 다음과 같은 코드가 있습니다.

자바스크립트

코드 복사 코드는 다음과 같습니다.

// 코드 2.1
함수 foo(안녕하세요) {
If(hello === 정의되지 않음) {
This.hello = "세계";
} 그 밖의 {
This.hello = 안녕하세요;
}
}

if(hello === undefine) 위에서 이상한 판단이 보입니다. 이 판단의 용도는 무엇입니까? 첫 번째 가능성은 개발자가 undefound in을 전달하기 위해 애썼을 가능성입니다. 이때는 undefined인 것이 이해가 됩니다.

또 다른 상황이 있습니다. 우리는 처음에 JavaScript가 약한 유형의 언어라고 말했습니다. 사실 JavaScript는 약한 유형의 언어일 뿐만 아니라 매개변수 전달도 매우 느슨합니다. 어느 정도 통과할 수 있지만(어느 정도 통과할 때 프로그램이 오류를 일으키지 않거나 논리가 오류를 만들지 않는 한) 원칙적으로는 괜찮습니다. more로 전달된 매개변수는 자동으로 무시되고, less로 전달된 매개변수는 undefound로 보완됩니다.

이해하려면 다음 코드를 살펴보세요.

자바스크립트

코드 복사 코드는 다음과 같습니다.

// 코드 2.1에서 계속
var bar1 = new foo();
var bar2 = new foo("계란 수프");

두 바의 hello 변수를 직접 출력해 보시면 하나는 월드이고 다른 하나는 계란탕 수프임을 알 수 있습니다. 분명히 첫 번째 bar1이 선언되면 Node.js는 자동으로 이를 다음과 같이 인식합니다.

자바스크립트

코드 복사 코드는 다음과 같습니다.

var bar1 = new foo(정의되지 않음);

그래서 세상이라는 말이 있습니다.

또한 이 생성자에서는 전달된 매개 변수가 hello이고 이 클래스에 this.hello라는 멤버 변수가 있음을 알 수 있습니다. 그러나 앞서 말했듯이 this가 있을 때와 없을 때의 범위는 다릅니다. 매개변수는 생성자에서만 작동하고 this가 있는 매개변수는 멤버 변수입니다. 이를 사용하면 즉시 구별되므로 이름이 같아도 문제가 되지 않습니다.

회원 기능

멤버 함수 선언

멤버 함수의 선언은 멤버 변수의 두 번째 선언 방법과 유사합니다. 즉, .prototype. = ;;

자바스크립트

코드 복사 코드는 다음과 같습니다.

// 코드 2.1에서 계속
함수 setHello(hello) {
this.hello = 안녕하세요;
}
foo.prototype.setHello = setHello;
bar1.setHello("계란 팬케이크");

위 코드는 foo.hello의 값을 수정할 수 있는 foo 클래스의 setHello 함수를 구현했습니다.

근데 이렇게 쓰기엔 좀 번거롭지 않나요? 다음으로 JavaScript 함수의 중요한 기능에 대해 이야기하겠습니다.

★ 익명기능 ★

우리 함수 중 일부는 한 곳에서만 참조되거나 호출되는 경우가 많기 때문에 이 함수에 이름을 부여하는 것은 가치도 없고 불필요하지도 않습니다. 사람들은 그것을 인용하고, 그것을 부르는 사람들은 그것을 부릅니다. 따라서 다음과 같이 함수 이름을 생략할 수 있습니다.

자바스크립트

코드 복사 코드는 다음과 같습니다.

함수(안녕하세요) {
This.hello = 안녕하세요;
}

견적이나 전화는 어떻게 하나요? 위 클래스를 참조해야 하는 경우 다음과 같이 작성합니다.

자바스크립트

코드 복사 코드는 다음과 같습니다.

foo.prototype.setHello = 함수(hello) {
This.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(" " b "의 값은 " sum);
}
함수 en(a, b, sum) {
console.log(a " 더하기 " b "는 " 합계);
}
sumab(1, 2, zh);
sumab(3, 4, en);

이 코드를 한 번 실행하면 출력 결과는 다음과 같습니다.

1 2의 값: 3
3 더하기 4는 7
해당 코드가 익명 함수 형식인 경우 다음과 같습니다.

자바스크립트

코드 복사 코드는 다음과 같습니다.

sumab(1, 2, 함수(a, b, 합계) {
​ console.log(" " b "의 값은 " sum);
});
sumab(3, 4, 함수(a, b, sum) {
console.log(a " 더하기 " b "는 " 합계);
});

이 형식은 일반적으로 콜백 함수에 사용됩니다. 콜백 메커니즘은 Node.js 또는 JavaScript의 핵심입니다. 이는 다음 장에서 소개될 것입니다.

멤버 함수 선언의 익명 함수 선언 방법

앞서에도 말씀드렸지만 다시 한번 말씀드리겠습니다.

보통 클래스의 멤버 함수를 선언할 때 익명 함수를 사용하여 선언합니다. 왜냐하면 해당 함수는 어쨌든 이 클래스의 멤버 함수일 뿐이고 다른 곳에서 별도로 참조되거나 호출되지 않으므로 다음과 같습니다. 코드:

자바스크립트

코드 복사 코드는 다음과 같습니다.

// 코드 2.1에서 계속
foo.prototype.setHello = 함수(hello) {
This.hello = 안녕하세요;
}

이런 방식으로 foo 클래스에 setHello 함수가 포함되도록 만듭니다.

2.3.4 클래스의 임의성

또 말도 안되는 소리네요. 소위 클래스의 임의성이라는 것은 JavaScript의 어느 곳에서나 클래스를 수정할 수 있다는 것을 의미하며, 이는 Ruby와 어느 정도 유사합니다.

예를 들어 string은 실제로 length와 같은 멤버 변수와 indexOf 및 substr과 같은 멤버 함수를 포함하는 클래스입니다. 하지만 이 문자열이 일부 부분에서 불완전하다고 생각하고 자체 메소드를 추가하려는 경우 원하는 위치에 다음과 같은 함수를 추가할 수 있습니다.

자바스크립트

코드 복사 코드는 다음과 같습니다.

String.prototype.sb = function() {
var newstr = "";
for(var i = 0; i < this.length; i ) {
If(i % 2 === 0) newstr = "s";
else newstr = "b";
}
뉴스 반환str;
};

이 함수의 의미는 sb의 화신이 되도록 문자열을 채우는 것입니다.

시험해 보겠습니다.

코드 복사 코드는 다음과 같습니다.

var str = "쉿~ 계란탕이 자고 있어요.";
console.log(str.sb());

다음 결과를 얻게 됩니다:

sbsbsbsbs
컴퓨터에게 "쉿~계란탕이 자고 있어요."라고 말하면 컴퓨터는 네 번 반 동안 너를 바보라고 부를 것이다. (빨리 부수세요)

3. 첨부

3.1. 딥 카피

소위 딥 카피란 새로운 배열이나 객체를 직접 생성하고, 소스 배열이나 객체의 기본 유형 변수 값을 하나씩 참조만 가져오는 것이 아니라 수동으로 복사하는 것을 의미합니다. 소스 배열 또는 객체. 따라서 여기에는 재귀 호출 등이 포함됩니다.

다음은 제가 구현한 Deep Copy 기능입니다. 직접 작성하여 자신의 Node.js 지식 베이스에 추가할 수 있습니다.

자바스크립트

코드 복사 코드는 다음과 같습니다.

함수 cloneObject(src) {
  var 대상 = {};
  for(src의 var 키) {
    if(typeof src === "객체") dest[key] = cloneObject(src[key]);
    else dest[key] = src[key];
  }
  목적지로 돌아가세요;
}
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:zepto.js_javascript 기술에서 버블링을 방지하기 위해 탭 이벤트를 구현하는 방법다음 기사:zepto.js_javascript 기술에서 버블링을 방지하기 위해 탭 이벤트를 구현하는 방법

관련 기사

더보기