본문 바로가기

Javascript

(20)
[JavaScript] 느슨한(==)/엄격한(===) 동등 비교, 추상 관계 비교 느슨한(==)/엄격한(===) 동등 비교 많은 서적이나 블로그에서 보면 대부분 "==는 값의 동등함을, ===는 값과 타입 모두의 동등함을 비교한다" 는 글을 본 적이 있을 것이다. 이는 그럴 듯한 내용이지만 사실 정확하진 않다. 정정하자면, "동등함의 비교시 ==는 강제변환을 허용하지만, ===는 강제변환을 허용하지 않는다." 엄격한(===) 비교는 느슨한(==) 비교에 비해 타입까지 비교해야하니 당연히 일이 더 많다. 그러나, 마치 느슨한(==) 비교가 엄격한(===) 비교보다 눈에 띄게 처리가 더뎌서 성능에 영향을 끼친다고 생각하지 말자. 불과 몇 마이크로 초 단위(1 마이크로 초 = 100만분의 1초)의 차이일뿐 이다. 게다가 타입이 같은 두값의 동등 비교라면 ==와 ===의 알고리즘은 동일하다...
[JavaScript] 강제변환 - 암시적 강제변환, Implicit Coercion 이 글의 내용은 자바스크립트의 강제변환의 좋고 나쁨을 충분히 이해하고, 자신의 프로그램에 적절한지 스스로 현명하게 판단할 수 있도록 하기위한 내용을 작성했다. 어떤 값을 다른 타입의 값을 바꾸는 과정이 명시적이면 '타입 캐스팅, Type Casting' 이고, 값이 사용되는 규칙에 따라 암시적이면 '강제변환, Coercion' 이라고 한다. '타입 캐스팅'은 정적 타입 언어에서 컴파일 시점에, '강제 변환'은 동적 타입 언어에서 런타임 시점에 발생한다. 본 글은 '강제 변환'을 세부적으로 나눠 '명시적 강제변한'과 '암시적 강제변환'으로 구별할 것이며, '명시적 강제변환'은 코드만 봐도 의도적으로 탕입변환을 일으킨다는 사실이 명백한 반면, '암시적 강제변환'은 다른 작업 도중 불분명한 부수 효과로부터 발..
[JavaScript] 강제변환 - 명시적 강제변환, Explicit Coercion 이 글의 내용은 자바스크립트의 강제변환의 좋고 나쁨을 충분히 이해하고, 자신의 프로그램에 적절한지 스스로 현명하게 판단할 수 있도록 하기위한 내용을 작성했다. 어떤 값을 다른 타입의 값을 바꾸는 과정이 명시적이면 '타입 캐스팅, Type Casting' 이고, 값이 사용되는 규칙에 따라 암시적이면 '강제변환, Coercion' 이라고 한다. '타입 캐스팅'은 정적 타입 언어에서 컴파일 시점에, '강제 변환'은 동적 타입 언어에서 런타임 시점에 발생한다. 본 글은 '강제 변환'을 세부적으로 나눠 '명시적 강제변한'과 '암시적 강제변환'으로 구별할 것이며, '명시적 강제변환'은 코드만 봐도 의도적으로 탕입변환을 일으킨다는 사실이 명백한 반면, '암시적 강제변환'은 다른 작업 도중 불분명한 부수 효과로부터 발..
[JavaScript] 강제변환 - 추상 연산, Abstract operation 이 글의 내용은 자바스크립트의 강제변환의 좋고 나쁨을 충분히 이해하고, 자신의 프로그램에 적절한지 스스로 현명하게 판단할 수 있도록 하기위한 내용을 작성했다. 어떤 값을 다른 타입의 값을 바꾸는 과정이 명시적이면 '타입 캐스팅, Type Casting' 이고, 값이 사용되는 규칙에 따라 암시적이면 '강제변환, Coercion' 이라고 한다. '타입 캐스팅'은 정적 타입 언어에서 컴파일 시점에, '강제 변환'은 동적 타입 언어에서 런타임 시점에 발생한다. 본 글은 '강제 변환'을 세부적으로 나눠 '명시적 강제변한'과 '암시적 강제변환'으로 구별할 것이며, '명시적 강제변환'은 코드만 봐도 의도적으로 탕입변환을 일으킨다는 사실이 명백한 반면, '암시적 강제변환'은 다른 작업 도중 불분명한 부수 효과로부터 발..
[JavaScript] 네이티브, native 다음은 가장 많이 쓰는 네이티브 들이고, 네이티브는 사실 내장 함수이다. - String() - Number() - Boolen() - Array() - Object() - Function() - RegExp() - Date() - Error() - Symbol() : ES6에서 추가됨 필자는 Java를 주로 썼기 때문에 String()이 문자열 값을 생성하는생성자와 비슷하다고 생각했고, 아래와 같이 쓸 수 있다는 것을 알았다. var s = new String("Hello World!"); console.log(s.toString()); // Hello World! 그러나, 네이티브는 생성자처럼 사용할 수 있지만 실제로 생성되는 결과물은 예상과 달랐다. typeof s; // "object" s ins..
[JavaScript] 값(value), 레퍼런스(Reference) 값, Value 자바스크립트는 포인터라는 개념 자체가 없고, 참조하는 방법도 조금 다르다. 어떤 변수가 다른 변수를 참조할 수 없다. !! 포인터가 없다 !! 자바스크립트에서 레퍼런스는 공유된 값을 가리키므로 서로 다른 10개의 레퍼런스가 있다면, 이들은 저마다 항상 공유된 단일 값을 개별적으로 참조한다. 즉, 값 또는 레퍼런스의 할당 및 전달을 제어하는 구문 암시가 전혀 없다. 값의 타입만으로 값-복사, 레퍼런스-복사 둘 중 한쪽이 결정된다. null, undefined, string, number, boolean, symbol 같은 단순값은 언제나 값-복사 방식으로 할당/전달된다. 객체(배열과 박싱된 객체 래퍼 전체)나 함수 등 합성 값은 할당/전달시 반드시 레퍼런스 사본을 생성한다. CASE 1. ..
[JavaScript] 타입(typeof) : 배열, 문자열, 숫자, 값이 아닌 값 JavaScript 내장 타입 원시 타입, primitives null falsy한 유일한 원시값이지만, 타입은 'object' 인 특별한 존재 undefined 값이 없는 변수 값이거나, 선언되지 않은 변수 값 - 값이 없은 undefined : 접근 가능한 스코프에 변수가 선언되었으나, 현재 아무런 값도 할당되지 않은 상태 - 선언되지 않으 undefined : 접근 가능한 스코프에 변수 자체가 선언조차 되지 않은 상태 boolean number string symbol ES6부터 추가 예시) typeof undefined === "undefined" // true typeof true === "boolean" // true typeof 42 === "number" // true typeof "42"..
[NodeJS] Window10 환경, bcrypt 설치 오류 해결 ⌗ 환경 Windows 7 64Bit Professional (Service Pack 1) Windows 10 64Bit Professional (Version 1607) ⌗ 오류현상 node-pre-gyp ERR! Tried to download(404): https://github.com/kelektiv/node.bcrypt.js/releases/download/v1.0.2/bcrypt_lib-v1.0.2-node-v48-linux-x64.tar.gz ⌗ 해결방법 관리자 권한으로 콘솔 열기 windows-build-tools 설치 : npm install --global --production windows-build-tools bcrypt 재설치 : npm i bcrypt [참고] https://g..

❥ CHATI Github