(function () {
var local = 1 ;
eval("local = 3; console.log(local)"); // "3"을 기록합니다.
console.log(local); // "3"을 기록합니다.
}( ));
(function () {
var local = 1;
Function("console.log(typeof local);")(); // 정의되지 않은 로그를 기록합니다
}());
parseInt())를 사용한 숫자 변환
parseInt()를 사용하면 문자열에서 숫자 값을 가져올 수 있습니다. 이 메서드는 종종 생략되지만 그렇게 해서는 안 되는 또 다른 기수 매개변수를 허용합니다. 문자열이 "0"으로 시작하면 문제가 발생할 수 있습니다. 예를 들어, 일시적으로 양식 필드를 입력할 때 ECMAScript 3에서는 "0"으로 시작하는 문자열이 8진수로 처리되지만 ECMAScript에서는 변경되었습니다. 5. 모순과 예상치 못한 결과를 방지하려면 항상 기수 매개변수를 지정하십시오.
var Month = "06",
year = "09";
month = parsInt(month, 10);
year = parsInt(year, 10)
이 예에서는 기본 매개변수를 무시합니다. 예를 들어, parInt(연도)를 사용하는 경우 "09"는 8진수로 처리되고(예: parsInt(year, 8) 실행) 09는 8진수의 유효한 숫자가 아니기 때문에 반환된 값은 0이 됩니다.
대체 방법은 다음을 포함하여 문자열을 숫자로 변환하는 것입니다.
"08" // 결과는 8입니다.
Number("08") // 8
parseInt를 사용하기 때문에 일반적으로parseInt()보다 빠릅니다. () 메소드는 이름에서 알 수 있듯이 단순한 구문 분석 및 변환이 아닙니다. 그러나 예를 들어 "08 hello"를 입력하려는 경우,parseInt()는 숫자를 반환하고, 그렇지 않으면 NaN으로 끝납니다.
코딩 규칙
코딩 규칙을 설정하고 따르는 것이 중요합니다. 이렇게 하면 코드가 일관되고 예측 가능하며 읽기 쉽고 이해하기 쉬워집니다. 팀에 합류한 새로운 개발자는 사양을 읽고, 다른 팀 구성원이 작성한 코드를 이해하고, 작업을 더 빠르게 시작할 수 있습니다.
회의나 메일링 리스트에서는 코딩 표준의 특정 측면(예: 코드 들여쓰기, 탭 또는 공백)에 대해 열띤 논쟁이 많이 발생합니다. 당신이 조직에서 규범의 채택을 제안하는 사람이라면, 다양한 반대나 강력한 의견에 직면할 준비를 하십시오. 규범의 세부 사항에 집착하는 것보다 규범을 확립하고 준수하는 것이 훨씬 더 중요하다는 것을 기억하십시오.
들여쓰기
들여쓰기 없이는 기본적으로 코드를 읽을 수 없습니다. 유일하게 나쁜 점은 들여쓰기가 일관성이 없다는 것입니다. 왜냐하면 사양을 따르는 것처럼 보이지만 도중에 혼란과 놀라움을 초래할 수 있기 때문입니다. 들여쓰기를 적절하게 사용하는 것이 중요합니다.
일부 개발자는 누구나 자신이 원하는 공백 수로 탭을 표시하도록 편집기를 조정할 수 있기 때문에 탭 들여쓰기를 선호합니다. 어떤 사람들은 공백을 좋아합니다. 일반적으로 4개는 팀의 모든 사람이 동일한 기준을 따르는 한 중요하지 않습니다. 예를 들어 이 책에서는 들여쓰기를 위해 4개의 공백을 사용합니다. 이는 JSLint의 기본 들여쓰기이기도 합니다.
어떤 내용을 들여쓰기해야 하나요? 규칙은 간단합니다. 중괄호 안에 무엇이 들어가는지입니다. 이는 함수 본문, 루프(do, while, for, for-in), if, 스위치 및 객체 리터럴의 객체 속성을 의미합니다. 다음 코드는 들여쓰기를 사용한 예시입니다.
함수 외부 (a, b) {
var c = 1,
d = 2,
내부
if (a > b) {
inner = 함수 () {
return {
r: c - d
};
}
} else {
inner = function () {
return {
r: c d
};
};
}
return inner;
}
중괄호{}(중괄호)
중괄호라고도 함 , 아래 동일)은 선택사항인 경우에도 항상 사용해야 합니다. 기술적으로 in 또는 for에 문이 하나만 있는 경우 중괄호가 필요하지 않지만 어쨌든 항상 중괄호를 사용해야 합니다. 이렇게 하면 코드가 더 일관되고 업데이트하기가 더 쉬워집니다.
문이 하나만 있는 for 루프가 있다고 가정해 보세요. 구문 분석 오류 없이 중괄호를 무시할 수 있습니다.
// 잘못된 예
( var i = 0; i < i = 1)
alert(i);
그러나 나중에 메인 루프에 다른 코드 줄이 추가되면 어떻게 될까요?
// 잘못된 예
( var i = 0; i < i = 1)
alert(i);
alert(i "는 "(i % 2 ? "홀수")
두 번째 경고는 이미 루프 외부에 있으므로 들여쓰기가 사용자를 속였을 수 있습니다. 장기적인 계획을 위해서는 항상 코드 한 줄에 해당하는 중괄호를 사용하는 것이 가장 좋습니다.
// 좋은 예
for (var i = 0; i < 10; i = 1) {
alert(i); >}
조건이 유사한 경우:
// Bad
if (true)
alert(1)
else
alert(2)
// OK
if (true); {
alert(1);
} else {
alert(2);
}
Brace Location 열기)
개발자마다 위치에 대한 선호도가 다릅니다. 여는 중괄호 - in 같은 줄 또는 다음 줄.
if (true) {
alert ("참입니다!");
}
//또는
if (참)
{
alert("참입니다!")
}
이 예에서는 인은 인을 보고 지혜는 지혜를 보지만 괄호의 위치가 다르면 행동이 달라지는 경우도 있습니다. 이는 세미콜론 삽입 메커니즘 때문입니다. JavaScript는 까다롭지 않으며 세미콜론으로 코드 줄을 끝내지 않기로 선택한 경우 이를 보완합니다. 예를 들어 객체 리터럴을 반환하고 여는 괄호가 다음 줄에 있는 경우 이 동작으로 인해 문제가 발생할 수 있습니다.
// 경고: 예상치 못한 반환 값
function func() {
return
// 다음 코드는 실행되지 않습니다
{
name : "Batman"
}
}
함수가 name 속성을 가진 객체를 반환할 것으로 기대한다면 놀랄 것입니다. 암시적 세미콜론으로 인해 함수는 정의되지 않은 값을 반환합니다. 이전 코드는
/ / 경고: 예기치 않은
function func()의 반환 값 {
return undefine;
// 다음 코드는 실행되지 않습니다.
{
name : "Batman"
}
}
즉, 항상 중괄호를 사용하고 항상 같은 줄에 중괄호 앞에 명령문을 넣으세요.
function func() {
return {
name : "Batman"
};
세미콜론에 대한 참고 사항: 중괄호를 사용하는 것과 마찬가지로 JavaScript 파서가 암시적으로 세미콜론을 생성할 수 있더라도 항상 세미콜론을 사용해야 합니다. 이는 보다 과학적이고 엄격한 코드를 촉진할 뿐만 아니라 이전 예제에서 볼 수 있듯이 혼란스러운 영역을 해결하는 데도 도움이 됩니다.
공백(White Space)
공백을 사용하는 것도 코드의 가독성과 일관성을 높이는 데 도움이 됩니다. 영어 문장을 작성할 때 쉼표와 마침표 뒤에 공백을 사용합니다. JavaScript에서는 목록과 같은 표현식(쉼표와 동일) 및 닫는 문("아이디어" 완성과 관련) 뒤에 공백을 추가하여 동일한 논리를 따를 수 있습니다.
공백을 사용하기에 적합한 위치는 다음과 같습니다.
for 루프의 세미콜론으로 구분된 부분: 예: for (var i = 0; i < 10; i = 1) {...}
for 루프 다음에서 초기화된 여러 변수(i 및 max): for (var i = 0, max = 10; i < max; i = 1) {...}
배열 항목을 구분하는 쉼표 뒤: var a = [1, 2, 3];
객체 속성의 쉼표와 속성 이름과 속성 값을 구분하는 콜론 뒤: var o = {a: 1, b: 2}
한정된 함수 매개변수 : myFunc(a , b, c)
함수 선언의 중괄호 앞: function myFunc() {}
익명 함수 표현식 뒤 function: var myFunc = function () {}
사용 모든 연산자와 피연산자를 구분하는 공백은 또 다른 좋은 용도입니다. 즉, -, *, =, <, >, <=, >=, ===, !==, &&, ||, 공백은 다음과 같습니다. = 등 전후에 필요합니다.
// 느슨하고 일정한 간격
// 코드를 더 읽기 쉽게 만듭니다
// 더 "통기성"으로 만듭니다.
var d = 0,
a = b
if (a && b && c) {
d = a % c;
a = d;
}
// 부정 예시
// 간격이 없거나 고르지 않음
// 코드를 혼란스럽게 만듭니다
var d = 0,
a = b
if (a&&b&c) {
d=a % c
a = d
}
마지막으로 주목해야 할 공간은 중괄호 사이의 간격입니다. 공백을 사용하는 것이 가장 좋습니다. 함수, if-else 문, 루프 및 객체 리터럴의 왼쪽 중괄호({) 앞에
else 또는 while 사이에 있는 오른쪽 중괄호(})
공백은 다음과 같습니다. 사용되는 한 가지 단점은 파일 크기가 증가하지만 압축에는 이러한 문제가 없다는 것입니다.
코드 가독성에서 흔히 간과되는 측면은 세로 공백을 사용하는 것입니다. 문헌에서 단락을 구분하는 것처럼 빈 줄을 사용하여 코드 단위를 구분할 수 있습니다.
명명 규칙
코드를 더욱 예측 가능하고 유지 관리하기 쉽게 만드는 또 다른 방법은 명명 규칙을 채택하는 것입니다. 이는 변수와 함수의 이름을 같은 방식으로 지정해야 함을 의미합니다.
다음은 제안된 명명 규칙을 그대로 채택하거나 원하는 대로 조정할 수 있습니다. 마찬가지로, 규범이 무엇인지보다 규범을 따르는 것이 더 중요합니다.
생성자를 대문자로 작성합니다(대문자화 생성자)
JavaScript에는 클래스가 없지만 new가 호출하는 생성자가 있습니다.
var adam = new Person()
생성자는 여전히 간단하기 때문입니다. 함수 , 함수 이름만 보면 이것이 생성자인지 일반 함수인지를 알 수 있습니다.
생성자 이름을 지정할 때 대문자의 첫 글자는 암시적인 효과가 있습니다. 소문자로 이름이 지정된 함수 및 메서드는 new로 호출하면 안 됩니다.
function MyConstructor() {...}
function myFunction() {...}
단어 분리 )
변수나 함수 이름에 여러 단어가 포함된 경우 단어 분리에 대한 통일된 표준을 따르는 것이 가장 좋습니다. 각 단어의 첫 글자를 대문자로 표기하세요.
생성자의 경우 MyConstructor()와 같이 대문자 카멜 표기법을 사용할 수 있습니다. 함수 및 메소드 이름에는 myFunction(),calculateArea() 및 getFirstName()과 같은 소문자 카멜 표기법을 사용할 수 있습니다.
변수가 함수가 아니면 어떻게 되나요? 개발자는 종종 camelCase 표기법을 사용하지만 대안은 소문자 단어와 밑줄을 사용하는 것입니다(예: first_name, favorite_bands 및 old_company_name). 이 표기법은 함수를 다른 식별자(프로토타입 및 객체)와 시각적으로 구별하는 데 도움이 됩니다.
ECMAScript 속성과 메서드는 Camel 표기법을 사용하지만 여러 단어로 구성된 속성 이름은 드물습니다(정규 표현식 객체의 lastIndex 및ignoreCase 속성).
기타 명명 패턴
때때로 개발자는 언어 기능을 보완하거나 대체하기 위해 명명 규칙을 사용합니다.
예를 들어 JavaScript에서는 상수를 정의할 수 있는 방법이 없습니다(Number, MAX_VALUE와 같은 일부 내장 상수는 있지만). 따라서 개발자는 전체 대문자 표기 규칙을 사용하여 수명 주기 동안 변경되지 않는 변수의 이름을 지정합니다. 다음과 같은 프로그램:
// 멀리서만 볼 수 있는 귀중한 상수
var PI = 3.14,
MAX_WIDTH = 800
코드 복사
모두 대문자로 사용하는 또 다른 규칙이 있습니다. : 전역변수 이름은 모두 대문자입니다. 전역 변수를 모두 대문자로 명명하면 전역 변수의 수를 줄이는 동시에 쉽게 구별할 수 있게 됩니다.
사양을 사용하여 기능을 시뮬레이션하는 또 다른 방법은 비공개 멤버를 사용하는 것입니다. JavaScript에서는 진정한 비공개가 가능하지만 개발자는 비공개 속성이나 메서드를 나타내기 위해 밑줄 접두사를 사용하는 것이 더 쉽다는 것을 알게 됩니다. 다음 예를 고려하십시오.
var person = {
getName: function () {
return this._getFirst() ' ' this._getLast()
},
_getFirst: function() {
// ...
},
_getLast: 함수 () {
// ...
}
};
이 예에서 getName()은 공개 메소드와 부분적으로 안정적인 API를 나타냅니다. 그리고 _getFirst() 및 _getLast()는 비공개를 나타냅니다. 이들은 여전히 일반적인 공개 메소드이지만 밑줄 접두사는 person 객체의 사용자에게 이러한 메소드가 다음 버전에서 작동이 보장되지 않으며 직접 사용할 수 없음을 경고하는 데 사용됩니다. noman 옵션을 :false로 설정하지 않으면 JSLint는 밑줄 접두사를 사용하지 않습니다.
다음은 몇 가지 일반적인 _private 사양입니다.
name_ 및 getElements_()와 같이 개인용을 나타내려면 뒤에 밑줄을 사용하십시오.
_protected 속성을 나타내려면 밑줄 접두사를 사용하고 __private(Private)을 나타내려면 두 개의 밑줄 접두사를 사용하십시오. ) 속성
Firefox의 일부 내장 변수 속성은 언어의 기술적 부분에 속하지 않으며 __proto__ 및 __parent__와 같이 두 개의 선행 밑줄과 두 개의 후행 밑줄로 표시됩니다.
댓글 쓰기
다른 사람이 당신처럼 코드를 건드리지 않더라도 코드에 댓글을 달아야 합니다. 보통 문제를 깊이 있게 공부하면 그 코드가 어떤 용도로 사용되는지 확실히 알 수 있지만, 일주일 뒤에 다시 돌아오면 그것이 어떻게 작동하는지 알아내기 위해 많은 뇌세포를 소비했을 것입니다.
분명히 주석은 극단적으로 갈 수 없습니다. 각각의 개별 변수 또는 별도의 줄입니다. 그러나 일반적으로 모든 함수, 해당 매개변수 및 반환 값 또는 특이한 기술이나 방법을 문서화해야 합니다. 주석은 미래의 코드 독자에게 많은 힌트를 줄 수 있다는 점을 기억하십시오. 독자가 코드를 이해하려면 (너무 많이 읽지 않고도) 주석과 함수 속성 이름만 있으면 됩니다. 예를 들어, 특정 작업을 수행하는 프로그램 라인이 5~6개 있을 때 해당 라인의 목적과 해당 라인이 존재하는 이유에 대한 설명을 제공하면 독자는 이 세부 정보를 건너뛸 수 있습니다. 주석과 코드의 비율에 대한 엄격하고 빠른 규칙은 없으며 코드의 일부 부분(예: 정규 표현식)에는 코드보다 주석이 더 많을 수 있습니다.
가장 중요하지만 따라하기 가장 어려운 습관은 댓글을 최신 상태로 유지하는 것입니다. 오래된 댓글은 댓글이 전혀 없는 것보다 오해의 소지가 더 많기 때문입니다.
저자 소개
Stoyan Stefanov는 Yahoo! 웹 개발자, 작가, 기고자이자 여러 O'Reilly 도서의 기술 평론가입니다. 그는 컨퍼런스와 자신의 블로그(www.phpied.com)에서 웹 개발 주제에 관해 자주 강연합니다. Stoyan은 또한 smush.it 이미지 최적화 도구의 창시자이자 YUI 기고자이자 Yahoo의 성능 최적화 도구 YSlow 2.0의 설계자이기도 합니다.
이 기사의 출처: http://www.zhangxinxu.com/wordpress/?p=1173
원문 영문 텍스트: http://net.tutsplus.com/tutorials/javascript-ajax/the- Essentials-of- writing-high-quality-javascript/
동기화 및 결론
이 글은 디렉토리 색인에 동기화되었습니다: JavaScript 시리즈에 대한 심층적 이해
심층 원문 작성, 번역, 재인쇄 등 JavaScript 시리즈 기사에 대한 이해 다른 유형의 기사가 도움이 된다면 추천하고 지원하여 삼촌이 글을 쓸 동기를 부여해 주세요.