javaScript 94

자바스크립트가 숫자데이터를 저장하는 방식 // 64비트 부동소수점

# deepdive에는 없는 내용이다 공부를 하다가 메모리에는 데이터가 2진법의 수로 저장이 된다고 하는데, 숫자데이터는 8바이트, 즉 64비트(1바이트=8비트)로 저장이 된다고 하였다. 그럼 2의 64승가지의 데이터가 저장이 될 수 있다는 말인데, 이렇게 많은 데이터를 표현할수 있는 공간은 어떻게 숫자를 표현할까? 라는 생각에 포스팅을 쓰게되었다. # 자바스크립트 deep dive에서 표현한 방식딥다이브에선 숫자가 이렇게 저장이 된다고 하였는데 물론 집필자쌤도 이건 그냥 예시라고 하였다. 그리고 64비트 부동소수점 방식으로 저장이 된다고 하였는데 사실 저 그림만봐도 맨아래 1바이트 공간빼고 나머지는 걍 다 0으로 채워져있어서 가성비 한남충인 나로써는 저 공간들이 너무 아까웠고 이해를 못하고 넘어가는게 ..

논리 곱, 논리 합 연산자의 작동방식

# 논리합 연산자 (||) OR연산자console.log( true || false )OR연산자는 뭐 다들 학창시절 수학시간에 안졸았다면 뭔지 다 알것이다. 여러 조건에서 참이 하나라도 있으면 전체적으로 참이 되는것이다. 정리하면 console.log(true || true); // true console.log(true || false); //true console.log(false || true); // true console.log(false || false); //false뭐이렇다, 이런것까지 설명하는건 귀찮지만 걍 써본다. 위의 코드에선 단순히 boolean값을 논리곱으로 써놨다. 그럼 여러 자료형으로 써본다면 콘솔값은 어떻게 변할까?console.log(0 || 1); //1 console.l..

전위연산자 & 후위연산자 (+엘리스 토끼굴에 빠진 var)

사실 이건 중요한건 아닌데 모던 js 읽을때 헷갈렸던 부분이다. # 후위연산자 let num = 1; console.log(num++, " #A"); // 1 #A console.log(num, " #B"); // 2 #B 일단 num에 1을 할당하고 여기에 후위연산자를 붙여서 콘솔로 찍어보면 A부분에 1로 뜬다. 응? 난 분명 1을 증가시켰는데? 그래서 B에서 다시 num을 참조하려고 하면 증가된 2를 볼 수 있다. # 전위연산자 let num = 1; console.log(++num, " #A"); // 2 #A console.log(num, " #B"); // 2 #B 이곳에선 결과가 다르게 뜬다. # 두 차이는 무엇일까? - 후위 연산자는 원래 num의 값을 가지고 있어서 참조시에는 원래 num의..

데이터 타입에 따른 메모리 접근

하 시발.. 티스토리 서버 터져서 적어놓은거 다 날아가서 다시 쓴다..ㅡㅡ # 같은 메모리 값이라도 다른 결과가 나올 수 있다? let binaryData = 0b01000001; console.log(Number(binaryData)); //65 console.log(String.fromCharCode(binaryData)); //A 위 코드를 보자. binaryData변수값에 할당한 저 괴상한 숫자는 2진법으로 저장된 65라는 숫자다. 하지만 콘솔로 각각 찍어본 결과는 서로 다른 값이다. https://jacobowl.tistory.com/134 메모리에 저장되는 기본 구조. # 시작하면서 2진법에대해서 되돌아보자. 중학생때 배웠던 2진법을 기억하고 있을것이다. 즉 0,1로 숫자를 표현하는 방법인데 ..

js // type error (타입 오류)

# mdn정의 함수에 전달된 피연산자 또는 인수가 해당 연산자나 함수가 예상하는 타입과 호환되지 않을 경우 변경할 수 없는 값을 수정하려고 할 경우 부적절한 방법으로 값을 사용하려고 할 경우 # 일반적인 오류 - 바꿀수 없는 값(상수) const value = 1; value = 2; 상수 value를 바꾸려고할때 에러뜬다 - 이상한거 연산하려고할때 console.log(Symbol("hello") + 1); 심볼이랑 숫자는 더할수 없는데.. - 이상한거 참조하려고할때 console.log(null.hello); console.log(undefined.hello); null과 undefined에서 프로퍼티 참조하려면 에러뜸니다.. + 참고로 선언하지 않은 변수에서 프로퍼티 참조하려하면 console.lo..

javaScript/error 2023.05.02

js // reference error (참조오류)

# MDN정의 - ReferenceError 객체는 현재 범위에서 존재하지 않거나 초기화되지 않은 변수를 참조했을 때 발생하는 에러를 나타냅니다. # 일반적인 참조오류 console.log(babo); 코드에서 babo를 선언하지 않았는데 참조하려고할때 뜬다. + 초기화안된 변수 참조할때 console.log(babo); let babo; 초기화 호이스팅 포스팅 참조 https://jacobowl.tistory.com/136 변수 호이스팅, 그리고 초기화 initialize, Temporal Dead Zone 초기화는 변수선언시에 최초로 undefined가 할당이 되는것을 말한다. 먼저 그림으로 살펴보면, let value = 'hello world'; 라는 코드가 실행되면 먼저 식별자 value가 가르..

javaScript/error 2023.05.02

js // syntax error (구문오류)

# MDN정의 - SyntaxError 객체는 문법적으로 유효하지 않은 코드를 해석하려고 시도할 때 발생하는 오류를 의미합니다. Javascript 엔진이 코드를 구문 분석할 때 언어의 구문에 맞지 않는 토큰이나 토큰 순서를 만나면 이 오류를 던집니다. # 일반적인 구문오류 console.log(dq') 이따구로 쓰면 이렇게 괄호안쳤다고 구문오류뜸 # 표현식이 아닌걸 변수에 담으려 할때 let value = const value1; 토큰이 이상하대.. 위 코드는 선언'문'을 변수에 담으려고 해서 생긴 오류다. 선언문은 표현식이 아닌 문이다. 표현식인 문 vs 표현식이 아닌 문 포스팅은 아래 링크가세요. https://jacobowl.tistory.com/137 값(value), 리터럴(literal), ..

javaScript/error 2023.05.02

값(value), 리터럴(literal), 표현식(expression), 문(statement)

# 리터럴(literal) 리터럴은 사람이 알아보는 기호로 적은 표기법을 말한다. 이전 '메모리에 저장되는 기본구조' 포스팅에서 컴퓨터는 데이터를 2진법으로 저장한다고 했었다. 메모리에 저장되는 기본 구조. # 시작하면서 2진법에대해서 되돌아보자. 중학생때 배웠던 2진법을 기억하고 있을것이다. 즉 0,1로 숫자를 표현하는 방법인데 예를들어 0은 10진법 수로 0이다. 1은 10진법수로 1, 10은 10진법 수로 2 jacobowl.tistory.com 숫자로 예를 들어보겠다. 사람은 숫자를 보통 10진법으로 표기한다. 하지만 컴퓨터는 2진법으로 알아듣는다. 즉 우리가 코드로 적는 2라는 수는 2진법 수로 10이고, 3이라는 수는 11이다. 때문에 우리가 코드에 2라는 수를 적으면 자바스크립트 엔진이 이를..

변수 호이스팅, 그리고 초기화 initialize, Temporal Dead Zone

초기화는 변수선언시에 최초로 undefined가 할당이 되는것을 말한다. 먼저 그림으로 살펴보면, let value = 'hello world'; 라는 코드가 실행되면 먼저 식별자 value가 가르키는 메모리주소1이 생성되고 이 주소가 가르키는 메모리공간에는 undefined가 할당된다. 그 후, 이 식별자 value는 메모리주소2를 가르키게되고 이 메모리주소 2가 가르키는 메모리공간에는 'hello world'라는 데이터가 재할당된다. # 먼저 선언하지 않은 변수를 참조해보자. console.log(babo); ReferenceError이 발생된다. 내용은 변수 babo가 정의되지 않았다라는 것이다. # 선언보다 참조를 먼저 하는 경우 var (호이스팅) console.log(babo); var bab..