<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ordo_92.log</title>
        <link>https://velog.io/</link>
        <description>CTO를 꿈꾸는 CDO</description>
        <lastBuildDate>Sun, 18 Oct 2020 16:53:19 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>ordo_92.log</title>
            <url>https://images.velog.io/images/ordo_92/profile/d439f7c9-94be-49f6-aae8-18690c3932e3/social.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. ordo_92.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ordo_92" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[JS의 모듈 생태계]]></title>
            <link>https://velog.io/@ordo_92/JS%EC%9D%98-%EB%AA%A8%EB%93%88-%EC%83%9D%ED%83%9C%EA%B3%84</link>
            <guid>https://velog.io/@ordo_92/JS%EC%9D%98-%EB%AA%A8%EB%93%88-%EC%83%9D%ED%83%9C%EA%B3%84</guid>
            <pubDate>Sun, 18 Oct 2020 16:53:19 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>자바스크립트의 코드 확장성을 위해서 모듈화는 필수적이다. Node.js와 같은 런타임 매니징 개념 또한 모듈화 작업때문에 가능하다.</p>
</blockquote>
<p>일반적으로 CommonJS, AMD , UMD와 같은 개념들이 있는데, 개인적인 인사이트로는 Common JS가 선두주자인 것 처럼 느껴진다.</p>
<p>타인의 코드를 내 것으로 가져와서 사용할 때는, 불가피하게 변수간의 중복이 있거나, 충돌이 있을 수 있다.  AMD, UMD, CommonJS 와 같은 기술은 결국 이러한 문제점을 해결하기 위한 고안의 시도이기도 하다.</p>
<p>지금 이 글에서는 이러한 기술들의 실 사용보다는 개념을 작성하고 싶다.</p>
<h3 id="commonjs">CommonJS</h3>
<p>CommonJS는 노드에서 채택한 방식이다.  require 함수로 매개변수를 호출해서, module.export 객체로 그 값을 받아와, 모듈 접근을 한다. CommonJS는 서버사이드에서 수요가 많다. 애초에 서버사이드 작업을 위해 작업되었기 때문이다.</p>
<h3 id="amd">AMD</h3>
<p>AMD는 Asynchronous Module Definition의 약자이다, 직역하면 비동기적 모듈 선언 이라는 뜻이다.  그렇기에 AMD에서의 모듈 명세는 이름처럼 비동기 모듈을 표준안으로 삼고 있다. </p>
<h3 id="define">Define()</h3>
<p>AMD 방식의 특징은 define()함수가 있다는 점이다. 브라우저 환경에서 JS는 파일 스코프가 정의되어있지 않으며, 스코프를 제한한다. 이로 인해 지역 변수와 전역 변수의 분리가 가능하다.</p>
<p>사용에서는 코드의 define에 인자 값을 넣은 후, 두 번째 인자에서 콜백 함수 값으로 매개변수를 받는다. 이러한 방식은 비사용과 사용의 차이를 구분지어 관리하기에 접근 관리성에서 유용하다. AMD는 브라우저에서의 사용에서 CommonJS와 사용방식에서의 방향성이 서로 달라 분리되어 나왔다. 브라우저에서의 사용은 AMD의 사용 방식이 많은 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Node.js]]></title>
            <link>https://velog.io/@ordo_92/Node.js</link>
            <guid>https://velog.io/@ordo_92/Node.js</guid>
            <pubDate>Wed, 30 Sep 2020 17:37:12 GMT</pubDate>
            <description><![CDATA[<h2 id="nodejs는-무엇인가">Node.js는 무엇인가?</h2>
<blockquote>
</blockquote>
<p>Node.js는 웹 브라우저 환경에서만 구동 가능했던 종속적이며, 고립적인 언어의 특성을 브라우저 외의 환경에서 실행 가능하도록 런타임 환경을 조성해준다. 크롬 V8 엔진을 기반으로 다양한 운영체제에서 사용가능하게 해주는 것을 의미한다.</p>
<p>일반적으로 Node.js는 서버사이드 용도의 언어처럼 여겨지기도 하지만, 정확히는 자바스크립트 런타임 환경 그 자체이다. 예를들어 express 프레임워크 통해 서버사이드 통신이 가능하다고 하면 이것은 맞는 말이다.</p>
<p>다시 말해 자바스크립트 환경을 구축해주며, 자바스크립트 언어를 다양한 용도로 사용 가능하게끔 도와준다. 패키지 생태계인 npm은 오픈 소스 라이브러리로써, 서버사이드, 데이터 사이드, 매니징 등 다양한 용도로 시너지를 제공해준다.</p>
<h2 id="생산성에서의-강점">생산성에서의 강점</h2>
<p>그렇다면 자바스크립트 런타임에서 다양한 파트의 어플리케이션 개발을 진행하면 얻는 장점이 무엇일까?</p>
<p>먼저 동일한 프로그래밍언어와, 환경 제약의 장벽이 크게 사라지기에, <strong>프론트 엔드 개발자의 풀스택 개발이 수월해진다.</strong> 프론트엔드 개발에 대한 접근을 하는 자바스크립트 개발자들이 비교적 백엔드 환경에 접근성이 수월하다. </p>
<p>또한 JSON 데이터 표현식을 사용하며, <strong>데이터 관리 표준에 더욱 가깝게 유지할 수 있다는 점이다.</strong> DB 용도로 사용하여도, 데이터 처리 일괄과정이 같은 형식이기에 일관성을 갖는다. 또한 이는 코드의 길이를 줄여준다.</p>
<p>난이도가 있는 <strong>비동기 프로그램</strong> 또한, 사용하기에 Node.js에서는 더욱 용이하다. 콜백함수를 이용한 비동기 처리를 하지 않아도 된다.</p>
<p><strong>단일 쓰레드 모델을 사용</strong>하여, 멀티스레드의 이슈인 동기화, 교착상태에 대한 리스크 고착을 제거한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[DOM Tree]]></title>
            <link>https://velog.io/@ordo_92/DOM-Tree</link>
            <guid>https://velog.io/@ordo_92/DOM-Tree</guid>
            <pubDate>Wed, 30 Sep 2020 08:06:20 GMT</pubDate>
            <description><![CDATA[<h2 id="개요">개요</h2>
<blockquote>
<p>DOM은 Document object model의 준말이며, 문서 객체 모델은 HTML,XML 서식값의 시각 인터페이스화된 구조이다.</p>
</blockquote>
<p>DOM은 문서 [ 코드 나열 ]의 BOM [ Browser object model ] 부속 값이며, 브라우저 엔진에 의해 ,프로그래밍 언어가 DOM 구조 자신 자체에 접근 방법을 제공하고, [ 문서 구조, 스타일, 내용 ] 등을 변경할 수 있게 돕는다. </p>
<p>DOM 은 웹 페이지의 객체 지향 표현이며, 자바스크립트와 같은 스크립팅 언어를 이용해 DOM 을 수정할 수 있다.</p>
<p>쉽게 말해, DOM 개념이 있기에, 페이지를 표현하는 것이 목적이 아닌 자바스크립트로도, 페이지 표현이 가능해진다. 이는 다이나믹하다.</p>
<pre><code class="language-javascript">
let paragraphs = document.getElementsByTagName(&quot;P&quot;);

// 스크립트의 제어를 통해 HTML 문서의 P 태그 리스트에 접근 가능하도록 변수 선언

// paragraphs[0] is the first &lt;p&gt; element
// paragraphs[1] is the second &lt;p&gt; element, etc.


alert(paragraphs[0].nodeName); // HTML 문서에 작성된 첫 번째 자식값의 태그 네임을 보여줌 

// source from MDN
</code></pre>
<h2 id="dom에-접근하기">DOM에 접근하기</h2>
<blockquote>
</blockquote>
<p>1.스크립트 태그를 이용하여 작성하거나, 페이지 로드 스크립트로 초기화 시부터 문서 자체를 조작 가능
2.문서 내의 요소 값들을 직접 얻는 API들을 통해 조작 가능</p>
<p>하단 MDN의 예제를 보면, 자바스크립트를 이용하여 페이지 로드할 때, &#39;welcome to my home page!&#39;라는 팝업창을 줄 수 있다.</p>
<pre><code class="language-javascript">
&lt;body onload=&quot;window.alert(&#39;welcome to my home page!&#39;);&quot;&gt;
//onload 함수를 통해, 문서를 로드하여 인터랙션 값을 사용자에게 준다

//=&gt; MDN</code></pre>
<p>아래의 자바스크립트는 문서가 로드될 때(모든 DOM을 사용할 수 있게 되는 때임) 실행되는 함수를 정의하였다. 이 함수는 새로운 H1 element 를 생성하고, element 에 text 를 추가하며, H1 을 이 문서의 트리에 추가한다.</p>
<pre><code class="language-javacript">
&lt;html&gt;
  &lt;head&gt;
    &lt;script&gt;
       // run this function when the document is loaded
      window.onload = function () { // 페이지 로드시 함수 실행

  let heading = document.createElement(&quot;h1&quot;); // &#39;h1&#39; 태그 컨테이너 생성
  let heading_text = document.createTextNode(&quot;Big Head!&quot;); // 텍스트 노드 값을 채워줌

  heading.appendChild(heading_text); // heading 컨테이너의 맨 끝 값으로 &#39;Big head!&#39;를 이동
  document.body.appendChild(heading); // 문서내의 body 값 끝에 노드 값 &#39;Big head!&#39; 표현

}
    &lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Class]]></title>
            <link>https://velog.io/@ordo_92/Class</link>
            <guid>https://velog.io/@ordo_92/Class</guid>
            <pubDate>Sat, 19 Sep 2020 06:20:31 GMT</pubDate>
            <description><![CDATA[<blockquote>
</blockquote>
<p>자바스크립트에서 객체를 다루는 것은 , 원론적인 객체, 함수 뿐이 아닌 &#39;Class&#39; 역시 존재한다. 자바스크립트에서의 클래스는 ES5와 의미, 문법이 다르며, 프로토타입을 이용해서 만들어졌다.</p>
<h2 id="class">Class?</h2>
<h4 id="mdn--class는-함수로써-존재한다-그러므로-표현식과-선언-두-가지를-함께-갖는다">MDN : Class는 함수로써 존재한다. 그러므로 표현식과 선언 두 가지를 함께 갖는다.</h4>
<p>함수는 선언 및 할당 단계에서 &#39;new&#39;를 붙임으로써, 함수의 역할을 객체의 지칭자로써 그 역할을 다르게끔 해준다.</p>
<p>Class 객체에서는 Constructor가 그 역할과 유사하다.  Class로 생성된 객체 내에서 존재하는 특수한 메소드이며,  이 메소드는 클래스당 한 개씩 존재한다. Constructor가 여러개 존재하면 그것은 구문 에러를 발생시킨다. 참고로 Constructor는 &#39;건설자&#39;라는 뜻이다.</p>
<h3 id="선언에서의-특징">선언에서의 특징</h3>
<p>함수 선언과 크게 다른 점은 클래스 선언은 호이스팅이 일어나지 않는다. 그렇기에 선언이 된 후 , 재정의 , 호출을 하여야한다.</p>
<pre><code class="language-javascript">const p = new Rectangle(); // ReferenceError

class Rectangle {}

// =&gt; MDN , 할당이 선언보다 위에있다.
</code></pre>
<h3 id="표현식에서의-특징">표현식에서의 특징</h3>
<p>Class는 그 표현식이 이름을 갖거나, 갖지 않을 수 있다. </p>
<pre><code class="language-javascript">
// unnamed
let Rectangle = class {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
};
console.log(Rectangle.name);
//output : &quot;Rectangle&quot;


// named
let Rectangle = class Rectangle2 {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
};
console.log(Rectangle.name);
//output: &quot;Rectangle2&quot;

// =&gt; MDN , 무명 클래스를 할당받은 Rectangle 변수를 호출하면, 그 프로퍼티인 name은 그대로 물려받아 Rectangle을 갖는다. 반면 유명 클래스 Rectangle2를 할당받은 변수 Rectangle의 name 프로퍼티를 호출한다면, Rectangle2가 나온다.
</code></pre>
<h3 id="gettersetter">Getter,Setter</h3>
<blockquote>
</blockquote>
<p>Class에서는 Getter, Setter를 이용하여, 클래스 내부의 값을 논리적으로 변환하여, 특정 파라미터에 논리를 부여할 수 있다. 또는 값의 형을 새로이 추가할 수 있다.</p>
<pre><code class="language-javascript">
// test getter and setters

class Person { // named class 선언
  constructor(name, interests, age) {
    //params 표현
    this.name = name;
    this.interests = interests;
    this.age = age;
  }

  get age() {

    // return this.age; ,콜스택 무한반복을 방지하기 위해 변수의 이름을 다르게 설정

    return this._age;
  }
  // get이라는 키워드를 이용해서 값을 리턴 , 따라서 return this.age;
  // getter 정의 순간 . this.age 메모리에 올라가있는 데이터를 읽어오지 않고, getter를 호출



  set age(value) {

    //this.age = value;   , 콜스택 무한반복을 방지하기 위해 변수의 이름을 다르게 설정


    this._age = value &lt; 0 ? 0 : value;
  }
  // set이라는 키워드를 이용해서 값을 설정
  // setter 정의 순간 . 할당되는 age의 메모리 상 데이터값을 가져오지않고, setter를 호출

}

const yeonkor = new Person(`Yeonkor`, `workout`, `-19`);

console.log(yeonkor.age);

//=&gt; 0;
</code></pre>
<h2 id="extends를-통한-클래스-상속sub-classing">extends를 통한 클래스 상속(sub classing)</h2>
<blockquote>
<p>extends 키워드는 클래스 선언이나 클래스 표현식에서 다른 클래스의 자식 클래스를 생성하기 위해 사용된다.자식 클래스에 constructor가 있다면, &quot;this&quot;를 사용하기 전에 가장 먼저 super 키워드를 사용하여 부모 클래스의 함수값을 가져온다.</p>
</blockquote>
<pre><code class="language-javascript">
class Ordo { //부모 클래스 생성
  constructor(inyears) {
    this.inyears = inyears; 
  }

  wishes() {
    console.log(`${this.inyears} , i will take it `);
  }
}

class Years extends Ordo { // Ordo클래스의 자식 클래스 Years 생성 

  constructor(inyears) { 
    super(inyears); // Super를 통해 부모 클래스의 파라미터를 받아옴, inyears 파라미터를 통해, 부모 클래스의 생성자 호출 
  }

  wishes() {
    console.log(` in ${this.inyears}, years who makes results is Yeonkor`);
  }
}

let y = new Years(5);

// 부모 클래스의 constructor에 할당된 this.inyears가 자식 클래스로 그대로 전달

y.wishes();

// =&gt; in 5, years who makes results is Yeonkor
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[객체 (Object)]]></title>
            <link>https://velog.io/@ordo_92/%EA%B0%9D%EC%B2%B4-Object</link>
            <guid>https://velog.io/@ordo_92/%EA%B0%9D%EC%B2%B4-Object</guid>
            <pubDate>Thu, 17 Sep 2020 16:23:42 GMT</pubDate>
            <description><![CDATA[<h2 id="객체와-객체-리터럴">객체와 객체 리터럴</h2>
<blockquote>
</blockquote>
<p>객체는 유사의 데이터와 함수의 단일 또는 집합 모음이다. 데이터들 과 함수 중 객체에 속해 있는 것을, 각각 <strong>프로퍼티</strong>와 <strong>메소드</strong>라고 지칭한다. 아래에서 더욱 자세한 풀이가 나온다.</p>
<pre><code class="language-javascript">
let objTest = {}; // 새로운 객체 선언

objTest = { // 객체 값을 새로이 할당
  name: `yeonkor`,
  age: 28,
  sex: `male`,
  interests: [`learning new`, `workout`],
  profile: function () {
    console.log(`${this.name} is ${this.age} years old `);
  }, // 템플릿 리터럴 사용 , 프로퍼티의 값으로 함수를 할당
  greeting: function () {
    console.log(`Hi ! I,m ${this.name} .`);
  },
};
</code></pre>
<blockquote>
<p>객체는 Key, Value라는 쌍의 값으로 이루어져있다.  객체 안에서 갖게되는 변수들을 Key , 즉 프로퍼티라고 부르며 여기에 담기는 값들은 어떠한 값도 될 수 있다. 상단의 예제에서는, 문자열, 숫자, 배열, 함수들이 그 값으로 담겨 있다. 심지어 객체의 값으로 또 다른 객체를 담을 수도 있다. 객체의 값으로 함수를 갖게 될 때, 우리는 그것을 메소드로 지칭한다.</p>
</blockquote>
<pre><code class="language-javascript">Object : { 
  A /* key 값 */ : &#39;A value&#39;, 
  B /* key 값 */ : function(){ 
        alert(`B value`); // 값이 함수일경우 메소드
}

 //  =&gt; 이러한 객체를 객체 리터럴이라고 부른다. </code></pre>
<h2 id="점-표기법">점 표기법</h2>
<blockquote>
<p>객체의 내부는 캡슐화 되어있다. 우리는 이에 접근하려면 점 표기법을 이용해 접근한다. 그 후 접근항목을 기입한다. 그 종류는 어떠한 것이든 가능하다.</p>
</blockquote>
<pre><code class="language-javascript">
objTest.name;
objTest.age;
objTest.sex;
objTest.greeting;
</code></pre>
<h2 id="괄호-표기법">괄호 표기법</h2>
<blockquote>
</blockquote>
<p>프로퍼티에 접근법으로, 점 표기가 아닌 괄호 표기도 존재한다.</p>
<pre><code class="language-javascript">// 점 표기법
objTest.name
objTest.interests[1]
objTest.prifle

// 괄호 표기법
objTest[`name`]
objTest[`interests[1]`]
objTest[`profile`]

// =&gt; 둘은 같은 값을 갖는다.</code></pre>
<h2 id="객체-멤버-설정">객체 멤버 설정</h2>
<blockquote>
</blockquote>
<p>또한 객체의 값을 새로 설정(갱신 또는 할당의 의미)또한 가능하다.</p>
<pre><code class="language-javascript">objTest[`name`] = `yeonkorKim`  // name 설정
objTest[`interests[1]`] = `prototyping` // interests의 2번째 인덱스 설정
objTest[`profile`] = function(){ 
  console.log(`ERROR!!`); // 로그 값 설정
}
</code></pre>
<h2 id="this">&#39;this&#39;</h2>
<blockquote>
<p>this 키워드는 지금 동작하고 있는 코드를 가지고 있는 객체를 가리킨다. 위의 예제에서 this 는 objTest 객체와 동일하다. this는 모 객체의 인자 값이 달라지는 새로운 초기화에서도, 지칭되는 그 값이 정확하게끔 도와준다.</p>
</blockquote>
<pre><code class="language-javascript">
  profile: function () {
    console.log(`${this.name} is ${this.age} years old `);
  }, //  objTest의 메소드인 profile에서 사용되고 있는 this는 원 객체인 objTest와 동일하다.
  greeting: function () {
    console.log(`Hi ! I,m ${this.name} .`); // greeting 메소드 또한, objTest에서 속해서 실행되므로 this는 objTest이다.
  },
};
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[호이스팅 (Hoisting)]]></title>
            <link>https://velog.io/@ordo_92/%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85-Hoisting</link>
            <guid>https://velog.io/@ordo_92/%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85-Hoisting</guid>
            <pubDate>Tue, 15 Sep 2020 15:09:24 GMT</pubDate>
            <description><![CDATA[<p><a href="https://gmlwjd9405.github.io/2019/04/22/javascript-hoisting.html">Reference =&gt; ** gmlwjd9405 - github 참조 //</a></p>
<h2 id="개념">개념</h2>
<blockquote>
</blockquote>
<p>호이스팅이란 일반적으로, var 변수와 함수선언문에서 선언 자체가, 코드의 최상단으로 위치하는 것으로 생각되지만, 좀더 명확하게 말해서, <strong>유효한 블록 스코프내의 할당이 아닌 선언 그 자체만을 최상위로 이끌어 올린 후 필요할 때마다 사용</strong>하는 것을 말한다. </p>
<blockquote>
</blockquote>
<p>*1. 코드의 가독성과 유지보수를 위해 호이스팅이 일어나지 않도록 한다.
*2. 호이스팅을 제대로 모르더라도 함수와 변수를 가급적 코드 상단부에서 선언하면, 호이스팅으로 인한 스코프 꼬임 현상은 방지할 수 있다.
3. let/const를 사용한다.</p>
<h2 id="호이스팅의-대상">호이스팅의 대상</h2>
<pre><code>
=&gt; var 변수 선언, 함수선언문
=&gt; 할당이, 아닌 선언 자체만 끌어올려짐
=&gt; let /const 변수 선언, 함수표현식은 호이스팅 발생 X // 블록 스코프가 명확하기 때문
</code></pre><pre><code class="language-javascript">
 console.log(&quot;martion&quot;);

  var thanks = &quot;github&quot;; // var 변수 
  let fastfive = &quot;tommorow&quot;; // let 변수 

/** --- JS Parser 내부의 호이스팅(Hoisting)의 결과 - 위와 동일 --- */

  var thanks; // 실질적으로 변수 thanks가 선언이 끌어올려짐

console.log(&quot;martion&quot;);
  thanks = &quot;github&quot;; // &quot;할당&quot; , 선언은 맨 처음에 이루어짐
  let fastfive = &quot;tommorow&quot;; // [Hoisting] 발생 X
</code></pre>
<pre><code class="language-javascript">hoist(); // 함수 호출
gravity(); // 함수 호출 

function hoist(){
   console.log(&quot;done&quot;);
}  // 함수 선언문


var grafity = function(){
     console.log(&quot;you can&#39;t hoist&quot;);
 } // 함수 표현식

=&gt; 결과값 , hoist() : &quot;done&quot;  / grafity() : Error 


// 렌더 과정 풀이

var grafity; // 함수의 변수값 선언이 호이스팅됨

function hoist(){
   console.log(&quot;done&quot;);
}  // 함수 선언문자체가 호이스팅됨

hosit(); // &quot;done&quot; 출력
grafvity(); // Error

grafity = function(){
     console.log(&quot;you can&#39;t hoist&quot;);
 } // 함수 값 할당

 =&gt; 결과적으로 위 값과 동일하다
</code></pre>
<h2 id="호이스팅의-우선순위">호이스팅의 우선순위</h2>
<blockquote>
</blockquote>
<p>변수 선언은, 함수선언보다 높이 이끌어진다, 기본적으로 렌더 순서를 확인한다면, *<em>변수 선언 -&gt; 함수 선언 -&gt; 변수 할당 *</em>순으로 확인한다.</p>
<pre><code class="language-javascript">
// 나열 전

var target1 = &quot;boy&quot;;

function target1() {
  console.log(&quot;girl&quot;);
}

function target2() {
  console.log(&quot;baby&quot;);
}

var target2 = &quot;position&quot;;

console.log(target1); //expected =&gt; &quot;boy&quot;
console.log(target2); //expected =&gt; &quot;position&quot;

// 순서 나열 후

var target1 // 선언 및 할당된 것을 분리해서 선언만 가져옴
var target2 // 선언 및 할당된 것을 분리해서 선언만 가져옴

function target1() {
  console.log(&quot;girl&quot;);
              }  // 함수 선언문 호이스팅

function target2() {
  console.log(&quot;baby&quot;);
              } // // 함수 선언문 호이스팅


target1 = &quot;boy&quot;; //  값 할당
target2 = &quot;position&quot;; // 값 할당

console.log(target1); //expected =&gt; &quot;boy&quot;
console.log(target2); //expected =&gt; &quot;position&quot;

</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[startsWith , endsWith, includes]]></title>
            <link>https://velog.io/@ordo_92/startsWith-endsWith-includes</link>
            <guid>https://velog.io/@ordo_92/startsWith-endsWith-includes</guid>
            <pubDate>Mon, 14 Sep 2020 17:06:06 GMT</pubDate>
            <description><![CDATA[<p><strong>String 기반 메소드들로써, 문자열 값을 판단하여 , 정렬 후 불러올때 용이하다. 불리언 값을 반환한다.</strong></p>
<h3 id="1startwith">1.startWith()</h3>
<p>startsWith() 메소드는 어떤 문자열이** 특정 문자로 시작하는지** 확인하여 결과를 true 혹은 false로 반환한다.</p>
<blockquote>
</blockquote>
<p>*<em>구문 : *</em> str.startsWith(searchString[, position])</p>
<pre><code class="language-javascript">
//  startsWith

let wolves = `where can i watch the raised by wolves?`; // length : 39

console.log(wolves.startsWith(&#39;where can i&#39;));  // true
console.log(wolves.startsWith(&#39;by&#39;));     // false
console.log(wolves.startsWith(&#39;watch&#39;, 12)); // true , 공백도 간격으로 카운트 해야한다.

</code></pre>
<h3 id="2endswith">2.endsWith()</h3>
<p>The endsWith() 메서드를 사용하여 어떤 문자열에서** 특정 문자열로 끝나는지를** 확인할 수 있으며, 그 결과를 true 혹은 false로 반환한다.</p>
<blockquote>
</blockquote>
<p>*<em>구문 : *</em> str.endsWith(searchString[, length])</p>
<pre><code class="language-javascript">
//  endsWith

let wolves = `where can i watch the raised by wolves?`; // length : 39

console.log(wolves.endsWith(&#39;wolves?&#39;));  // true
console.log(wolves.endsWith(&#39;i&#39;));     // false
console.log(wolves.endsWith(&#39;raised&#39;, 28)); // true , raised의 끝나는 자릿수
</code></pre>
<h3 id="3includes">3.includes()</h3>
<p>includes() 메서드는 하나의 문자열이 다른 문자열에 포함되어 있는지를 판별하고, 결과를 true 또는 false 로 반환한다.</p>
<blockquote>
</blockquote>
<p><strong>구문 :</strong> str.includes(searchString[, position])</p>
<pre><code class="language-javascript">
//  includes

let wolves = `where can i watch the raised by wolves?`; // length : 39

var str = &#39;To be, or not to be, that is the question.&#39;;

console.log(wolves.includes(&#39;i watch the&#39;));       // true
console.log(wolves.includes(&#39;wolves?&#39;));    // true
console.log(wolves.includes(&#39;where Can i&#39;)); // false , 메소드가 대소문자를 구분함
console.log(wolves.includes(&#39;watch the&#39;, 1));    // false , 시작점이 맞지 않음
console.log(wolves.includes(&#39;By&#39;));       // false , 대소문자 구분


</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[ES6의 템플릿 리터럴]]></title>
            <link>https://velog.io/@ordo_92/ES6%EC%9D%98-%ED%85%9C%ED%94%8C%EB%A6%BF-%EB%A6%AC%ED%84%B0%EB%9F%B4</link>
            <guid>https://velog.io/@ordo_92/ES6%EC%9D%98-%ED%85%9C%ED%94%8C%EB%A6%BF-%EB%A6%AC%ED%84%B0%EB%9F%B4</guid>
            <pubDate>Mon, 14 Sep 2020 16:25:35 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>자바스크립트가 ES6로 넘어오며, &#39;템플릿 리터럴&#39;이라는 내장 표현식을 허용하는, 새로운 문자열 표기법을 도입하였다. </p>
</blockquote>
<p>템플릿 리터럴은 일반 문자열과 비슷해 보이지만, ‘(Quotes) 또는 “pair
Quotes&quot;  같은 문자 대신  ` 그레이브 액센트 (grave accent)라는 문자를 사용한다.
<strong>이는 코드 작성환경에서 바라보는 코드 입력값의 형태와, 실제 렌더 적용되어지는 그 결과 값을 최대한 시각적으로 같게끔 도와준다.(이전 버전보다 상대적으로)</strong></p>
<pre><code class="language-javascript">
구문  : 
`string text` // 백틱으로 시작해서 백틱으로 닫기

`string text line 1
 string text line 2`  // 템플릿 리터럴로 시작으로 코드작성을 한다면, 동일하게 줄바꿈이 마크업에서 적용된다.

`string text ${expression} string text` // 템플릿 리터럴내에서는 ${variable..}(중괄호)로 변수를 표기할 수 있으며, 내부 자체적으로 값을 지닌다. (String Interpolation , 문자열 인터폴레이션 , 이 값은 문자열로 변환된다.)

tag `string text ${expression} string text` // 태그 함수를 이용하여, 템플릿 리터럴의 논리값을 파싱해올 수 있다. 여기선 다루지 않겠다.


</code></pre>
<blockquote>
<p>템플릿 리터럴이 아닌경우, 공백을 표현하거나 (\ , 이스케이프 시퀀서 ) ,줄바꿈을 표현하는 경우 (\n)의 방식과 개념이 다르다. 앞서 말한것처럼 직관적인 코드 에딧 환경과 렌더 작업물에서의 값을 최대한 닮아있는 형태이다. 따라서 줄바꿈을 템플릿 리터럴 내부에서 진행할 경우, 멀티라인으로 코드를 작성해주면 된다. </p>
</blockquote>
<pre><code class="language-javascript">console.log(&quot;World war 1\n&quot;+
&quot;World war 2&quot;);

=&gt;

 `World war 1
  World war 2`
</code></pre>
<pre><code class="language-javascript">
const compLists = `&lt;ul class=&quot;new-list&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;#class-1&quot;&gt;1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#class-2&quot;&gt;2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#class-3&quot;&gt;3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#class-4&quot;&gt;4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;`; 

// 직관적인 마크업 제공

console.log(compLists);</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[변수의 형 변환]]></title>
            <link>https://velog.io/@ordo_92/%EB%B3%80%EC%88%98%EC%9D%98-%ED%98%95-%EB%B3%80%ED%99%98</link>
            <guid>https://velog.io/@ordo_92/%EB%B3%80%EC%88%98%EC%9D%98-%ED%98%95-%EB%B3%80%ED%99%98</guid>
            <pubDate>Mon, 14 Sep 2020 04:18:06 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>자바스크립트는 다른 언어들과 달리 변수의 타입을 따로 지정하지 않는다. 그렇기에 변수에 어떤 값이 담기냐에 따라 그 타입을 인지해줄뿐이다. (물론 이를 보완한 타입스크립트가 추후에 등장한다.)
그러나 자바스크립트에선, 일반적인 변수 선언을 해준 뒤, 별도의 방법으로 형 변환을 진행해주면된다.</p>
</blockquote>
<h3 id="문자형---숫자형">문자형 -&gt; 숫자형</h3>
<pre><code class="language-javascript">let polygons = parseInt(&quot;12&quot;); // 문자를 정수형으로 변환
let demisoda = parseFloat(&quot;124.00&quot;); // 문자를 실수형으로 변환
let avant = Number(&quot;133&quot;); // 문자를 정수&amp;실수형으로 변환

let onfire = &quot;chuck12&quot;
let dunkirk = &quot;chuck1.2&quot;

let a = parseInt(onfire); // NaN , 출력시 숫자값만을 담고 있지않은 문자열은 숫자로 변환될 수 없음
let b = parseInt(dunkirk); // NaN , 위와 동일
let c = parseFloat(onfire); // NaN , 위와 동일
let d = parseFloat(dunkirk); // NaN , 위와 동일
let e = Number(onfire); // NaN , 위와 동일
let f = Number(dunkirk); // NaN , 위와 동일</code></pre>
<h3 id="숫자형---문자형">숫자형 -&gt; 문자형</h3>
<pre><code class="language-javascript">let goyard = String(21); // &quot;21&quot; 
let tenet = 442.toString(); // &quot;442&quot;
let wakizaka = 123.toString(2); //  &quot;1111011&quot; , 2진법 변환
let sussex = 123.toString(16); // &quot;7b&quot; , 16진법 변환
let belfast = 123.0.toFixed(1); // 123.0  // 실수형 데이터의 부동소수점 지정 , 1번째까지
let wales = 123.0.toFixed(2); // 123.00  

</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[reduce,map,filter]]></title>
            <link>https://velog.io/@ordo_92/reducemapfilter</link>
            <guid>https://velog.io/@ordo_92/reducemapfilter</guid>
            <pubDate>Sun, 13 Sep 2020 17:24:27 GMT</pubDate>
            <description><![CDATA[<p><strong>Reduce,map,filter는 배열 기반 메소드들로써, 그 사용 빈도가 빈번하고, 필수적인 이해도와, 숙련도가 요구되어진다.</strong></p>
<h3 id="1reduce">1.reduce()</h3>
<p>reduce() 메소드는 배열의 각 요소에 대해 주어진 <strong>리듀서 (reducer)</strong> 함수와 초기값으로 메소드를 실행하고, <strong>하나의 결과값을 반환</strong>한다.</p>
<blockquote>
</blockquote>
<p>*<em>구문 : *</em>arr.reduce(callback[, initialValue])
//리듀서 함수인 콜백함수는 4개의 파라미터로 이루어져있다.
-&gt;
<em>누산기accumulator (acc)
현재 값 (cur)
현재 인덱스 (idx)
원본 배열 (src)</em></p>
<pre><code class="language-javascript">let olymicRank = [
  { country: &quot;England&quot;, rank: 5 },

  { country: &quot;USA&quot;, rank: 1 },

  { country: &quot;Russia&quot;, rank: 2 },

  { country: &quot;Republic of Korea&quot;, rank: 6 },
]; // 배열 정의

let totalPoint = olymicRank.reduce(function (acc, value) { //주로 누산기 , 현재값만을 파라미터로 넣어준다.
  console.log(acc);
  return acc + value.country;
}, 0); // 마지막에 초기값을 넣어준다.

console.log(totalPoint);

/*
//순서대로 누산값 출력

0
5
6
8
14 &lt;-- totalPoint 값

*/
</code></pre>
<h3 id="2map">2.map()</h3>
<p>map() 메소드는 배열 내의 모든 요소 <strong>각각에 대하여</strong> 정한 논리값을 적용시킨 후 새로운 배열에 그 값을 반환한다.</p>
<blockquote>
<p><strong>구문 :</strong>arr.map(callback(currentValue[, index[, array]])[, thisArg])</p>
</blockquote>
<pre><code class="language-javascript">let historyMine = [
  { age: 1, location: &quot;서대문구 남가좌동&quot; },

  { age: 4, location: &quot;양천구 신길동&quot; },

  { age: 5, location: &quot;안양시 인덕원&quot; },

  { age: 7, location: &quot;남동구 간석동&quot; },

  { age: 10, location: &quot;성북구 안암동&quot; },

  { age: 12, location: &quot;종로구 혜화동&quot; },
]; // 배열 정의

let sumMine = historyMine.map(function (move) { // 배열의 요소 값을 참조할 수 있는 move 매개변수 생성
  return move.age + 12 + &quot;, &quot; + move.location; // 각각의 인자 값에 12를 더한 후, 지명과 함께 새 배열 submine에 담는다.
});

console.log(sumMine); // map() 메소드로 새로 담긴 subMine 배열

// =&gt;(6) [&quot;13, 서대문구 남가좌동&quot;, &quot;16, 양천구 신길동&quot;, &quot;17, 안양시 인덕원&quot;, &quot;19, 남동구 간석동&quot;, &quot;22, 성북구 안암동&quot;, &quot;24, 종로구 혜화동&quot;]</code></pre>
<h3 id="3filter">3.filter()</h3>
<p>filter() 메소드는 피함수에게 주어진 조건을 만족시키는 요소들만을 찾아, 새로이 그 값들만을 담아주는 배열을 생성케합니다.</p>
<blockquote>
</blockquote>
<p><strong>구문 :</strong> arr.filter(callback(element[, index[, array]])[, thisArg])</p>
<pre><code class="language-javascript">let arabics = [1, 23, 25, 45, 31, 22, 48, 85, 66, 12, 57, 9, 5, 47, 16, 77];

// 1이상 100미만의 임의의 요소 배열인 arabics 정의

let numbers = arabics.filter((num) =&gt; 19 &lt; num &amp;&amp; num &lt; 55);

// 19이상이며 55이하인 값들만을 담아주는 numbers 배열 생성

console.log(numbers);

// =&gt;(7) [23, 25, 45, 31, 22, 48, 47]</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[값의 여러 결합 형태 및 방식]]></title>
            <link>https://velog.io/@ordo_92/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98-%EC%97%AC%EB%9F%AC-%EA%B2%B0%ED%95%A9-%ED%98%95%ED%83%9C-%EB%B0%8F-%EB%B0%A9%EC%8B%9D</link>
            <guid>https://velog.io/@ordo_92/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98-%EC%97%AC%EB%9F%AC-%EA%B2%B0%ED%95%A9-%ED%98%95%ED%83%9C-%EB%B0%8F-%EB%B0%A9%EC%8B%9D</guid>
            <pubDate>Sun, 13 Sep 2020 14:39:43 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>자바스크립트에서 문자열,숫자,공백문자 또는 undefined,NaN과 같은 특수한 미명시된 값들은 서로 간의 타입이 달라도 결합이 가능하며, 그 규율은 이미 정해져있다</p>
</blockquote>
<pre><code class="language-javascript">

let str = &quot;Port&quot; + &quot;Baby&quot; // + 연산자를 통한 문자열간의 조합 , console.log(str) =&gt; PortBaby

let porche = &quot;Suddenly, &quot;
let venz = porche + &quot;He came out&quot; // console.log(venz) =&gt; &quot;Suddenly, He came out&quot;

let demiglass = &quot;i guess we visit the Mars in about &quot; + 2 + 0 + &quot; years&quot; // console.log(demiglass) =&gt; &quot;i guess we visit the Mars in about 20 years&quot;
// 2 + 0이 2가 아닌 20으로 출력이되었다. 결합을 문자열 간의 결합과 같은 맥락으로 붙인 후 숫자형으로 출력한다.

let dona = 1 + 2 // consoe.log(dona) =&gt; 3 , 숫자열만이 존재하고 , 그 간의 결합은 일반적인 사칙연산이 적용된다.

let avant;
var garde = &#39;&#39;;

console.log(&#39;why&#39; + avant); // =&gt; whyundefined , 값이 담기지 않은 선언만 된 변수는 그 값이 undefined
console.log(&#39;do not&#39; + garde); // =&gt; do not


let dan ; 
let blindside = &#39;&#39;;

console.log(12 + dan); // =&gt; NaN 
console.log(12 + blindside); // 12 , 공백값과의 결합은 무난히 숫자로 출력된다.</code></pre>
<blockquote>
</blockquote>
<p>join() 메소드를 이용하면, 각 배열의 값을 하나의 문자열로 결합할 수 있다.</p>
<pre><code class="language-javascript">let defaultArray = [&#39;The &#39;, &#39;queen &#39;, &#39;save &#39;, &#39;us &#39;];
let kingdom = defaultArray.join(&#39;&#39;);

console.log(kingdom);</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[연산자]]></title>
            <link>https://velog.io/@ordo_92/%EC%A6%9D%EA%B0%90-%EC%97%B0%EC%82%B0%EC%9E%90-%EB%B3%B5%ED%95%A9-%EB%8C%80%EC%9E%85-%EC%97%B0%EC%82%B0%EC%9E%90</link>
            <guid>https://velog.io/@ordo_92/%EC%A6%9D%EA%B0%90-%EC%97%B0%EC%82%B0%EC%9E%90-%EB%B3%B5%ED%95%A9-%EB%8C%80%EC%9E%85-%EC%97%B0%EC%82%B0%EC%9E%90</guid>
            <pubDate>Fri, 11 Sep 2020 17:58:01 GMT</pubDate>
            <description><![CDATA[<h2 id="1-산술-연산자">1. 산술 연산자</h2>
<blockquote>
</blockquote>
<p>산술 연산자는 숫자를 먼저 , 피연산자로 받은 후 그 값에 따른, 하나의 숫자 값을 반환한다.</p>
<h3 id="덧셈---">덧셈 ( + )</h3>
<pre><code class="language-javascript">
// Number + Number -&gt; 합
1 + 2 // 3

// Boolean + Number -&gt; 합
true + 1 // 2

// Boolean + Boolean -&gt; 합 
false + false // 0 , false는 0 의 값을 갖는다.

// Number + String -&gt; 연결
5 + &quot;foo&quot; // &quot;5foo&quot; , 문자와 숫자의 결합은, 숫자를 문자열로 바꾼다.

// String + Boolean -&gt; 연결
&quot;foo&quot; + false // &quot;foofalse&quot; , 문자열과의 만남은 불리언타입 역시 문자열로 변환된다.

// String + String -&gt; 연결
&quot;foo&quot; + &quot;bar&quot; // &quot;foobar&quot;

// </code></pre>
<h3 id="뺄셈----">뺄셈 ( - )</h3>
<pre><code class="language-javascript">
5 - 3 // 2
3 - 5 // -2 
&quot;foo&quot; - 3 // NaN , 덧셈과 다르게 다른 타입끼리의 감산 연산은 그 결과가 NaN이 출력된다.
true - 3 // -2 , 불리언타입의 연산은 가능하다.
</code></pre>
<h3 id="나눗셈---">나눗셈 ( / )</h3>
<pre><code class="language-javascript">
1 / 2      // JavaScript에선 0.5 
// (양쪽 피연산자 모두 명시적인 부동소수점 숫자가 아님)

1.0 / 2.0  //   0.5 -&gt; 정확한 값 산출을 위해선 명확한 부동소숫점을 쓰도록 버릇들이는게 좋을 것 같다.

2.0 / 0    // JavaScript에서 Infinity
2.0 / 0.0  // 동일하게 Infinity
2.0 / -0.0 // JavaScript에서 -Infinity</code></pre>
<h3 id="곱셈---">곱셈 ( * )</h3>
<pre><code class="language-javascript">2 * 2 // 4
-2 * 2 // -4
Infinity * 0 // NaN 
Infinity * Infinity // Infinity
&quot;foo&quot; * 2 // NaN , 문자열과 숫자의 처리 결과값</code></pre>
<h3 id="나머지---">나머지 ( % )</h3>
<pre><code class="language-javascript">
12 % 5 // 2 
-1 % 2 // -1
NaN % 2 // NaN
1 % 2 // 1
2 % 3 // 2
-4 % 2 // -0 , 음의 0값이다. 이 부분이 독특하다.
5.5 % 2 // 1.5</code></pre>
<h3 id="거듭제곱---">거듭제곱 ( ** )</h3>
<blockquote>
<p>좌항 피연산자를 밑, 우항 피연산자를 지수로 값을 생성한다. 연산자는 우결합성을 가집니다.</p>
</blockquote>
<pre><code class="language-javascript">2 ** 3 // 8
3 ** 2 // 9
3 ** 2.5 // 15.588457268119896
10 ** -1 // 0.1
NaN ** 2 // NaN

2 ** 3 ** 2 // 512
2 ** (3 ** 2) // 512
(2 ** 3) ** 2 // 64</code></pre>
<h2 id="2-증가-연산자">2. 증가 연산자(++)</h2>
<blockquote>
</blockquote>
<p>단항 연산자이며 피연산자값에 1을 더합니다. 만약 연산자를 피연산자 앞(++x)에 사용하면, 피연산자에 1을 더한 값을 반환합니다. 만약 연산자를 피연산자 뒤(x++)에 사용하면, 피연산자에 1을 더하기 전 값을 반환합니다.</p>
<pre><code class="language-javascript">
// 접미사 

let suffix = 31;
plusfix = suffix++; // plusfix = 31, suffix = 32

// 접두사

let prefix = 45;
adfix = ++prefix; // prefix = 46 , adfix = 46
</code></pre>
<h2 id="3-감소-연산자--">3. 감소 연산자(--)</h2>
<blockquote>
</blockquote>
<p>단항 연산자입니다. 피연산자로 부터 1을 뺍니다. 반환값은 증가 연산자와 유사합니다.</p>
<pre><code class="language-javascript">
// 접미사 

let suffix = 12;
minusfix = suffix--; // minusfix = 12, suffix = 11

// 접두사

let prefix = 34;
delfix = --prefix; // delfix = 33, prefix = 33
</code></pre>
<h2 id="4-복합-대입-연산자">4. 복합 대입 연산자</h2>
<blockquote>
</blockquote>
<p>연산과 대입이 복합적으로 이루어지는 연산자입니다.</p>
<p>두 줄이상의 코드를 깔끔하게 정리할 수 있으며, 일반적인 수학에서의 사칙 연산과 그 연산자의 의미가 프로그래밍에서는 이 연산자부터 본격적으로 다르다는 것을 느꼈습니다.</p>
<p>종류에는<em>* &#39;+=&#39;, &#39;-=&#39;, &#39;</em>=&#39;, &#39;/=&#39;, &#39;%=&#39;**가 있습니다.</p>
<pre><code class="language-javascript">A = 14;
B = 12;

// 실제 코드처리는 동기적으로 나열하지 않고, 일회씩 처리하여 결과를 옮겨왔습니다.

result1 = A += B; // A = 26 , A = A + B
result2 = A -= B; // A = 2  , A = A - B
result3 = A *= B; // A = 168  , A = A * B
result4 = A /= B; // A = 1.1666666666666667 , A = A / B
result5 = A %= B; // A = 2 ,  A = A % B
</code></pre>
<h2 id="5-비교-연산자">5. 비교 연산자</h2>
<blockquote>
<p>JS는 엄격비교, 형변환 비교를 따른다.
엄격 비교 (===)는 피연산자들끼리 같은 자료형과 내용이 일치해야 참이다. 추상비교 (==)는 두 피연산자를 같은 자료형으로 일치시킨 후 , 내용을 비교한다. </p>
</blockquote>
<h4 id="문자열--">문자열 -&gt;</h4>
<p>같은 문자 시퀀스, 같은 길이,같은 위치에 같은 문자라면 일치한다. </p>
<h4 id="숫자--">숫자 -&gt;</h4>
<p>같은 숫자 값이면 일치한다. NaN은 자기 자신을 포함한 그 무엇과도 동등하지 않습니다. +0과 -0은 서로 일치한다.</p>
<h4 id="불리언--">불리언 -&gt;</h4>
<p>두 피연산자의 값이 true거나 false이면 일치한다.</p>
<h4 id="객체--">객체 -&gt;</h4>
<p>객체가 서로 다르다면 ( key,value ) , 그 객체는 동일하지 않다.</p>
<h4 id="null--undifined--">Null &amp; undifined -&gt;</h4>
<p>null과 undefined는 <strong>스스로와 일치하고, 동등하다.</strong></p>
<h2 id="6-논리-연산자">6. 논리 연산자</h2>
<blockquote>
<p>논리 연산자는 불리언 타입의 값 [ 논리의 참,거짓 ]을 반환한다. 하지만 예외로,  &amp;&amp;과 [논리 AND ] || [논리 OR ] 연산자는 피연산자의 한 가지 값을 반환한다. 그러므로 불리언 외의 다른 값과 함께 사용하면 불리언 값이 아닌 것을 반환할 수 있다.</p>
</blockquote>
<h4 id="논리-and-">논리 AND (&amp;&amp;)</h4>
<pre><code class="language-javascript">a1 = true  &amp;&amp; true       // t &amp;&amp; t returns true
a2 = true  &amp;&amp; false      // t &amp;&amp; f returns false
a3 = false &amp;&amp; true       // f &amp;&amp; t returns false
a4 = false &amp;&amp; (3 == 4)   // f &amp;&amp; f returns false
a5 = &#39;Cat&#39; &amp;&amp; &#39;Dog&#39;      // t &amp;&amp; t returns &quot;Dog&quot; , &#39;string&#39; 값은 true이다.
a6 = false &amp;&amp; &#39;Cat&#39;      // f &amp;&amp; t returns false
a7 = &#39;Cat&#39; &amp;&amp; false      // t &amp;&amp; f returns false
a8 = &#39;&#39;    &amp;&amp; false      // f &amp;&amp; f returns &quot;&quot; , &#39;&#39;는 false 값이다.
a9 = false &amp;&amp; &#39;&#39;         // f &amp;&amp; f returns false</code></pre>
<h4 id="논리-or-">논리 OR (||)</h4>
<pre><code class="language-javascript">o1 = true  || true       // t || t returns true
o2 = false || true       // f || t returns true
o3 = true  || false      // t || f returns true
o4 = false || (3 == 4)   // f || f returns false
o5 = &#39;Cat&#39; || &#39;Dog&#39;      // t || t returns &quot;Cat&quot;
o6 = false || &#39;Cat&#39;      // f || t returns &quot;Cat&quot;
o7 = &#39;Cat&#39; || false      // t || f returns &quot;Cat&quot;
o8 = &#39;&#39;    || false      // f || f returns false
o9 = false || &#39;&#39;         // f || f returns &quot;&quot;
o10 = false || varObject // f || object returns varObject</code></pre>
<h4 id="논리-not-">논리 NOT (!)</h4>
<pre><code class="language-javascript">n1 = !true               // !t returns false
n2 = !false              // !f returns true
n3 = !&#39;&#39;                 // !f returns true
n4 = !&#39;Cat&#39;              // !t returns false</code></pre>
<h2 id="7-연산자-우선순위">7. 연산자 우선순위</h2>
<blockquote>
<p>연산자를 실행하는 순서이다. 우선순위가 높은 연산자가 먼저 실행됩니다. 각 연산자마다 고유한 우선순위가 있으며, 다항 연산에, 동일한 우선순위의 연산자가 두 종류 존재할 경우, 연산자의 결합성에 따라 우선순위가 달라진다.</p>
</blockquote>
<p>우선순위 표 참조 : <a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/%EC%97%B0%EC%82%B0%EC%9E%90_%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84">연산자 우선순위 - MDN</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[수형 표현 (Math expression) 
- JS ]]></title>
            <link>https://velog.io/@ordo_92/%EC%88%98%ED%98%95-%ED%91%9C%ED%98%84-Math-expression-JS</link>
            <guid>https://velog.io/@ordo_92/%EC%88%98%ED%98%95-%ED%91%9C%ED%98%84-Math-expression-JS</guid>
            <pubDate>Thu, 10 Sep 2020 11:31:36 GMT</pubDate>
            <description><![CDATA[<h1 id="1타입">1.타입</h1>
<p>자바스크립트는 수에 대해서 관용적인 언어이다.</p>
<blockquote>
</blockquote>
<p>수를 선언할 때, 타입을 따로 선언하지 않으며, <strong>Number라는 타입</strong> 하나로 정리되며, 모든 수는 동일한 방식으로 처리되며, 선언에 담기는 값에따라 자바스크립트 엔진은 그 타입을 인지할 뿐이다.</p>
<p>이는 자바스크립트가 갖는 장점이 될 수도 있다고 생각한다.</p>
<p>메모리에 IEEE - 754 형식을 이용해서 저장한다.이 형식에 의해 - <strong>(2⁵³ - 1) 부터 2⁵³ - 1 까지는 정확히 IEEE - 754 로 표현될 수 있지만, 그 초과와 이하 는 IEEE - 754 로 직접 표현될 수 없으며 가까운 수나 0 으로 반올림 한다.</strong></p>
<p>JS는 모든 숫자값을 64 비트 부동소수점으로 관리한다.java에서 integer, float 등으로 정수와 실수 타입을 구분하던것과는 달리 모든 숫자를 double 타입으로 저장하는것과 같다.</p>
<p>결론적으로 자바스크립트는 내부적으로 명확히는 정수형이 없고 <strong>실수형으로 엄격히 존재한다.</strong></p>
<h1 id="2수의-표현">2.수의 표현</h1>
<p><strong>*정수(Integers)</strong>: 자연수, 음의 정수 및 0으로 이루어진 모든 수들이다.</p>
<p><strong>*부동소수점 방식(floats)</strong>:  [  14.2 ] , [ 1.212121312 ]와 같이 소수점,소수 자릿수가 존재한다. Javascript 에서 소수를 정의하기 위해서는. 소숫점이 수 안에 존재하면 소수로 인식된다. 소수점이 없다면 이는 간략히 정수로 표현된다. [ 자바스크립트 엔진이 참 능동적이다 ]</p>
<p><em><strong>소수는 정수를 포함한 32 비트 까지 표현이 가능하다.</strong></em> 그 이상은 반올림 처리된다.Javascript 에서 소수 연산은 정확하지 않다.다른 여러 방법으로 소수 연산을 처리하고 있다.</p>
<blockquote>
</blockquote>
<p>  =&gt; console.log(0.1 + 0.2);
// 0.30000000000000004</p>
<pre><code>var a = Number.MAX_SAFE_INTEGER || 9007199254740991;
var b = a + 1
console.log(Number.isSafeInteger(a));
// true;
console.log(Number.isSafeInteger(b));
// false


var c = 18437736874454810627;
console.log(c);
// 18437736874454810000</code></pre><pre><code>10진수 -&gt; 16진수 

var dec = 123;
var hex = dec.toString(16); // === &quot;7b&quot;</code></pre><pre><code>* 10진수 -&gt; 2진수

var dec = 123;
var bin = dec.toString(2); // === &quot;1111011&quot;</code></pre><pre><code>
* 16진수 -&gt; 10진수

var hex = &quot;7b&quot;;
var dec = parseInt(hex, 16); // === &quot;123&quot;

</code></pre><pre><code>* 16진수 -&gt; 2진수 (* 10진수로 바꿨다가 다시 2진수로 바꾼다)

var hex = &quot;7b&quot;;
var bin = parseInt(hex, 16).toString(2); // === &quot;1111011&quot;
</code></pre><pre><code>
* 2진수 -&gt; 10진수

var bin = &quot;1111011&quot;;
var dec = parseInt(bin, 2); // === &quot;123&quot;
</code></pre><pre><code>* 2진수 -&gt; 16진수 (* 10진수로 바꿨다가 다시 2진수로 바꾼다)

var bin = &quot;1111011&quot;;
var hex = parseInt(bin, 2).toString(16); // === &quot;7b&quot;</code></pre><p>출처: <a href="https://unikys.tistory.com/334">https://unikys.tistory.com/334</a> [All-round programmer]</p>
<h1 id="3특수-표기">3.특수 표기</h1>
<h3 id="지수표기법">*지수표기법</h3>
<p>너무 큰 숫자는 exponent 표기법을 사용하여 표현할 수 있다. 이때 e 는 대소문자를 가리지 않는다. e 앞의 숫자를 뒤에 있는 숫자 만큼 10 으로 곱한다. 앞의 숫자를 소수로 작성 할 수도 있다. 소수는 e 뒤에 - 를 붙힘으로 표현할 수 있다.</p>
<pre><code>console.log(1.123E+5);
// 112300
console.log(1.123e-5);
// 0.00001123

console.log(1e20);
// 100000000000000000000

console.log(1e21);
// 1e+21

console.log(1e308);
// 1e+308

console.log(1e309);
// Infinity</code></pre><h3 id="무한대-infinity">*무한대 (Infinity)</h3>
<p>Javascript 에서는 모든 숫자를 표현할 수 없다.때문에 표현할 수 있는 범위를 넘어가면, Infinity 로 표현한다.
Number.MAX_VALUE 와 Number.MIN_VALUE 으로 범위를 알 수 있다. Number.POSITIVE_INFINITY 와 Number.NEGATIVE_INFINITY 으로 무한대 값을 가져올 수 있다.</p>
<pre><code>console.log(Number.MAX_VALUE);
// 1.7976931348623157e+308

console.log(Number.MIN_VALUE);
// 5e-324

console.log(Infinity);
console.log(Number.POSITIVE_INFINITY);
// Infinity

console.log(-Infinity);
console.log(Number.NEGATIVE_INFINITY);
// -Infinity</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Function, return type과, void의 유무에 대하여 ]]></title>
            <link>https://velog.io/@ordo_92/Function-return-type%EA%B3%BC-void%EC%9D%98-%EC%9C%A0%EB%AC%B4%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC</link>
            <guid>https://velog.io/@ordo_92/Function-return-type%EA%B3%BC-void%EC%9D%98-%EC%9C%A0%EB%AC%B4%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC</guid>
            <pubDate>Wed, 09 Sep 2020 17:18:11 GMT</pubDate>
            <description><![CDATA[<p><strong><em>일반적으로, 함수는 함수 외부의 경우엔 코드에 의해 호출될 수 있는 하위의 논리 구조(프로그램)이다.</em></strong></p>
<h2 id="1-return-type"><strong>[1] Return Type</strong></h2>
<blockquote>
<p>프로그램 그 자체처럼, 함수는 일련의 구문으로 구성되어있다. 값은 함수에 전달될 수 있고 함수는 값을 반환하는 것이 기본이다. 그래서인지 함수는 값 그 자체이다.</p>
</blockquote>
<pre><code>function numberSum(a,b)

{ 
   return a+b;
}


console.log(numberSum(3,3)); //numberSum(3,3) 은 6으로 출력된다.</code></pre><p>JavaScript에서 모든 함수는 <strong>&#39;Function&#39;객체</strong>다. 논리구조를 지니는 일반적인 함수도, 재귀함수도, 내부함수도, 생성자 역시 마찬가지다.</p>
<p>new 키워드로 호출되는 생성자의 경우에, 기본값은 자신의 this 매개변수 값인 것이 특징이다. ( = 생성자의 경우 ! )</p>
<blockquote>
<p>기본값 이외의 값을 반환하려면, 함수는 반환할 값을 지정하는 특정 명시의 return 문이 있어야한다. return 문이 없는 함수는 기본값을 반환한다. </p>
</blockquote>
<p>다른 모든 함수의 경우, 기본 반환값은 undefined이다. 함수 호출의 매개변수는 함수의 인수이며, 인수는 함수에 값으로 전달된다. 
함수가 인수값을 바꾸면, 이 변화는 전역 또는 호출한 함수에 반영되지 않는다. </p>
<pre><code>function A(){

   this.value = 34;
   console.log(this.value);
   // return 생략

}

A(); // 함수호출시 자동으로 value 34가 출력



function B(){

   return;
   // return 생략

}


B(); // Undefined ;
</code></pre><h2 id="2-void"><strong>[2] Void</strong></h2>
<blockquote>
</blockquote>
<p>void는 값을 생성하는 표현식을 평가해서 undefined를 반환한다.</p>
<pre><code>/피연산자가 숫자
console.log(void 92); // =&gt; undefined  

//피연산자가 문자열
console.log(void &quot;CTO가 되는 중&quot;); // =&gt; undefined

var x = 32;
void x++; // 피연산자 선 평가 후 변수의 값이 증가
console.log(x); // =&gt; 33
console.log(void(x)); // =&gt; undefined</code></pre><p>오직 undefined 원시값을 얻기 위해 void 0 또는 void(0)처럼 사용하는 경우도 볼 수 있다. <strong>이런 경우 전역 undefined를 대신 사용 가능하다.</strong></p>
<p>void 연산자의 <strong>우선순위</strong>도 유념해야한다. 그룹 연산자(괄호)를 사용하면 void 연산자를 사용한 식의 평가 과정을 더 명확하게 보일 수 있다.</p>
<pre><code>
 void 14 == &#39;14&#39;; // undefined == &#39;14&#39;, false
void (33 == &#39;33&#39;); // void true, undefined
</code></pre><p>즉시 실행 함수 표현식(IIFE)을 사용할 때 void를 사용하면 function 키워드를 선언문이 아니라 표현식처럼 간주하도록 강제할 수 있다.</p>
<pre><code>void function iife() {
    var bar = function () {};
    var baz = function () {};
    var foo = function () {
        bar();
        baz();
     };
    var biz = function () {};

    foo();
    biz();
}();

</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Let, Const 선언의 차이]]></title>
            <link>https://velog.io/@ordo_92/Let-Const-%EC%84%A0%EC%96%B8%EC%9D%98-%EC%B0%A8%EC%9D%B4</link>
            <guid>https://velog.io/@ordo_92/Let-Const-%EC%84%A0%EC%96%B8%EC%9D%98-%EC%B0%A8%EC%9D%B4</guid>
            <pubDate>Wed, 09 Sep 2020 16:36:14 GMT</pubDate>
            <description><![CDATA[<p>Let과 const는 자바스크립트에서 등장한 기존의 var 변수 선언을 대체할 수 있는 종류들로써, ES6에서 새로이 등장한 선언 가능한 변수들이다.</p>
<h2 id="1-let">[1] let</h2>
<p>구문은 <em><strong>블록 유효 범위를 갖는 지역 변수를 선언</strong></em> 하며, 선언과 동시에 임의의 값으로 초기화할 수도 있다. </p>
<p>let은 전역 객체의 속성 값을 생성하지 않는다. let 으로 선언된 변수는 변수가 선언된 블록 내에서만 유효하며, 당연하지만 하위 블록에서도 유효하다. 추가로 프로그램이나 함수의 최상위에서는 let과 var은 서로 다르게 행동한다. 따라서 아래 코드에서 this의 속성값으로 testVar와 testLet을 호출했을때의 결과는 다음과 같을 것 이다.</p>
<pre><code>var testVar = &#39;global&#39;; 
let testLet = &#39;global&#39;;

console.log(this.testVar); //&quot;global&quot; 전역 객체의 속성 x를 생성
console.log(this.testLet);// undefined 전역 객체의 속성 y를 생성하지 않음

</code></pre><p>상위 스코프에서 하위 스코프로의 변수로써 유효함을 갖는다는 것은 let 과 var가 갖는 유사점이지만, var는 함수 블록 이외의 블록은 무시하고 선언된다는 점이 다르다.</p>
<p>따라서 let은 속한 블럭에 따라 그 유효범위가 명확히 구분지어지기 때문에 [1] 유동성을 갖어야 하거나, [2] 스코프에 따른 변수의 의미를 명확히 구분짓기 위해선 let을 사용하는 것이 더 좋을 것 같다.</p>
<pre><code>function varTest() {
  var x = 1;
  if (true) {
    var x = 2;  // 상위 블록과 같은 변수!
    console.log(x);  // 2
  }
  console.log(x);  // 2
}

function letTest() {
  let x = 1;
  if (true) {
    let x = 2;  // 상위 블록과 다른 변수
    console.log(x);  // 2
  }
  console.log(x);  // 1
}</code></pre><pre><code>function vartest()</code></pre><h2 id="2-const">[2] Const</h2>
<p>const 선언은 <em><strong>블록 범위의 상수</strong></em> 를 선언한다. 상수는 let 문을 사용하여 정의된 변수와 마찬가지로 블록 범위(block-scope)의 데이터 타입이다. <em><strong>상수의 값은 재할당할 수 없으며 다시 선언할 수도 없는 것이 가장 큰 특징이다.</strong></em></p>
<pre><code>const number = 42;

try {
  number = 99;
} catch (err) {
  console.log(err);
  // expected output: TypeError: invalid assignment to const `number&#39;
  // Note - error messages will vary depending on browser
}

console.log(number);
// expected output: 42</code></pre>]]></description>
        </item>
    </channel>
</rss>