최신 웹 개발 튜토리얼
 

JavaScript일반적인 실수


이 장에서는 몇 가지 일반적인 자바 스크립트의 실수를 지적한다.


실수로 할당 연산자를 사용하여

프로그래머가 실수로 할당 연산자를 사용하는 경우 자바 스크립트 프로그램은 예기치 않은 결과를 생성 할 수있다 (=) 대신 비교 연산자의, (==) if 문에.

if 문은 반환 false x는 10과 동일하지 않기 때문에 (예상대로) :

var x = 0;
if (x == 10)
»그것을 자신을 시도

if 문은 반환 true 10에 해당하기 때문에, (하지 예상 아마)

var x = 0;
if (x = 10)
»그것을 자신을 시도

if 문은 반환 false 0이 false이기 때문에, (하지 예상 아마)

var x = 0;
if (x = 0)
»그것을 자신을 시도

할당은 항상 과제의 값을 반환합니다.


느슨한 비교를 기대

정기적으로 비교, 데이터 형식은 중요하지 않습니다. 이 경우 문은 반환 true :

var x = 10;
var y = "10";
if (x == y)
»그것을 자신을 시도

엄격한 비교하여, 데이터 타입 중요한가. 이 경우 문은 반환 false :

var x = 10;
var y = "10";
if (x === y)
»그것을 자신을 시도

이 스위치 문은 엄격한 비교를 사용하는 것이 잊지 일반적인 실수이다 :

이 경우 스위치는 경고를 표시합니다 :

var x = 10;
switch(x) {
    case 10: alert("Hello");
}
»그것을 자신을 시도

이 경우 스위치는 경고를 표시하지 않습니다 :

var x = 10;
switch(x) {
    case "10": alert("Hello");
}
»그것을 자신을 시도

혼란 추가 및 연결

추가 숫자를 추가하는 방법에 대한 것입니다.

연결 문자열을 추가하는 방법에 대한 것입니다.

자바 스크립트에서 두 작업은 동일한 + 연산자를 사용합니다.

이 때문에, 다수의 같은 번호를 추가하는 문자열로 번호를 추가하는 다른 결과를 생성 할 것이다 :

var x = 10 + 5;          // the result in x is 15
var x = 10 + "5";        // the result in x is "105"
»그것을 자신을 시도

두 변수를 추가 할 때, 결과를 예측하기 어려울 수있다 :

var x = 10;
var y = 5;
var z = x + y;           // the result in z is 15

var x = 10;
var y = "5";
var z = x + y;           // the result in z is "105"
»그것을 자신을 시도

오해 수레

자바 스크립트의 모든 숫자는 64 비트 부동 소수점 숫자 (수레)로 저장됩니다.

자바 스크립트를 포함한 모든 프로그래밍 언어는 정밀 부동 소수점 값으로 어려움을 겪고 :

var x = 0.1;
var y = 0.2;
var z = x + y            // the result in z will not be 0.3
if (z == 0.3)            // this if test will fail
»그것을 자신을 시도

상술 한 문제를 해결하기 위해서는 증식 분할 도와 :

var z = (x * 10 + y * 10) / 10;       // z will be 0.3
»그것을 자신을 시도

자바 스크립트 문자열 속보

자바 스크립트는 두 줄에 문을 중단 할 수 있습니다 :

예 1

var x =
"Hello World!";
»그것을 자신을 시도

하지만, 문자열의 중간에 문을 깨는 것은 작동하지 않습니다 :

예 2

var x = "Hello
World!";
»그것을 자신을 시도

당신이 문자열에 문을 중단해야하는 경우 당신은 "백 슬래시"를 사용합니다 :

예 3

var x = "Hello \
World!";
»그것을 자신을 시도

넓 세미콜론

때문에 잘못 세미콜론이 코드 블록은 x의 값에 관계없이 실행합니다 :

if (x == 19);
{
    // code block 
}
»그것을 자신을 시도

반환 정책 속보

라인의 끝에서 자동으로 문을 닫습니다 기본 자바 스크립트 동작입니다.

이 때문에,이 두 가지 예와 같은 결과를 반환한다 :

예 1

function myFunction(a) {
    var power = 10 
    return a * power
}
»그것을 자신을 시도

예 2

function myFunction(a) {
    var power = 10;
    return a * power;
}
»그것을 자신을 시도

자바 스크립트는 두 개의 라인으로 문을 중단 할 수 있습니다.

이 때문에, 실시 예 3도 동일한 결과를 반환한다 :

예 3

function myFunction(a) {
    var
    power = 10; 
    return a * power;
}
»그것을 자신을 시도

이 같은 두 줄에 return 문을 깰 경우에, 어떤 일이 일어날 것입니다 :

예 4

function myFunction(a) {
    var
    power = 10; 
    return
    a * power;
}
»그것을 자신을 시도

이 함수는 정의되지 않은 반환합니다!

왜? 자바 스크립트를 생각하기 때문에 당신은 의미 :

예 5

function myFunction(a) {
    var
    power = 10; 
    return;
    a * power;
}
»그것을 자신을 시도

설명

성명은 불완전한 같은 인 경우 :

var

자바 스크립트는 다음 줄을 읽어 문을 완료하려고합니다 :

power = 10;

그러나이 문은 완료 이후 :

return

자바 스크립트는 자동으로이처럼 닫습니다 :

return;

폐쇄 세미콜론으로 문 (종료)이 자바 스크립트에서 선택하기 때문에이 문제가 발생합니다.

그것이 완전한 문장 때문에 JavaScript는 라인의 끝에 return 문을 닫을 것이다.

return 문을 중단하지 마십시오.


명명 된 인덱스와 배열 액세스

많은 프로그래밍 언어라는 인덱스 배열을 지원합니다.

라는 인덱스 배열은 연관 배열 (또는 해시)이라고합니다.

자바 스크립트라는 인덱스 배열을 지원하지 않습니다.

자바 스크립트에서 배열은 번호가 인덱스를 사용 :

var person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
var x = person.length;         // person.length will return 3
var y = person[0];             // person[0] will return "John"
»그것을 자신을 시도

자바 스크립트에서 객체는 인덱스 이름을 사용합니다.

명명 된 인덱스를 사용하는 경우 배열에 액세스 할 때, 자바 스크립트는 표준 객체 배열을 재정의합니다.

자동 재정의 한 후, 배열 방법과 속성은 정의되지 않았거나 잘못된 결과를 생성합니다 :

예:

var person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
var x = person.length;         // person.length will return 0
var y = person[0];             // person[0] will return undefined
»그것을 자신을 시도

쉼표와 배열 정의 종료

잘못된 :

points = [40, 100, 1, 5, 25, 10,];

일부 JSON과 자바 스크립트 엔진이 실패하거나 예기치 않게 작동합니다.

옳은:

points = [40, 100, 1, 5, 25, 10];

쉼표와 개체 정의 종료

잘못된 :

person = {firstName:"John", lastName:"Doe", age:46,}

일부 JSON과 자바 스크립트 엔진이 실패하거나 예기치 않게 작동합니다.

옳은:

person = {firstName:"John", lastName:"Doe", age:46}

정의되지 않은이 NULL이

자바 스크립트로, null가 정의되지 않은 변수, 속성 및 메서드위한 객체입니다.

널 (null)으로는, 목적은, 그렇지 않으면 정의되지 않습니다 정의되어야한다.

당신은 객체가 존재하는지 테스트하려면 개체가 정의되지 않은 경우,이 오류가 발생합니다 :

잘못된 :

if (myObj !== null && typeof myObj !== "undefined") 

이 때문에, 먼저)의 typeof를 (테스트해야합니다 :

옳은:

if (typeof myObj !== "undefined" && myObj !== null) 

기대 블록 레벨 범위

자바 스크립트는 각 코드 블록에 대한 새 범위를 만들지 않습니다.

그것은 자바 스크립트의 많은 프로그래밍 언어에서 사실,하지만 사실이다.

그것은이 코드는 undefined를 반환 믿고, 새로운 자바 스크립트 개발자들, 일반적인 실수이다 :

for (var i = 0; i < 10; i++) {
    // some code
}
return i;
»그것을 자신을 시도