프로그래밍
-
JS - 추상관계비교프로그래밍/Js 2021. 2. 24. 18:22
JS에서는 피연산자 끼리 비교시 피연산자가 모두 문자열인지 아닌지에 따라 구분된다. 문자열 vs 문자열 x 예를 들어 값의 type이 string 과 number인 비교하면 피연산자 중 어느 한쪽이라도 type이 string이 아닐 경우 피연산자 모두 number 타입으로 강제 변환 후 비교한다. 따라서 결과는 위 사진과 같다. 문자열 vs 문자열 type이 문자열인 피연산자끼리의 비교는 문자 단위로 비교한다. 처음부터 "0"이 어휘상 "4"보다 작은 값이기 때문에 c>d는 true이다. 마찬가지로 비교 시 e는 "4, 2"로 ,f는 "0, 4, 3"으로 강제변환되서 문자열화 되기 때문에 위 예시도 마찬가지이다. 객체 vs 객체 객체 끼리 비교했을 경우 만약 연산자가 == 일때는 같은 래퍼런스를 참조한다..
-
JS-parseInt 문자열→숫자로 파싱프로그래밍/Js 2021. 2. 22. 18:24
1.문자열을 숫자로 강제 변환하는 것과 파싱하는 것은 다르다. 위의 예제처럼 숫자로 변환할 수 없는 문자열을 강제변환 시 결과값으로 NaN이 나오는 것과 달리 파싱 값은 숫자를 반환한다. 즉, 파싱은 비 숫자형 문자를 허용한다. 좌→우 방향으로 파싱하다가 숫자로 변환 할 수 없는 문자를 만나면 즉시 멈춘다. 2. parseInt()는 문자열에 쓰는 함수이다. 그렇다면 parseInt() 인자 값에 비문자열이 들어오면 어떻게 될까?? 예를 들면 다음과 같은 상황이다. 놀랍게도 결과 값은 18이다. parseInt에 비문자열이 들어오면 자바스크립트는 이 비문자열을 문자열로 바꿔준다. 위 예시에서는 1/0을 "Infinite"로 바꿔준다. 문자열의 첫번째 문자가 "I"이고 "I"는 19진법체계서 18이다. 두..
-
JS - Boolean 타입 강제변환프로그래밍/Js 2021. 2. 18. 18:58
boolean 타입으로 강제변환하는 것에 생각해본다 1. boolean으로 강제변환 시 falsy한 값이 되는 것은 undefined null false +0, -0 NaN "" 총 6가지이다. 2. falsy 객체란? 위의 세가지 변수는 falsy한 값을 감싼 래퍼 객체를 참조하고 있다. 결과를 보면 알 수 있드시, falsy 객체는 falsy한 값을 감싼 래퍼 객체가 아니다. 혹자는 falsy 한 객체가 순수한 자바스크립트 객체가 아니고, 비정상적인 객체라고 하는데, 지금 나로써는 이 객체의 정체가 정확히 뭔지 모르겠다.(사실 알고싶지 않음) 3. 객체는 falsy 하지 않으면 무조건 truthy 객체이다. 객체는 falsy 하지 않으면 무조건 truthy 객체이다.
-
Javascript-타입프로그래밍/Js 2021. 2. 12. 19:53
1. 타입의 사전정의는 다음과 같다. 어떤 값이 다른 값과 구분되도록 고유한 내부 특성의 집합 여기서 유심깊게 봐야하는 단어가 값이다. 변수가 타입을 갖고 있는 것이 아니라,(변수에는 타입이 없다) 변수에 할당된 값이 타입을 가지고 있다. js는 타입강제를 하지 않는다. 즉 변수의 값이 처음 할당된 값과 동일한 타입일 필는 없다. 2. js의 내부 타입에는 총 7가지가 있다. null undefined String Number boolean Symbol Object 각각의 타입을 살펴보자. typeof null ⇒ 'object' typeof undefined ⇒ 'undefined' typeof true ⇒ 'boolean' typeof 12 ⇒ 'number' typeof '12' ⇒ 'string'..
-
JS-this, call, apply, bind프로그래밍/Js 2021. 1. 17. 13:04
2021-01-17 1.this - 함수가 호출 될 때 호출한 객체를 가리킨다. 위의 함수를 호출하는 객체는 user이다 따라서 this는 user를 가르킨다. 반면, 같은 함수인 user.callName 이더라도 호출할 당시(whoAmI()), 객체가 윈도우이기 때문에 user의 name을 못찾는다. 2.call, apply, bind - 함수가 참조할 객체를 지정해 줄 수 있는 함수이다. call 함수를 통하여 update 메서드가 참조할 객체(위에서는 mike), 메서드 매개변수(1999, "singer")을 지정했다. apply 함수는 함수의 매개변수로 전달되는 방식이 배열이라는 점 빼고 call과 같은방식이다. 다음은 bind 사용예제다. bind를 사용하면 해당함수의 객체를 영구히 지정해준다.
-
JS-closure프로그래밍/Js 2021. 1. 15. 11:39
2021-01-15 1.closure ㄱ.내부함수가 외부함수의 맥락(어휘적환경(lexical 환경))에 접근할 수있는 것을 가르킨다. ㄴ.함수와 렉시컬(어휘적) 환경의 조합 => 이 환경은 클로저가 생성된 시점의 유효범위 내에 있는 모든 지 역변수로 구성된다. ㄷ.함수가 생성될 당시의 외부 변수를 기억 ㄹ.내부 함수에서 외부 함수 변수에 접근할 수 있다. ㅁ.생성 이후에도 계속 접근가능 위 사진의 생성되어있는 Lexical 환경을 살펴보자 전역 Lexical 환경 (makeAdder: function, add3: function) ↑(참조) makeAdder Lexical 환경(x: 3) ↑(참조) 익명함수 Lexical 환경(y: 2) 익명함수Lexical에서부터 전역 Lexical 함수까지 순차적으로..
-
JS-arguments, Rest parameters, Spread syntax프로그래밍/Js 2021. 1. 14. 12:23
1.arguments - 함수에 전달된 인수에 해당하는 Array 형태의 객체(단, forEach, Map 등과 같은 배열의 내장함수가 없음). 가변 인수가 전달되는 함수에 유용하다. 만약 함수에 전달되 인수의 수를 고정시키기 위해 arguments.length를 사용해서 결정하자 ES6 호환 코드를 작성 중이라면 되도록 나머지 매개변수(Rest parameters)구문을 사용하자. 2.Rest parameters - 함수에 전달된 정해지지 않은 인수를 배열로 나타낼 수 있다. 함수의 마지막 파리미터 앞에 ... 을 사용해서 여러개의 인수를 배열로 만들수 있다. 주의 해야하는 것은 마지막 파라미터만 "Rest 파라미터" 가 될 수 있다. 3.Spread syntax - 배열이나 문자열과 같이 반복 가능한..