[0] 5가지 데이터 유형:
[0.1]기본 데이터 유형: 정의되지 않음, Null, 부울, 숫자, 문자열
[0.1.1] 기본 유형 값은 단순 데이터 세그먼트를 의미하며, 5가지 기본 유형은 변수에 저장된 실제 값을 조작할 수 있기 때문에 값으로 접근합니다
[0.1.2] 기본 유형 값은 메모리에서 고정된 크기의 공간을 차지하며 스택 메모리에 저장됩니다. 한 변수에서 다른 변수로 기본 유형의 값을 복사하면 해당 값의 복사본이 생성됩니다.
[0.1.3] 기본 유형 값에 속성을 추가할 수 없음 [0.2] 참조 데이터 유형: 객체
[0.2.1] 참조형 값은 여러 개의 값으로 구성될 수 있는 객체를 의미합니다. Node.js는 메모리 위치에 직접 접근하는 것을 허용하지 않습니다. 즉, Operation 객체의 메모리 공간에 직접 접근할 수 없습니다. 객체를 조작할 때 실제로는 실제 객체가 아닌 객체에 대한 참조를 조작하는 것입니다.
참조 유형 값을 포함하는 변수에는 실제로 개체 자체가 아니라 개체에 대한 포인터가 포함되어 있는 개체가 있을 수 있습니다. 한 변수에서 다른 변수로 참조 유형 값을 복사하면 실제로 포인터가 복사되므로 두 변수는 궁극적으로 동일한 개체를 가리킵니다.
[0.2.3] 참조 유형 값에 대해 속성 및 메서드를 추가할 수 있으며 해당 속성 및 메서드를 변경 및 삭제할 수도 있습니다
[1]정의되지 않음
[1.1] 정의되지 않은 유형에는 정의되지 않은 값이 하나만 있습니다.[1.2]var a 96b4fef55684b9312718d5de63fb7121 var a = 정의되지 않음;
[1.3] 선언되지 않은 변수의 경우 데이터 유형을 감지하기 위해 typeof 연산자를 사용하는 작업 하나만 수행할 수 있습니다. [단, 엄격 모드에서는 오류가 발생합니다]
[1.4] 출연 장면 :
[1.4. 1] 미할당 변수 선언객체의 존재하지 않는 속성 가져오기
[1.4.3] 반환값이 없는 함수의 실행 결과
[1.4.4] 함수의 매개변수는
에 전달되지 않습니다.
[1.4.5]void(표현식)[1.5]유형 변환
부울(정의되지 않음):false
숫자(정의되지 않음):NaN
문자열(정의되지 않음):'정의되지 않음'
[2]무효
[2.1] Null 유형에는 논리적 관점에서 null인 값이 하나만 있습니다.
[2.2] 정의된 변수를 객체 저장에 사용할 경우 변수를 null로 초기화하는 것이 가장 좋습니다[2.3] 실제로 정의되지 않은 값은 null 값에서 파생되므로 정의되지 않음 == null
[2.4] 발생 시나리오 : 객체가 존재하지 않는 경우
[2.5]유형 변환
불리언(null) : false
숫자(null):0
문자열(null):'null'
[참고 1] null은 null 객체 포인터, []는 빈 배열, {}는 빈 객체, 세 개는 다릅니다
[참고 2]null은 사용자 정의 속성을 추가할 수 없습니다
[3]부울
[3.1] Boolean 유형에는 true와 false의 두 가지 값만 있습니다.
[3.2] 출연 장면 :[3.2.1] 조건문을 사용하면 은둔 유형 변환이 시스템에 의해 수행됩니다.
[3.2.2]리터럴 또는 변수 정의
[3.3]유형 변환
숫자(true): 1 || 숫자(false) : 0
문자열(true):'true' || 문자열(false):'false'
[3.4]부울()
부울(정의되지 않음):false
부울(null):false
부울(비어 있지 않은 객체에는 빈 배열 [] 및 빈 객체 {}가 포함됨): true
부울(0이 아님): true || 부울(0 및 NaN):false
부울(공백을 포함하는 비어 있지 않은 문자열):true || Boolean(''):false
[참고] true가 반드시 1이 되는 것은 아니며, false가 반드시 0이 되는 것은 아닙니다
[4]숫자
[4.1] Number 유형은 IEEE754 형식을 사용하여 정수 및 부동 소수점 값을 나타냅니다.
[참고] -0 값을 사용하여 숫자로 변환할 수 있습니다[4.2] 세 가지 리터럴 형식은 10진수, 8진수, 16진수
첫 번째 숫자는 0이어야 하며 그 뒤에는 8진수 시퀀스(0-7)가 와야 합니다. 리터럴 값의 값이 범위를 초과하면 선행 0이 무시되고 다음 값은 10진수로 구문 분석됩니다.
[4.2.2] 8진수 리터럴은 엄격 모드에서 유효하지 않으며 js에서 오류가 발생하게 됩니다
[4.2.3] 16진수 리터럴 값의 처음 두 자리는 0x여야 하고 그 뒤에 일련의 16진수 숫자가 와야 하며 문자는 대문자 또는 소문자일 수 있습니다
16진법 리터럴 값의 값이 범위를 벗어난 경우 오류가 보고됩니다
[4.2.5] 산술 계산을 수행할 때 8진수와 16진수로 표현된 모든 값은 결국 10진수 값으로 변환됩니다
[4.3] 수치 표현:
[4.3.1] 양수 0과 음수 0은 js에 저장될 수 있으며 동일한 것으로 간주됩니다
[4.3.2] 부동 소수점 값: 값에는 소수점이 포함되어야 하며, 소수점 뒤에는 최소 한 자릿수가 있어야 합니다.
[4.3.2.1] 부동 소수점 값은 정수 값을 저장하는 데 두 배의 메모리 공간이 필요하므로 js는 숫자가 없는 경우 부동 소수점 값을 정수 값으로 변환합니다. 또는 소수점 이하 부동 소수점 값으로 정수를 나타내며, 이 값은 정수값으로 저장됩니다.
[4.3.2.2] 부동 소수점 값의 가장 높은 정밀도는 소수점 17자리입니다.[4.3.2.3] 매우 크거나 매우 작은 숫자의 경우 과학 표기법 e로 표현되는 부동 소수점 값으로 표현할 수 있습니다.
[4.3.2.4] js는 기본적으로 소수점 이하 0이 6개 이상인 부동 소수점 값을 e 표기법으로 표현된 값으로 변환합니다.
[4.3.2.5] IEEE754 수치 값을 기반으로 한 부동 소수점 계산의 일반적인 문제는 다음과 같습니다. 반올림 오류. 예: 0.1 0.2 === 0.3(15 0)4
[4.3.3] js의 숫자 범위는 Number.MIN_VALUE(5e-324) —— Number.MAX_VALUE(1.7976931348623157e 308)
[4.3.3.1] 양수의 범위를 초과하면 Infinity(양의 무한대)가 출력되고, 음수의 범위를 초과하면 -Infinity(음수 finity)가 출력됩니다
[4.3.3.2] - 인피니티는 수치 계산에 참여할 수 없습니다.
[4.3.3.3] number.max_value 1! = 무한대 컴퓨터는 많아야 52비트 디지털 자릿수까지 저장하기 때문에 1,000 이상은 저장할 수 없고, 정확성이 사라진 지 오래, 즉 소수 위치는 모두 0이므로 덧셈은 변경되지 않습니다. >
[4.3.3.4]Number.MIN_VALUE - 1 != -무한대, 같은 이유이므로 결과는 -1입니다[4.3.3.5] 암시적 유형 변환 Number()를 포함하여 isFinite()를 사용하여 값이 유한한지 여부를 확인할 수 있습니다
[4.3.3.6]isFinite(NaN) //false
[4.3.4]NaN
[4.3.4.1]NaN은 NaN 자체를 포함한 어떤 값과도 동일하지 않습니다
[4.3.4.2] NaN과 관련된 모든 작업은 NaN을 반환합니다
[4.3.4.3] 암시적 유형 변환 Number()를 포함하여 숫자가 NaN인지 여부를 확인하는 isNaN()
[4.4] 숫자 변환: Number()는 모든 유형에 사용할 수 있으며,parseInt() 및 parseFloat는 특히 문자열을 숫자로 변환하는 데 사용됩니다.
[참고 1]Number(),parseInt(),parseFloat()는 다양한 진수의 숫자를 허용하지만 숫자가 포함된 문자열에는 적용할 수 없습니다
[참고 2] Number(),parseInt(),parseFloat()의 숫자가 1.2이면 오류가 보고되지만 문자열이 '1.2.'이면 오류가 보고되지 않습니다
[4.4.1]숫자()
숫자(true):1 || 숫자(false):0
숫자(다양한 진수의 숫자) : 1.0이나 1, 01 등 연산 후의 소수가 1로 출력됩니다.
숫자(정의되지 않음):NaN
숫자(null):0
숫자(문자열):
숫자(10진수와 16진수만 포함하는 문자열) : 연산 후의 10진수
[참고] 8번 증명은 문자열에서 인식되지 않으며, 소수점 이하 자릿수 처리
숫자('' 및 ' '):0
숫자(다른 경우에는 문자열): NaN
번호(개체):
숫자([] 및 [0] 및 [-0]):0
Number([number]) : 연산 후의 숫자
숫자([1,2] 및 {} 및 기타 객체):NaN
[4.4.2]parseInt(): 문자열을 변환할 때 공백이 아닌 첫 번째 문자를 찾을 때까지 문자열 앞의 공백은 무시됩니다. 첫 번째 문자가 숫자나 음수 기호가 아닌 경우,parseInt()는 NaN을 반환합니다. 그렇다면 구문 분석이 완료되거나 숫자가 아닌 문자가 발견될 때까지 구문 분석이 계속됩니다.
[4.4.2.1]parseInt()는 다양한 진수의 정수를 식별할 수 있지만 8진수 리터럴 문자열을 구문 분석할 때 ECMAScript3은 8진수를 구문 분석하지만 ECMAScript5에는 8진수를 구문 분석하는 기능이 없습니다.
[4.4.2.2]parseInt() 함수는 다음과 같이 기본 번호를 나타내는 두 번째 매개 변수를 제공합니다.parseInt('123', 16 또는 10 또는 2)
[4.4.2.3]parseInt(다양한 진수의 숫자): 1.0이나 1과 같은 연산 후의 십진수, 01은 1로 출력
>
[4.4.3]parseFloat():parseInt()와 유사하며 공백이 아닌 첫 번째 문자가 발견될 때까지 문자열 앞의 공백을 무시합니다.
[4.4.3.1] parseFloat()는 십진수 문자열만 구문 분석할 수 있습니다.[4.4.3.2]parseFloat(다양한 진수의 숫자): 1.0이나 1과 같은 연산 후의 십진수. 또는 01은 1로 출력됩니다.
[5]문자열: 작은따옴표나 큰따옴표로 묶인 문자 시퀀스입니다. 문자열의 길이는 길이 속성에 액세스하여 얻을 수 있습니다.
[5.1] 문자 리터럴, 이스케이프 시퀀스라고도 함n 줄바꿈
t 표
비스페이스
r Enter
f 급지
\ 슬래시
' 작은따옴표
“ 큰따옴표
xnn은 16진수 nn(n은 0-f)의 문자를 나타냅니다. 예를 들어 x41은 'A'를 나타냅니다.
unnnn은 16진수 nnnn(n은 0-f)의 유니코드 문자를 나타냅니다. 예를 들어 u03a3은 그리스 문자 ε
을 나타냅니다.
[5.2] ECMAScript의 문자열은 불변입니다[5.3] 문자열 연결을 위해서는 먼저 새 문자열을 생성한 다음, 연결해야 하는 두 문자열로 새 문자열을 채우고, 마지막으로 원래 문자열을 삭제해야 합니다. 이 프로세스는 백그라운드에서 발생하며 일부 구형 브라우저(IE6)에서 문자열 접합이 느린 이유이기도 하지만 이 비효율성 문제는 이후 해결되었습니다
[5.4] 문자열 변환
[5.4.1]toString()
Null 및 Undefine에는 이 방법이 없습니다
Boolean, Object, String 에는 이 방법이 있습니다
숫자 이 방법을 사용하여 var num = 10;num.toString(2);//1010
과 같은 기본 숫자 2, 8, 10, 16을 전달합니다.
그러나 10.toString(2)은 숫자 뒤에 식별자가 올 수 없기 때문에 오류를 보고합니다[5.4.2]문자열()
toString() 메서드가 있으므로 toString() 메서드를 사용하세요
문자열(널);//'널'
문자열(정의되지 않음);//'정의되지 않음'
[5.4.3] 값을 문자열로 변환하려면 더하기 연산자를 사용하여 빈 문자열 ''에 추가하면 됩니다.
[5.4.4] 배열의 항목 값이 null이거나 정의되지 않은 경우 값은 Join(), toLocaleString(), toString() 및 valueOf(에서 반환된 결과에서 빈 문자열이 됩니다. ) 방법은
을 의미합니다.마지막으로 이러한 다섯 가지 기본 유형의 차이점을 설명하기 위해 간단한 예를 들어보겠습니다
var testString = "Hello"; var testBoobean = true; var testUndefined = undefined; var testUndefined1; var testNull = null; var testObject = {a:1}; var testFunction = function(){return;}; alert(testString);//"string" alert(testBoobean);//"boolean" alert(testUndefined);//"undefined" alert(testUndefined1);//"undefined" alert(testUndefined2);//"undefined" alert(testNull);//"object" alert(testObject);//"object" alert(testFunction);//"function"