JS 튜토리얼

제이에스 홈 JS 소개 JS 어디로 JS 출력 JS 문 JS 구문 JS 코멘트 JS 변수 제이에스렛 JS 상수 JS 연산자 JS 산술 JS 할당 JS 데이터 유형 JS 함수 JS 객체 JS 이벤트 JS 문자열 JS 문자열 메서드 JS 문자열 검색 JS 문자열 템플릿 JS 번호 JS 숫자 메서드 JS 배열 JS 배열 메서드 JS 배열 정렬 JS 배열 반복 JS 배열 상수 JS 날짜 JS 날짜 형식 JS 날짜 가져오기 메서드 JS 날짜 설정 방법 JS 수학 JS 랜덤 JS 부울 JS 비교 JS 조건 JS 스위치 JS 루프 In에 대한 JS 루프 의 JS 루프 JS 루프 동안 JS 브레이크 JS 이터러블 JS 세트 JS 맵 JS 유형 JS 유형 변환 JS 비트와이즈 JS 정규 표현식 JS 오류 JS 범위 JS 호이스팅 JS 엄격 모드 JS 이 키워드 JS 화살표 함수 JS 클래스 JS JSON JS 디버깅 JS 스타일 가이드 JS 모범 사례 JS 실수 JS 성능 JS 예약어

JS 버전

JS 버전 JS 2009(ES5) JS 2015(ES6) JS 2016 JS 2017 JS 2018 JS IE / 엣지 JS 연혁

JS 객체

객체 정의 개체 속성 개체 메서드 개체 표시 개체 접근자 객체 생성자 개체 프로토타입 객체 반복 가능 객체 세트 객체 맵 개체 참조

JS 함수

기능 정의 기능 매개변수 함수 호출 함수 호출 기능 적용 함수 클로저

JS 클래스

수업 소개 클래스 상속 클래스 정적

JS 비동기

JS 콜백 JS 비동기 JS 약속 JS 비동기/대기

JS HTML DOM

DOM 소개 DOM 메서드 DOM 문서 DOM 요소 DOM HTML DOM 양식 DOM CSS DOM 애니메이션 DOM 이벤트 DOM 이벤트 리스너 DOM 탐색 DOM 노드 DOM 컬렉션 DOM 노드 목록

JS 브라우저 BOM

JS 창 JS 화면 JS 위치 JS 연혁 JS 네비게이터 JS 팝업 경고 JS 타이밍 JS 쿠키

JS 웹 API

웹 API 소개 웹 양식 API 웹 기록 API 웹 스토리지 API 웹 작업자 API 웹 가져오기 API 웹 지리적 위치 API

JS 아약스

AJAX 소개 AJAX XMLHttp AJAX 요청 AJAX 응답 AJAX XML 파일 AJAX PHP AJAX ASP AJAX 데이터베이스 AJAX 애플리케이션 AJAX 예제

JS JSON

JSON 소개 JSON 구문 JSON 대 XML JSON 데이터 유형 JSON 구문 분석 JSON 문자열화 JSON 객체 JSON 배열 JSON 서버 JSON PHP JSON HTML JSON JSONP

JS 대 jQuery

jQuery 선택기 제이쿼리 HTML 제이쿼리 CSS 제이쿼리 DOM

JS 그래픽

JS 그래픽 JS 캔버스 JS 플로틀리 JS 차트.js JS 구글 차트 JS D3.js

JS 예제

JS 예제 JS HTML DOM JS HTML 입력 JS HTML 객체 JS HTML 이벤트 JS 브라우저 JS 편집기 JS 연습 JS 퀴즈 JS 인증서

JS 참조

자바스크립트 객체 HTML DOM 객체


자바스크립트 모범 사례


전역 변수를 피하고 new, 피하고, 피하고 ==, 피 하십시오.eval()


전역 변수 피하기

전역 변수의 사용을 최소화합니다.

여기에는 모든 데이터 유형, 개체 및 함수가 포함됩니다.

전역 변수와 함수는 다른 스크립트로 덮어쓸 수 있습니다.

대신 지역 변수를 사용하고 클로저 사용 방법을 배우십시오 .


항상 지역 변수 선언

함수에서 사용되는 모든 변수는 지역 변수 로 선언되어야 합니다 .

지역 변수 는 키워드, 키워드 또는 키워드 로 선언 해야 합니다 . 그렇지 않으면 전역 변수가 됩니다.varletconst

Strict 모드는 선언되지 않은 변수를 허용하지 않습니다.


상단에 선언

모든 선언을 각 스크립트나 함수의 맨 위에 두는 것은 좋은 코딩 방법입니다.

이렇게 하면:

  • 더 깔끔한 코드 제공
  • 지역 변수를 찾을 수 있는 단일 장소 제공
  • 원치 않는(암시된) 전역 변수를 더 쉽게 피할 수 있습니다.
  • 원치 않는 재선언의 가능성 감소
// Declare at the beginning
let firstName, lastName, price, discount, fullPrice;

// Use later
firstName = "John";
lastName = "Doe";

price = 19.90;
discount = 0.10;

fullPrice = price - discount;

이것은 루프 변수에도 적용됩니다.

for (let i = 0; i < 5; i++) {


변수 초기화

변수를 선언할 때 변수를 초기화하는 것은 좋은 코딩 방법입니다.

이렇게 하면:

  • 더 깔끔한 코드 제공
  • 변수를 초기화할 단일 장소 제공
  • 정의되지 않은 값 피하기
// Declare and initiate at the beginning
let firstName = "",
let lastName = "",
let price = 0,
let discount = 0,
let fullPrice = 0,
const myArray = [],
const myObject = {};

변수를 초기화하면 의도된 용도(및 의도된 데이터 유형)에 대한 아이디어를 얻을 수 있습니다.


const 로 객체 선언하기

const로 객체를 선언하면 실수로 유형이 변경되는 것을 방지할 수 있습니다.

예시

let car = {type:"Fiat", model:"500", color:"white"};
car = "Fiat";      // Changes object to string

const car = {type:"Fiat", model:"500", color:"white"};
car = "Fiat";      // Not possible

const 로 배열 선언

const로 배열을 선언하면 실수로 유형이 변경되는 것을 방지할 수 있습니다.

예시

let cars = ["Saab", "Volvo", "BMW"];
cars = 3;    // Changes array to number

const cars = ["Saab", "Volvo", "BMW"];
cars = 3;    // Not possible

new Object()를 사용하지 마십시오

  • ""대신 사용new String()
  • 0대신 사용new Number()
  • false대신 사용new Boolean()
  • {}대신 사용new Object()
  • []대신 사용new Array()
  • /()/대신 사용new RegExp()
  • function (){}대신 사용new Function()

예시

let x1 = "";             // new primitive string
let x2 = 0;              // new primitive number
let x3 = false;          // new primitive boolean
const x4 = {};           // new object
const x5 = [];           // new array object
const x6 = /()/;         // new regexp object
const x7 = function(){}; // new function object

자동 유형 변환에 주의

JavaScript는 느슨하게 입력됩니다.

변수는 모든 데이터 유형을 포함할 수 있습니다.

변수는 데이터 유형을 변경할 수 있습니다.

예시

let x = "Hello";     // typeof x is a string
x = 5;               // changes typeof x to a number

숫자는 실수로 문자열 또는 NaN(숫자가 아님)으로 변환될 수 있습니다.

수학 연산을 수행할 때 JavaScript는 숫자를 문자열로 변환할 수 있습니다.

예시

let x = 5 + 7;       // x.valueOf() is 12,  typeof x is a number
let x = 5 + "7";     // x.valueOf() is 57,  typeof x is a string
let x = "5" + 7;     // x.valueOf() is 57,  typeof x is a string
let x = 5 - 7;       // x.valueOf() is -2,  typeof x is a number
let x = 5 - "7";     // x.valueOf() is -2,  typeof x is a number
let x = "5" - 7;     // x.valueOf() is -2,  typeof x is a number
let x = 5 - "x";     // x.valueOf() is NaN, typeof x is a number

문자열에서 문자열을 빼면 오류가 발생하지 않지만 NaN(숫자가 아님)이 반환됩니다.

예시

"Hello" - "Dolly"    // returns NaN

사용 === 비교

==비교 연산자는 비교 전에 항상 (일치하는 유형으로) 변환합니다 .

연산자 는 ===값과 유형을 강제로 비교합니다.

예시

0 == "";        // true
1 == "1";       // true
1 == true;      // true

0 === "";       // false
1 === "1";      // false
1 === true;     // false

매개변수 기본값 사용

누락된 인수로 함수를 호출하면 누락된 인수의 값이 로 설정됩니다 undefined.

정의되지 않은 값은 코드를 손상시킬 수 있습니다. 인수에 기본값을 할당하는 것은 좋은 습관입니다.

예시

function myFunction(x, y) {
  if (y === undefined) {
    y = 0;
  }
}

ECMAScript 2015 는 함수 정의에서 기본 매개변수를 허용합니다.

function (a=1, b=1) { /*function code*/ }

함수 매개변수에서 함수 매개 변수 및 인수에 대해 자세히 알아보십시오.


기본값으로 스위치 종료

항상 switch진술을 끝내십시오 default. 필요없다고 생각해도.

예시

switch (new Date().getDay()) {
  case 0:
    day = "Sunday";
    break;
  case 1:
    day = "Monday";
    break;
  case 2:
    day = "Tuesday";
    break;
  case 3:
    day = "Wednesday";
    break;
  case 4:
    day = "Thursday";
    break;
  case 5:
    day = "Friday";
    break;
  case 6:
    day = "Saturday";
    break;
  default:
    day = "Unknown";
}

숫자, 문자열 및 부울을 객체로 사용하지 마십시오.

항상 숫자, 문자열 또는 부울을 기본 값으로 취급하십시오. 물건이 아닙니다.

이러한 유형을 객체로 선언하면 실행 속도가 느려지고 불쾌한 부작용이 발생합니다.

예시

let x = "John";             
let y = new String("John");
(x === y) // is false because x is a string and y is an object.

또는 더 나쁜:

예시

let x = new String("John");             
let y = new String("John");
(x == y) // is false because you cannot compare objects.

eval() 사용을 피하십시오

eval()함수는 텍스트를 코드로 실행하는 데 사용됩니다. 거의 모든 경우에 사용할 필요가 없습니다.

임의의 코드를 실행할 수 있기 때문에 보안 문제도 나타납니다.