javaScript 96

primitive타입, object타입 mutable(변경가능함)

원시타입은 흔히 우리가 변수에 할당하는 스트링 넘버 등이 있고, 객체타입은 말그대로 객체타입이다. 어레이, 객체, 함수등이 있다. 원시타입과 객체타입은 근본적으로 메모리접근,참조방법에서 다르다. # 원시타입의 메모리 활용방법 원시타입인 값은 그냥 뭐 스트링 숫자 이런거다.. 뭐 이전 포스팅에서 오지게 설명했던 부분이다. 변수(식별자)는 메모리주소랑 연결되어있고 이 메모리주소는 실제 데이터가 들어있는 공간에 접근하여 데이터를 가져온다. # 원시타입은 immutable(변경불가능한)값이다!! let value = 'muzzi'; value = 'dori'; 예시로 이 코드에서 메모리공간이 활용되는 것을 보자. 참고로 우리집 개들 이름이 무찌랑 도리다.. 앞으로 자주보게될거다.. 맨처음 value를 선언할때 ..

객체, 배열 반복문의 종류 / 어레이 순환 프로토타입 메서드

const arr = ["가", "나", "다"]; const obj = { key1: "value1", key2: "value2", key3: "value3" }; 이렇게 어레이와 오브젝트를 하나씩 만들었다. 이걸 반복문을 사용해서 처리를 해보자. ## for in 반복문 (배열 ok, 객체 ok) # 배열 반복 for (i in arr) { console.log(i); } // 출력 0,1,2 0,1,2를 출력한다. 배열의 인덱스를 하나씩 출력하는것이다. 따라서 아래와같이 배열의 인덱스를 참조하는 코드로 쓰면, for (i in arr) { console.log(arr[i]); } //출력 가,나,다 이렇게 배열의 요소를 각각 출력해준다. + i를 선언해도, 안해도 된다. for (let i in a..

javaScript/concept 2023.05.10

자바스크립트가 숫자데이터를 저장하는 방식 // 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