문제점


프로젝트 협업을 하다보면 프로젝트 폴더를 여기저기 옮겨다니면서 작업할 때가 많다. 

그 때 간혹 라이브러리import 하지 못해 코드가 빨간줄로 도배될 때가 있다.(원인은 자세히 모름..)

나와 같이 실수하는 사람이 있다면 아래의 해결방법을 따르면 된다.


해결방법


프로젝트를 File - Open 하지 않고 File - New - Import project.. 를 통해 연다.


Poi 라이브러리 다운받기


http://poi.apache.org/download.html

여기서 최신 stable 버전을 다운받으시면 됩니다. 

하지만 저는 다운받기 번거롭기 때문에 다음 방법을 이용했습니다.



간단하게 라이브러리 추가하는 방법


Build.gradledependencies에 다음을 추가합니다.

(최신버전을 확인 후 버전에 따라 다르게 등록)


1. xls를 사용할 경우

compile 'org.apache.poi:poi:3.15'


2. xlsx를 사용할 경우

compile 'org.apache.poi:poi-ooxml:3.15'


Poi 라이브러리 사용 방법


http://javaslave.tistory.com/79

Jade


Node.js에서 기본적으로 사용되는 view 템플릿 엔진입니다.

HTML 문서에 비해 축약형 문법이며, Tag를 일일이 열고 닫고 할 필요가 없이 들여쓰기를 통해 구분됩니다.

익숙해진다면 확실히 빠르고 편한 코딩이 가능한 엔진입니다.


사용법


우선 Express에서 기본적으로 제공하는 jade 파일을 통해 알아보도록 하겠습니다.

 Jade(layout.jade)

 HTML

doctype html

html

  head

    title= title

    link(rel='stylesheet', href='/stylesheets/style.css')

  body

    block content

<!DOCTYPE html>

<html>

  <head>

    <title></title>

    <link rel="stylesheet" href="/stylesheets/style.css">

  </head>

  <body>

  </body>

</html>

우선 가장 두드러진 차이점은 위에서 설명했다시피 Tag를 열고 닫지 않으며, 대신 들여쓰기로 구분하게 됩니다.

속성은 ()괄호를 이용하여 javascript와 비슷하게 (, )로 구분하여 설정합니다. 

index.js 

 router.get('/', function(req, res, next) {

  res.render('index', { title: 'Express' });

});


또한 자신을 호출한 index.js에서 인자로 넘겨받은 title 변수를 사용합니다.

그리고 또 하나의 편리한 점은 block을 통해 템플릿 상속이 가능하다는 것입니다.

아래처럼 extends 지시어를 통해 레이아웃을 확장할 수 있습니다.

 Jade(index.jade)

 HTML

 extends layout


block content

  h1= title

  p Welcome to #{title}

 <h1></h1>

<p>Welcome to</p>

Tag에 변수를 넣고 싶을 때는 =기호를 사용하고 문자열 사이에 넣고 싶을 때는 #{변수명}을 사용합니다.


이외의 자세한 문법은 여기를 참고하세요.

'Node.js' 카테고리의 다른 글

HTTP 요청, 응답 이해하기(Express 프로젝트 기준)  (0) 2017.02.01
socket.io server 만들기  (0) 2016.11.25
npm, express  (0) 2016.11.18

HTTP Server 객체 생성


HTTP Server 객체를 생성하기에 앞서 HTTP 객체를 생성합니다.

var http = require('http');

Express 설정 파일이 담겨있는 app.js 파일을 불러와 서버 객체를 생성합니다.

(app.js 등 express 구조에 대한 자세한 설명은 http://dutax.tistory.com/6)

var app = require('../app');

var server = http.createServer(app);

Server 객체의 listen() 함수를 호출하면 클라이언트의 요청을 수신할 수 있게 됩니다.

port는 따로 설정하지 않으면 3000번 포트로 설정됩니다.

server.listen(port);


요청 객체(Request)


클라이언트의 요청 데이터를 받아옵니다.

Request의 함수(Methods)

req.params : 이름 붙은 라우트 파라미터를 담는다. ex : app.post(’/:idx’)

req.params(name) : 이름 붙은 라우트 파라미터나 GET, POST 파라미터를 담는다. 하지만 여러가지 혼란을 줄 수 있어 사용하는 것을 지양해야한다.

req.query : GET 방식으로 넘어오는 쿼리 스트링 파라미터를 담고 있다.

req.body : POST 방식으로 넘어오는 파라미터를 담고있다. HTTP의 BODY 부분에 담겨져있는데, 이 부분을 파싱하기 위해 body-parser와 같은 패키지가 필요하다.

req.route : 현재 라우트에 관한 정보. 디버깅용.

req.cookies (req.signedCookies) : 클라이언트가 전달한 쿠키 값을 가진다.

req.headers : HTTP의 Header 정보를 가지고 있다.

req.accepts([types]) : 클라이언트가 해당하는 타입을 받을 수 있는지 확인하는 간단한 메서드.

req.ip : 클라이언트의 IP Address

req.path : 클라이언트가 요청한 경로. 프로토콜, 호스트, 포트, 쿼리스트링을 제외한 순수 요청 경로다.

req.host : 요청 호스트 이름을 반환하는 간단한 메서드. 조작될 수 있으므로 보안 목적으로는 사용하면 안된다.

req.xhr : 요청이 ajax 호출로 시작되었다면 true를 반환하는 프로퍼티

req.protocol : 현재 요청의 프로토콜 (http, https 등)

req.secure : 현재 요청이 보안 요청(SSL?) 이면 true를 반환

req.url (req.originalUrl) : URL 경로와 쿼리 스트링을 반환. 원본 요청을 logging하는 목적으로 많이 쓰임.

req.acceptedLanguages : 클라이언트가 선호하는 자연어 목록을 반환. header에서 파싱하면 다국어를 지원한는 어플리케이션이라면 초기 언어 선택에 도움을 줄 수 있음.


응답객체(Response)


클라이언트에게 데이터를 전송합니다.

Respone의 함수(Methods)

res.status(code) : HTTP 응답 코드를 설정한다. 응답 코드가 redirect(30x)라면 res.redirect를 쓰는게 낫다.

res.set(name, value) : 응답 헤더를 설정. 일반적으로 직접 쓸 일은 없다.

res.cookie(name, value, [options]) : 클라이언트에 저장될 쿠키를 설정하거나 제거한다. cookie-parser 패키지가 필요하다.

res.redirect([status], url) : redirect. 기본 응답 값은 302다.

res.send(body), res.send(status, body) : 클라이언트에 응답을 보냄. 상태 코드는 옵션. 기본 콘텐츠 타입은 text/html이므로 text/plain을 보내려면 res.set(‘Content-Type’, ‘text/plain’)을 먼저 호출 해야한다. JSON을 보낼거면 res.json을 쓰자.

res.json(json), res.json(status, json) : 클라이언트로 JSON 값을 보냄.

res.jsonp(json), res.jsonp(status, json) : 클라이언트로 JSONP 값을 보냄.

res.type(type) : Contents-Type 헤더를 설정할 수 있는 간단한 메서드.

res.format(object) : Accept 요청에 따라 다른 콘텐츠를 전송할 수 있는 메서드. 잘 안 쓸듯.

res.attachment([filename]), res.download(path, [filename], [callback]) : 클라이언트에게 파일을 표시하지 말고 다운로드 받으라고 전송함. filename을 주면 파일 이름이 명시되며, res.attachment는 헤더만 설정하므로 다운로드를 위한 node 코드가 따로 필요핟.

res.sendFile(path, [options], [callback]) : path의 파일을 읽고 해당 내용을 클라이언트로 전송한다.

res.links(links) : Links 응답 헤더를 설정한다. 별로 필요 없을 듯.

res.locals, res.render(view, [locals], callback) : res.locals는 뷰를 렌더링하는 기본 콘텍스트를 포함하는 객체다. res.render는 jade와 같은 템플릿 엔진을 사용하여 뷰를 렌더링한다. 뷰 렌더링 세계는 심오하므로 여기서는 자세히 쓰지 않는다.


출처: http://luckyyowu.tistory.com/346


'Node.js' 카테고리의 다른 글

Jade 이해하기  (0) 2017.02.02
socket.io server 만들기  (0) 2016.11.25
npm, express  (0) 2016.11.18

Socket.io


Javascript를 이용하여 실시간 어플리케이션을 구축할 수 있도록 하는 엔진.

양 방향의 이벤트 기반의 통신이 가능하고, 모든 플렛폼과 장치에서 동작



기본적인 socket.io 서버

socketio_server.js

// socketio_server.js
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);

app.get('/', function(req, res) {
  res.sendFile(__dirname + '/sample1.html');
});

io.on('connection', function(socket) {
  // 접속한 모든 클라이언트에 전달
  socket.emit('news', { hello: 'world' });

  // Client로 부터 수신받는 event
  socket.on('feedback', function(data) {
    console.log(data);
  });
});

sample1.html

<!-- sample1.html -->
<script src="/socket.io/socket.io.js"></script><p>
</p><script>
  var socket = io();

  socket.on('news', function(data) {
    document.write(JSON.stringify(data));
    socket.emit('feedback', { hello : 'world2' });
  });
</script>


socket.io를 이용한 간단한 채팅 서버

s_chat_server.js

// s_chat_server.js
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(80);

// 기본 접속 경로
app.get('/', function(req, res) {
  res.sendFile(__dirname + '/sample2.html');
});

// 첫번째 접속
var sock = undefined;
// 외부 접속시 처리
io.on('connection', function(socket) {
  // 접속한 모든 클라이언트에 전달
  socket.emit('news', { hello: 'world1' });

  if( !sock) {
    sock = socket;
  }

  // Broadcast
  socket.on('broadcast', function(data) {
    console.log('Broadcast: ' + data);
    socket.broadcast.emit('msg', data);
  });

  // Unicast
  socket.on('unicast', function(data) {
    console.log('Unicast: ' + data);
    socket.emit('msg', data);
  });

  // Send All!
  socket.on('sendall', function(data) {
    console.log('Sendall: ' + data);
    io.emit('msg', data);
  });
});

sample2.html

<!-- sample2.html -->
<html>
  <head>
    <title>Hello Pi!</title>
    <script src='https://code.jquery.com/jquery-3.1.1.min.js'></script>
    <script src='/socket.io/socket.io.js'></script>
    <script>
    $(function() {
      var socket = io();
      var id = 'Guest..' + Math.floor((Math.random() * 10) + 1);

      socket.on('msg', function(data) {
        $('#msgs').append($('<p>').text('ID: ' + data.id + ': ' + data.msg));
      });

      var sendMsg = function(type) {
        var msg = $('input').val();
        $('#msgs').append($('<p>').text('ME: ' + id + ': ' + msg));
        socket.emit(type, { id: id, msg: msg});
        $('input').val('');
      }

      $('#unicast').click(function() {
        sendMsg('unicast');
      });

      $('#broadcast').click(function() {
        sendMsg('broadcast');
      });

      $('#sendall').click(function() {
        sendMsg('sendall');
      });
    });
    </script>
  </head>
  <body>
    <input type='text' />
    <p/>
    <button id='unicast'>Unicast</button>
    <button id='broadcast'>Broadcast</button>
    <button id='sendall'>Sendall</button>
    <div id='msgs'/>
  </body>
</html>


'Node.js' 카테고리의 다른 글

Jade 이해하기  (0) 2017.02.02
HTTP 요청, 응답 이해하기(Express 프로젝트 기준)  (0) 2017.02.01
npm, express  (0) 2016.11.18


NPM(
Node Packaged Modules)


Node.JS 에서 사용되는 모듈을 패키지로 모아놓은 것입니다.

초기 버전에서는 별로로 설치해줘야 했지만, 지금은 node 가 설치되면서 자동으로 npm 이 설치가 됩니다.


주로 사용되는 명령어

npm install 패키지명 : 패키지 파일을 찾아서 설치를 합니다.

npm list installed : 현재 설치되어 있는 패키지를 보여줍니다.

npm update 패키지명 : 설치된 패키지를 최신버전으로 업데이트 합니다.



Express.JS


Node.JS 에서 가장 많이 사용하는 웹 어플리케이션 프레임워크입니다.

쉽고 빠른 API 구성을 위한 HTTP 기능 및 미들웨어를 가지고 있습니다.


설치

$ node --version
$ npm --version

Express를 설치하기에 앞서 node와 npm 설치 유무를 확인합니다.

$ npm install express -g

npm을 명령어를 이용하여 Express를 설치합니다.

-g 옵션을 추가하면 글로벌(global)로 모듈을 설치한다는 의미입니다.

$ npm install -g express-generator

만약 Express 명령어를 찾을 수 없다고 나온다면, expresss-generator를 설치합니다.

$ express my-app

Express 설치를 완료하면 간단하게 위의 명령어를 통해 my-app 폴더를 생성하고 서버 구동에 필요한 파일들이 설치됩니다.


구조


package.json : 프로그램 이름, 버전 등 노드 프로그램의 정보를 기술합니다. 또한 필요에 따라 다양한 모듈과 함께 사용하는데 이러한 모듈들의 목록을 package.json에 나열합니다. npm은 이 정보를 참고하여 필요한 모듈을 모두 설치할 수 있는 것입니다.

bin/www : 서버 구동을 위한 코드가 기록되어 있습니다. 익스프레스 서버 설정 코드가 기록된 app.js 파일을 가져와 노드의 HTTP 객체와 연동하는 작업이 이루어집니다.

app.js : bin/www 에서 사용되는 이 파일은 익스프레스 설정 파일이 담겨있는 핵심 코드입니다. 아래는 주요 설정 코드입니다.

  • morgan : 클라이언트의 HTTP 요청 정보를 로깅하기 위한 모듈

  • body-parser : 클라이언트의 HTTP 요청 중 POST 요청의 바디 데이터에 접근하기 위한 모듈

  • cookie-parser : 접속한 클라이언트의 쿠키 정보에 접근하기 위한 모듈

  • express.static() : 정적 파일 호스팅을 위한 경로 설정

  • app.use('/', routes) : 라우팅 설정. 세부 라우팅은 /routes 폴더에 구현됨

/routes : 라우팅을 위한 폴더입니다. 라우팅 리소스 별로 모듈을 만들어 라우팅 로직을 각 파일에 구현합니다.

/views/index.jade : 템플릿 파일인 제이드(Jade) 파일입니다. 이 파일을 제이드 엔진을 통해 HTML 코드로 변환됩니다. 라우팅 로직 중 render() 함수에서 파라미터로 이 파일을 사용합니다.

/public : 정적 파일을 위한 폴더로서 자바스크립트 파일, 이미지 파일, 스타일시트 등을 포함합니다. HTML 파일에서 해당 파일을 호출하면 내려주는 역할을 합니다.


프로젝트 폴더 생성

$ express my-app

express 명령어를 사용하여 my-app 프로젝트 폴더를 생성합니다.

/my-app$ npm install

package.json에 기술되어 있는 dependencies 값을 이용하여 의존성 모듈을 설치합니다. 다운로드 된 모듈들은 node_modules 폴더에 저장됩니다.

/my-app$ npm start

별도의 설정이 없다면 /bin/www 에 기술되어 있는 3000번 포트를 통해 웹 페이지를 구동합니다.

'Node.js' 카테고리의 다른 글

Jade 이해하기  (0) 2017.02.02
HTTP 요청, 응답 이해하기(Express 프로젝트 기준)  (0) 2017.02.01
socket.io server 만들기  (0) 2016.11.25

Function



function을 문자열로 선언할 수도 있다. 

그러나 이 방법은 function 내부의 코드가 복잡해질수록 가독성이 떨어지기 때문에 권장되지 않는 방법이다.

보통은 9 ~ 12줄에서 처럼 function을 선언한다.

var triangle1 = new Function('h', 'w', 'return h * w / 2');
console.log('Triangle 1: ' + triangle1(5, 2));

var param = 'h, w';
var formula = 'return h * w / 2';
var diamond = new Function(param, formula);
console.log('Diamond: ' + diamond(5, 2));

// function literal
var triangle2 = function(w, h) {
    return w * h / 2;
}

console.log('Triangle2: ' + triangle2(5, 2));


JavaScript에서는 함수의 인수의 개수나 type이 정해져있지 않다.

개발자가 의도한 인수의 개수 이상을 넣어도 오류가 나지 않는다.

// named argument
function triangle(args) {
    if (args.base == undefined) {
        args.base = 1;
    }
    
    if (args.height == undefined) {
        args.height = 1;
    }
    return args.base * args.height / 2;
}

console.log('Triangle1: ' + triangle({base: 10, height: 5}));
console.log('Traingle1: ' + triangle({}));

function triangle2(base, height, index) {
    console.log(base + '/' + height);
}

var base = 10;
var index = 20;
triangle2(base, index);
triangle2(base, index, 100, [10, 20]);


또한 JavaScript에서는 function의 인수로 function을 받을 수도 있다.

// Higher order function
function arrayWalk(data, func) {
    for (var key in data) {
        func(key, data[key]);
    }
}

function showElement(key, value) {
    console.log(key + ': ' + value);
}

var arr = [1, 2, 4, 8, 16];
arrayWalk(arr, showElement);

// anonymous function
arrayWalk(arr, function(key, value) {
    console.log(key + ': ' + value);
});


Scope



function 내에서 선언한 변수(Local 변수)가 Global 변수와 변수명이 같을 때 Local 변수를 우선적으로 참조한다.

또한 function 내에서 Global 변수와 같은 변수명으로 선언한 것보다 위에 그 변수를 참조하게 되면 선언되지 않은 변수로 인식을 한다.


var scope1 = 'Global var1';

function getValue1() { 
    console.log(scope1); // undefined
    var scope1 = 'Local Var1';
    return scope1;
}

console.log(getValue1()); // Local Var1
console.log(scope1); // Global Var1

var scope2 = 'Global Var2';

function getValue2() {
    scope2 = 'Local Var2';
    return scope2;
}

console.log(getValue2()); // Local Var2
console.log(scope2); // Local Var2


// not support block level scope
if (true) {
    console.log('True 1');
    var i = 5;
}

console.log(i); // 5

// support function level scope
(function() {
    if (true) {
        console.log('True 2');
        var j = 0;
    }
})();

console.log(j);

// ---------------------------------------------------------

// difference between function
var scope = 'Global Var';
function checkScope() {
    var scope = 'Local Var';
    
    var func1 = function() {
        return scope;
    }
    
    console.log(func1()); // Local Scope
    
    var func2 = new Function('return scope;');
    
    console.log(func2()); // Global Scope
}

checkScope();

// ---------------------------------------------------------

var x = 'Global';

function outerFunc() {
    var y = 'Local Outer';
    
    function innerFunc() {
        var z = 'Local Inner';
        
        console.log(x);
        console.log(y);
        console.log(z);
    }
    
    innerFunc();
}

outerFunc();


arguments



function showMessage(args) {
    console.log(arguments);
    console.log(arguments.length + ' / ' + args);
}

showMessage();
showMessage('Tomoto', 'Banana');

function paramTest() {
    for (var i = 0; i < arguments.length; i++) {
        console.log(arguments[i]);
    }
}

paramTest('a', 1, [10, 20, 30]);


재귀함수



function factorial(n) {
    if (n != 0) {
        return n * arguments.callee(n - 1);
    }
    
    return 1;
}

console.log(factorial(3));


'JavaScript' 카테고리의 다른 글

객체, 정규 표현식 등  (0) 2016.10.14
객체와 문자배열  (0) 2016.10.07

Date 입출력



// instance
var date1 = new Date(2016, 10, 14, 12, 00, 00, 000);
console.log(date1);
console.log(date1.getFullYear());
console.log(date1.getMonth()); // want + 1
console.log(date1.getDate());
console.log(date1.getDay()); // mon: 1, tue: 2 ...
console.log(date1.getHours());
console.log(date1.getMinutes());
console.log(date1.getSeconds());
console.log(date1.getMilliseconds());
console.log(date1.getTime());
console.log(date1.getTimezoneOffset());

var date2 = new Date();
date2.setFullYear(2013);
date2.setMonth(8);
date2.setDate(5);
date2.setHours(11);
date2.setMinutes(23);
date2.setSeconds(15);
date2.setMilliseconds(512);
console.log(date2.toLocaleString());
console.log(date2.toGMTString());
console.log(date2.toUTCString());
console.log(date2.toDateString());
console.log(date2.toTimeString());
console.log(date2.toLocaleDateString());
console.log(date2.toLocaleTimeString());


임의로 날짜 바꾸기


var date1 = new Date(2016, 9, 10, 12, 30);
console.log(date1.toLocaleString());
date1.setMonth(date1.getMonth() - 3);
console.log(date1.toLocaleString());
date1.setMonth(date1.getDate() - 10);
console.log(date1.toLocaleString());

console.log('Next month or previous month');

var date2 = new Date(2016, 9, 31, 12, 30);
console.log(date2.toLocaleString());
date2.setMonth(date2.getMonth() + 1);
date2.setDate(0);
console.log(date2.toLocaleString());

replace()


var str = 'me us me us me us';
// replace all with regular expression
console.log(str);
console.log(str.replace('us', 'me'));
console.log(str.replace(/us/gi, 'me'));


Constructor


// Constructor
var test1 = [];
var test2 = new Date();

// type of is return object
console.log(typeof test1); // object
console.log(typeof test2); // object

// constructor property
alert(test1.constructor); // Array
alert(test2.constructor); // Date

console.log(test1.constructor == Array);
console.log(test2.constructor == Date);

// using instanceof
console.log(test1 instanceof Array); // true
console.log(test2 instanceof Date); // true


Object instance


// Object instance
var obj1 = new Object();
obj1.name = 'circulus';
obj1.url = 'www.circul.us';
console.log(obj1);

var obj2 = {};
obj2.name = 'suwon';
obj2.url = 'www.suwon.ac.kr';
console.log(obj2);

// default method from Object
var obj3 = new Object();
console.log(obj3.toString());
console.log(obj3.valueOf());

var obj4 = new Date();
console.log(obj4.toString());
console.log(obj4.valueOf());

var obj5 = ['Banana', 'Apple', 'Tomato'];
console.log(obj5.toString());
console.log(obj5.valueOf());

var num = 10;
console.log(num.toString());
console.log(num.valueOf());

var reg = /[0-9]{3}-[0-9]{4}/g;
console.log(reg.toString());
console.log(reg.valueOf());


캐스팅, encode uri(깨짐 방지)


var n = '123.45xxx';
console.log(Number(n));
console.log(parseFloat(n));
console.log(parseInt(n));

var d = new Date();
console.log(Number(d)); // 12308669074569
console.log(parseFloat(d)); // NaN
console.log(parseInt(d)); // NaN

console.log(typeof(123 + '')); // String
console.log(typeof('123' - 0)); // Number

// encode uri
var str = '안녕하세요 자바스크립트입니다. 123abc';

var msg = encodeURI(str);
console.log(encodeURI(str));
// console.log(encodeURIComponet(str));
console.log(decodeURI(msg));


eval()


var str = 'alert("Eval is evil")';
eval(str);

var obj = { hello: 'world' };
var json = JSON.stringify(obj);
console.log(json);
/* 
var result1 = eval(json);
console.log(result1);
*/
var result = JSON.parse(json);
console.log(result);


'JavaScript' 카테고리의 다른 글

Function, Scope, Closure  (0) 2016.11.04
객체와 문자배열  (0) 2016.10.07

객체 생성

// without instance
var str1 = 'Hello JavaScript';
console.log(str1.length);

var bool1 = true;
console.log(bool1);

var num1 = 10;
console.log(num1);

console.log('\n');

// wrapper
var str2 = new String('Hello JavaScript');
console.log(str2.length);

var bool2 = new Boolean(false);
console.log(bool2);

var num2 = new Number(10);
console.log(num2);


문자열 나누기


var str1 = 'Good day to study day the javascript day!';

console.log(str1.indexOf('day'));
console.log(str1.lastIndexOf('day'));
console.log(str1.indexOf('day', 10));
console.log(str1.lastIndexOf('day', 10));
console.log(str1.indexOf('hello'));

var str2 = 'Circulus Project';

console.log(str2.charAt(5)); // "l";
console.log(str2.slice(5, 8)); // "lus"
console.log(str2.substring(5, 8)); // "lus"
console.log(str2.substr(5, 8)); // "lus Proj"
console.log(str2.split('u')); // ["Circ", "l", "s Project"]
console.log(str1.split('day', 3)); // ["Good", "to study", "the javscript"]
console.log(str1.split('day')); // ["Good", "to study", "the javscript", "!"]

console.log('upper'.anchor('top'));
console.log(str2.link('http://www.circul.us'));

console.log('10'.sub());
console.log('10'.sup());

console.log(str2.concat('thanks'));
console.log(str2.length);


NaN


var num1 = 123;

var num2 = new Number(123);
console.log(num1 + num2);

var num3 = 255;
console.log(num3.toString());
console.log(num3.toString(16));
console.log(num3.toString(8));

var num4 = 123.45678;  

console.log(num4.toExponential(2));
console.log(num4.toFixed(3));
console.log(num4.toFixed(7));
console.log(num4.toPrecision(10));
console.log(num4.toPrecision(6));


// NaN = Not a Number
console.log(0 / 0);
console.log(Number.NaN == Number.NaN);
console.log(isNaN(Number.NaN));

var num = 10;
var num2 = '10';
var num3 = 'test';
console.log(isNaN(num));
console.log(isNaN(num2));
console.log(isNaN(num3));


Math


// Math
console.log(Math.abs(-15));
console.log(Math.max(10, 15));
console.log(Math.min(-10, 0));
console.log(Math.pow(2, 3));
console.log(Math.random());
console.log(Math.ceil(1, 58));
console.log(Math.floor(1, 58));
console.log(Math.round(1, 58));
console.log(Math.PI);
console.log(Math.floor((Math.random() * 10) + 1));


Array


var a = new Array('A', 'B', 'C');
console.log(a);
var b = new Array(2);
console.log(b);

var arr1 = ['Tomato', 'Apple', 'Blueberry', 'Orange', 'Melon'];
var arr2 = ['Mozart', 'schuberry', 'Bach'];

console.log(arr1.concat(arr2));
console.log(arr1.join('_'));
console.log(arr1.splice(1));
console.log('---');
console.log(arr1.splice(1, 2));
console.log(arr1.splice(1, 2, 'strawberry', 'fineapple'));
console.log('---');
console.log(arr1);
console.log(arr1.pop());
console.log(arr1);


정렬



console.log(arr1);
console.log(arr1.push('Strawberry'));
console.log(arr1);
console.log(arr1.shift()); // remove a first one
console.log(arr1);
console.log(arr1.unshift('Strawberry', 'fineapple'));
console.log(arr1);
console.log(arr1.reverse());
console.log(arr1.sort());
console.log(arr1.length);
console.log(arr1.toString());

var arr3 = [5, 25, 10];
console.log(arr3);
console.log(arr3.sort());
console.log(arr3.sort(function(x, y){
    return x - y;
}));

console.log(arr3.sort(function(x, y){
    return y - x;
}))

'JavaScript' 카테고리의 다른 글

Function, Scope, Closure  (0) 2016.11.04
객체, 정규 표현식 등  (0) 2016.10.14

버튼을 누르고 있을 동안 색을 바꿔주는 효과를 넣고 싶을 때가 있습니다.
그럴 때 selector를 이용하게 되는데 주의할 점은 TextColor와 background 색을 변경하는 것이 조금 다릅니다.
TextColor는 res의 color 디렉토리를 생성하여 그 안에 selector를 넣어주어야 하고
background는 res의 drawable 디렉토리 안에 selector를 넣어주어야 합니다.


background 색을 변경할 


button_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/bg_select"/>
    <item android:state_focused="true" android:drawable="@drawable/bg_select"/>
    <item android:state_pressed="true" android:drawable="@drawable/bg_select"/>
    <item android:drawable="@drawable/bg"/>
</selector>

TextColor를 변경할 때


text_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/colorBlue"/>
    <item android:state_focused="true" android:color="@color/colorBlue"/>
    <item android:state_pressed="true" android:color="@color/colorBlue"/>
    <item android:color="@color/colorWhite"/>
</selector>



colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
    <color name="colorWhite">#FFFFFF</color>
    <color name="colorBlue">#2196F3</color>
    <drawable name="bg_select">#2196F3</drawable>
    <drawable name="bg">#EEEEEE</drawable>
</resources>

activity_main.xml

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="TextViewTest"
    android:textColor="@color/text_selector"/>
 
<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/button_selector"
    android:text="ButtonTest"/>




+ Recent posts