이 장에서는 몇 가지 일반적인 자바 스크립트의 실수를 지적한다.
실수로 할당 연산자를 사용하여
프로그래머가 실수로 할당 연산자를 사용하는 경우 자바 스크립트 프로그램은 예기치 않은 결과를 생성 할 수있다 (=) 대신 비교 연산자의, (==) 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
»그것을 자신을 시도 상술 한 문제를 해결하기 위해서는 증식 분할 도와 :
자바 스크립트 문자열 속보
자바 스크립트는 두 줄에 문을 중단 할 수 있습니다 :
하지만, 문자열의 중간에 문을 깨는 것은 작동하지 않습니다 :
당신이 문자열에 문을 중단해야하는 경우 당신은 "백 슬래시"를 사용합니다 :
넓 세미콜론
때문에 잘못 세미콜론이 코드 블록은 x의 값에 관계없이 실행합니다 :
if (x == 19);
{
// code block
}
»그것을 자신을 시도 반환 정책 속보
라인의 끝에서 자동으로 문을 닫습니다 기본 자바 스크립트 동작입니다.
이 때문에,이 두 가지 예와 같은 결과를 반환한다 :
자바 스크립트는 두 개의 라인으로 문을 중단 할 수 있습니다.
이 때문에, 실시 예 3도 동일한 결과를 반환한다 :
이 같은 두 줄에 return 문을 깰 경우에, 어떤 일이 일어날 것입니다 :
이 함수는 정의되지 않은 반환합니다!
왜? 자바 스크립트를 생각하기 때문에 당신은 의미 :
설명
성명은 불완전한 같은 인 경우 :
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를 반환 믿고, 새로운 자바 스크립트 개발자들, 일반적인 실수이다 :