목록JavaScript (33)
미누에요
자바스크립트에서는 여러모로 암묵적으로 에러를 발생시키지 않는 경우가 허다하다.이는 유연한 프로그래밍이라고 할 수도 있지만, 복잡한 버그를 발생시킬 수 있다. 따라서 우리는 이를 좀 더 엄격하게, 틀에 가두어 사용하기 위해 strict mode를 사용할 수 있다. 우선, strict mode의 사용법이다.'use strict';function hello(){ x = 100; console.log(x);}hello(); strict mode를 사용할 곳에 'use strict'를 작성해주면 된다.이 'use strict'가 작성된 곳부터 적용되기 때문에, 'use strict' 위에 있는 코드가 있다면 그 코드는 strict mode가 적용되지 않는다. 이러한 strict mode를 사용하여 예..

JavaScript에서 함수는 객체이다. 그 이유는 함수가 객체와 비슷하게 저장되고 사용가능하기 때문이라고 익히 들었을 것이다.이에 대해서 더 자세히 들여다보자. 우선 함수는, JavaScript가 말하는 일급 객체의 성질을 모두 만족한다.그렇기 때문에 함수는 객체이다 라는 말이 성립하는 것이다. 일급 객체는 아래의 조건을 가진다.무명의 리터럴로 생성할 수 있다. (런타임에 의해 생성이 가능하다)변수나 자료구조(객체, 배열 등)에 저장할 수 있다.함수의 매개변수에 전달할 수 있다.함수의 반환값으로 사용할 수 있다. 하나씩 차근차근 살펴보자. 우선, 함수는 무명의 리터럴로 생성이 가능하다. 우리는 익명 함수를 통해 변수에 할당하는 경험을 해보았다.const add = function (a,b){ retu..

객체를 생성할 때 우리는 보통 아래와 같은 방법을 사용한다.const obj = { 'name': 'minwoo', 'age': 24,} 위 방법은 객체 리터럴을 사용한 방법이다. 이번 포스팅에서는 new Object()를 사용하여 객체를 생성하는 방법과, 이 방법의 특징에 대해서 알아보겠다. new Object()와 같은 형식으로 객체를 생성하는 방법을 생성자 함수를 사용한 객체 생성이라고 한다. const obj = new Object();obj.name = 'minwoo';obj.age = 24;obj.intro = function() { console.log(`hi. my name is ${this.name}, I'm ${this.age} years old.`);}console.log..

JavaScript를 조금이라도 공부해본 사람이라면 var 키워드를 되도록 사용하지 말아야 한다고 들어보았을 것이다.하지만 자세한 이유는 아마 나중에 깊게 배운다는 식으로 넘어갔을 가능성이 높다.오늘은 var 키워드와 나머지 let, const 키워드에 대해 설명해보고자 한다. var 키워드변수 중복 선언 가능함수 레벨 스코프(Function-level scope)var 키워드로 선언한 변수는 함수 레벨 스코프(Function-level scope)를 가진다.함수 레벨 스코프란 함수의 코드 블록만을 지역 스코프로 인정한다는 말이다. var x = 1;if(true){ var x = 100;}console.log(x); // 100 위 코드에서 if문 내부에서 var 키워드로 변수를 한번 더 선언하고 있다..

스코프는 자바스크립트에서 굉장히 중요한 개념 중 하나이다.간혹 변수의 값이 이상하다거나 예상한 값과 다를 때, 이 스코프(scope)와 관련되어 있는 경우가 꽤 있다. 모든 식별자는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 있다. 이것을 우리는 스코프(scope)라 한다. 예를 들어 보자.var x = 'global';function foo(){ var x = 'local'; console.log(x); // 'local'}foo();console.log(x); // 'global' 위 코드에서 함수 내부의 x와 바깥의 x는 다르게 출력된다. 함수 내부 x의 스코프는 함수 안으로 한정되고, 함수 외부 x는 전역적인 스코프를 가진다.현재 코드가 어디에서 실행되..

JavaScript에서 함수를 생성하는 방법에는 크게 4가지가 존재한다.함수 정의 방식에표현식 여부함수 선언문function mul(a,b){ return a*b;}표현식 아닌 문함수 표현식var mul = function(a,b){ return a*b;}표현식Function 생성자 함수var mul = new Function('a', 'b', 'return a*b');표현식화살표 함수var mul = (a,b)=> a*b표현식 표현식이 아닌 문의 경우에 변수에 넣을 수 없다. 하지만 표현식으로 평가되는 경우에는 변수에 넣어 사용할 수 있게된다. 함수 선언문가장 익숙한 함수 선언 형식일 것이다. JavaScript에서는 인자 타입을 적지 않는다.function mul(a,b){ return a..

자바스크립트의 모든 값은 원시 타입(primitive type)과 객체 타입(object type)으로 나눠진다. 위 사진에서 primitive가 원시 타입에 해당하고, Non-primitive가 객체 타입과 매칭된다. 원시 타입(Primitive Type)원시 타입의 값은 변경 불가능한 값이다. 한번 생성되면 변경할 수 없다.하지만 우리는 Number, String 타입으로 변수를 선언하고 나서 변경을 분명히 수행했을 것이다. let name = 'minwoo';console.log(name); // "minwoo"name = 'binu';console.log(name); // 'binu' 위 코드처럼 우리는 한번 선언한 값을 다른 값으로 바꿀 수 있다. 원시 타입의 값이 변경 불가능하다는 말은, ..
표현식을 평가하는 도중에 평가 결과가 확정된 경우, 나머지 평가 과정을 생략하는 것을 말한다. 'Human' && 'Animal' // "Human" 위 코드를 보면 두 문자열을 && 연산을 수행하고 있다.'Human'은 Truthy 값이므로, && 연산자 앞의 값이 true이다. AND 연산은 나머지 하나의 값에 따라 true이거나 false가 정해진다.따라서 위 값은 'Animal'에 의해 true or false가 정해진다.따라서 결과는 "Human" 이 되는 것이다. 'Human' || 'Animal'; // 'Human' 위 코드는 OR 연산을 수행한다.아까와 똑같이 'Human'을 Truthy 값으로 보면 결론적으로 true로 평가된다.그리고 OR 연산은 두 값 중 하나만 true이면 true..
타입 변환(type casting)개발자가 의도한대로 타입을 변경하는 행위를 의미한다. 명시적 타입 변환(explicit coercion) : 의도적으로 타입을 변경암묵적 타입 변환(implicit coercion) : 자바스크립트 엔진에 의해 암묵적으로 변경// 명시적 타입변환var x = 10;var str = x.toString(); // x를 문자열로 타입캐스팅console.log(typeof str, str); // string 10 명시적 타입변환은 위처럼 개발자가 의도적으로 변환을 하는 것이다. // 암묵적 타입 변환var x = 10;var str = x + ''; // 숫자(Number) + 문자(sting)을 하면 문자(string)이 된다.console.log(typeof x, x);..

데이터 타입(Data Type) 자바스크립트의 모든 값은 데이터 타입을 갖는다. 데이터 타입은 현재 ES6기준 7개가 존재한다. 크게 원시 타입(Primitive Type)과 객체 타입(Object Type)으로 분류할 수 있다. 숫자 타입(Number)C언어의 경우 정수와 실수를 구분하여 int, float 와 같이 사용하게 되는데, 자바스크립트의 경우에는 Number로 한번에 다 작성할 수 있다.ECMAScript 사양에 따르면 Number는 배정밀도 64비트 부동소수점 형식을 따른다고 한다.(즉, 모든 수를 실수로 처리한다는 것)console.log(1===1.0) // true 추가적인 예외 값Infinity : 양의 무한대-Infinity : 음의 무한대NaN : 산술 연산 불가(not-a..