다음 JavaScript 코드를 실행하면 브라우저에서 "undefinedabc"로 경고합니다.javacript의 변수가 정의 된 경우에도 "정의되지 않은"값을 유지하는 이유는 무엇입니까?
var x;
x += "abc";
alert(x);
변수 x를 정의한 것처럼 보였습니다. 그렇다면 왜 정의되지 않은 것처럼 보입니까?
다음 JavaScript 코드를 실행하면 브라우저에서 "undefinedabc"로 경고합니다.javacript의 변수가 정의 된 경우에도 "정의되지 않은"값을 유지하는 이유는 무엇입니까?
var x;
x += "abc";
alert(x);
변수 x를 정의한 것처럼 보였습니다. 그렇다면 왜 정의되지 않은 것처럼 보입니까?
undefined
은 값이 할당되지 않은 변수의 기본값입니다. 따라서 var x;
은 a = undefined
을 의미합니다. "abc"
을 추가하면 실제로는 undefined + "abc"
이됩니다. 마지막으로 undefined
은 "undefined"
으로 문자열이 표시되고 "abc"
으로 연결되고 "undefinedabc"
이됩니다.
var x = '';
x += "abc";
alert(x); // "abc"
This MDN article이 동작을 설명
var에 x
를 초기화 CONCAT하기 위해, 당신은 그것에 빈 문자열을 (자바 스크립트 dinamically-입력했는지 기억) 할당해야합니다.
당신이 나에게 지적했기 때문에이 대답을 받아 들일 것입니다. 변수의 기본값은 undefined입니다. – Tom
도와 드리겠습니다. 감사 :) –
var x = "";
x += "abc";
alert(x);
시도해보십시오. 'abc'
및 undefined
을 추가하려고하면 undefinedabc
이됩니다.
먼저 즉, Variable Statement의 동작을 검사 :
"Variables are initialised to undefined when created."
그 다음 addition operator 동작 검사 (compound assignment는 =
앞에 것에 대응 연산자의 동작을 적용한다).
구체적 점 7 : "abc"
문자열이기 때문에
"If Type(lprim) is String or Type(rprim) is String, then
Return the String that is the result of concatenating ToString(lprim) followed by ToString(rprim)"
따라서, x
는 ToString에 따른 문자열로 변환한다. 위에서 알 수 있듯이 x는 정의되지 않습니다.
마지막으로 추상 작업 ToString의 동작, 즉 정의되지 않은 인수가 "정의되지 않은"문자열이라는 결과를 확인하십시오.
선언과 정의를 혼동하지 마십시오. – Eric
값을 지정하지 않는 한 그 값은 "정의되지 않음"입니다. 문자열에'+ ='를 사용하면 항상'old' 문자열 값을 받아서 새로운 문자열 값을 추가합니다. 하지만 'old'문자열 값은 "undefined"입니다. – devnull69
에릭에게 감사드립니다. 나는 그 실수를 저질렀습니다. – Tom