100일 챌린지/빅데이터기반 인공지능 융합 서비스 개발자

Day 74 - JavaScript 문법

ksyke 2024. 11. 13. 17:00

목차

    function과 배열

    var a=1111;
    
    console.log(a);
    
    function f1(){
        console.log(a);
    }
    
    console.log(a);
    f1();
    console.log(a);
    
    const b=[];
    b.push('item1');
    b.push('item2');
    console.log(b);

    let 사용하기 

    let a='key2';
    let arr1={'key1':'val1',a:'val2'};
    console.log(arr1.key1);
    console.log(arr1.a);
    console.log(arr1[a]);// undefined
    
    let arr2={key1:'val1',key2:'val2'};
    console.log(arr2['key1']);
    console.log(arr2.key1);
    
    // JSON 키는 문자열을 사용한다.
    let msg=JSON.stringify(arr2);
    console.log(msg);
    
    let b=2222;
    let c=3333;
    let arr3={key1:'val1',a,b,c};
    console.log(arr3.a);
    console.log(arr3.b);
    console.log(arr3.c);
    let msg2=JSON.stringify(arr3);
    console.log(msg2); // {"key1":"val1","a":"key2","b":2222,"c":3333}

    배열 사용하기

    const arr1=['item1','item2','item3'];
    
    let [d,e,f]=arr1;
    console.log(d,e,f);
    
    let [a,,{key1}]=arr1;
    console.log(a,key1);
    
    const obj={'k1':'val1','k2':'val2'};
    let {key11,key22}=obj;
    console.log(key11,key22);
    const arr1=['item1','item2','item3','item4'];
    
    // const arr2=arr1;
    
    // const arr2=[];
    // for(let i=0;i<arr1.length;i++){
    //     arr2.push(arr1[i]);
    // }
    
    const arr2=['item0',...arr1,'item_new'];
    
    console.log(arr1);
    console.log(arr2);
    console.log(arr1==arr2);

    반복문 - for, in, of, forEach, map

    const arr1=['item1','item2','item3','item4','item5'];
    
    for(let i=0;i<arr1.length;i++){
        console.log(arr1[i]);
    }
    
    for(idx in arr1){
        console.log(arr1[idx]);
    }
    
    for(ele of arr1){
        console.log(ele);
    }
    
    let result1=arr1.forEach((ele,idx)=>{
        console.log(ele,idx);
    });
    
    let result2=arr1.map(function(a,b){
        console.log(a,b);
        return 're';
    })
    
    console.log(result1); // undefined
    console.log(result2); // [ 're', 're', 're', 're', 're' ]
    console.log(typeof result1); // undefined
    console.log(typeof result2); // object

    map, filter, every, some, reduce

    const arr1=[1111,2222,3333,4444,5555];
    
    const result1=arr1.map(ele=>ele+1);
    console.log(result1); // [ 1112, 2223, 3334, 4445, 5556 ]
    
    const result2=arr1.filter(function(ele){
        return ele%2==0;
    });
    console.log(result2); // [ 2222, 4444 ]
    
    const result3=arr1.every(function(ele){return ele%2==0;});
    console.log(result3); // false
    
    const result4=arr1.some(function(ele){return ele%2==0;});
    console.log(result4); // true
    
    const result5=arr1.reduce(function(a,b,c,d){
        /*
        이전의 return 값, next 값, idx, this
        1111 2222 1 [ 1111, 2222, 3333, 4444, 5555 ]
        undefined 3333 2 [ 1111, 2222, 3333, 4444, 5555 ]
        undefined 4444 3 [ 1111, 2222, 3333, 4444, 5555 ]
        undefined 5555 4 [ 1111, 2222, 3333, 4444, 5555 ]
        */
        console.log(a,b,c,d);
        return a+b; // 총합계 구하기
    });
    console.log(result5);

    arrow function

    function func1(){}
    const func2=function(){};
    const func3=()=>{};
    
    function func4(a){}
    const func5=function(a){};
    const func6=(a)=>{};
    const func7=a=>{};
    
    function func8(a,b){}
    const func9=function(a,b){};
    const func10=(a,b)=>{};
    // const func11=a,b=>{}; // 불가능
    
    function func11(){return 'result';}
    const func12=function(){return 'result';};
    const func13=()=>'result';
    const func14=()=>console.log('test'); // undefined가 return된다. 
    
    const func15=function(){
        console.log(this);
    }
    /*
    <ref *1> Object [global] {
      global: [Circular *1],
      clearImmediate: [Function: clearImmediate],
      setImmediate: [Function: setImmediate] {
        [Symbol(nodejs.util.promisify.custom)]: [Getter]
      },
      clearInterval: [Function: clearInterval],
      clearTimeout: [Function: clearTimeout],
      setInterval: [Function: setInterval],
      setTimeout: [Function: setTimeout] {
        [Symbol(nodejs.util.promisify.custom)]: [Getter]
      },
      queueMicrotask: [Function: queueMicrotask],
      structuredClone: [Function: structuredClone],
      atob: [Getter/Setter],
      btoa: [Getter/Setter],
      performance: [Getter/Setter],
      fetch: [Function: fetch],
      navigator: [Getter],
      crypto: [Getter]
    }
    */
    func15();
    const func16=()=>console.log(this);
    // {}
    func16();

    class

    function Func01(){
    
    }
    
    const obj1=new Func01();
    console.log(obj1); // Func01 {}
    
    class Func02{
    
        constructor(){
            console.log('생성자 호출');
            this.a=1111;
        }
        func1=function(){
            console.log('메서드1');
        }
        func2(){
            console.log('메서드2');
        }
    
    }
    
    const obj2=new Func02();
    console.log('--')
    console.log(obj2.a); // 1111
    obj2.func1(); // 메서드1

    module

    const name='홍길동';
    const age=20;
    
    // const 방법1
    module.exports={name,age};
    module.exports={name:'김길동'};
    
    
    export {name,age};
    
    export const name="Jesse"
    export const age=40;
    function func(){
        console.log('기능 실행');
    }
    
    // 방법1
    module.exports=func;
    
    // 방법2
    module.exports={func};
    
    // 방법3
    export {func};
    
    // 방법4
    export const func1=func;
    
    // 방법5
    export default func;
    // commonsjs 방식 //
    
    // const {name,age}=require('./person');
    console.log(name,age);
    
    // func 방법1
    const func1=require('./person2');
    func1();
    // func 방법2,3
    const {func}=require('./person2');
    func();
    // func 방법4
    const {func1}=require('./person2');
    func1();
    
    // es module //
    
    import {name,age} from './person.js'
    console.log(name,age);
    
    // func 방법5
    import func_new from './person2.js';
    func_new();

    Console

    console.time('시간1');
    console.log('log 출력');
    console.error('error 출력');
    console.warn('warn 출력');
    
    console.log('---');
    console.log(__dirname);
    console.log(__filename);
    
    console.log('---'); // 환경변수의 value 가져오기
    console.log(process.env.id,process.env.pw);
    console.log(process.env.JAVA_HOME);
    console.log(process.env.pw?process.env.pw:1234);
    
    console.log('---');
    setTimeout(()=>{
        console.log('병렬 실행');
    },3000);
    setTimeout(()=>{
        console.log('병렬 실행');
    },2000);
    console.log('병렬 실행');
    console.timeEnd('시간1');
    console.dir({key1:'val1',key2:'val2',key3:{k1:'key4',k2:'key5'}},{colors:true});

    OS

    const os=require('os');
    console.log(os.arch());
    console.log(os.cpus().length);
    console.log(os.homedir());
    console.log(os.hostname());
    console.log(os.platform());
    console.log(os.tmpdir());
    console.log(os.userInfo());
    console.log(os.totalmem());
    console.log(os.version());

    path

    const path=require('path');
    
    console.log(path.sep,path.delimiter); // \ , ;
    
    const msg='C:\\workspace\\..\\.\\workspace\\node01\\ex14.js';
    console.log(path.resolve(msg));
    
    const p1=path.parse(msg);
    console.log("parse msg: ",p1);
    console.log("base: ",p1.base);
    console.log("dir: ",p1.dir);
    console.log("name: ",p1.name);
    console.log("ext: ",p1.ext);
    
    console.log(path.isAbsolute(msg));
    
    const p2='.\\ex02.js'
    console.log(path.relative('C:\\',p2));
    
    const p3=path.relative('C:\\',p2)
    console.log(path.join('C:\\',p3));

    url

    const url=require('url');
    
    const msg='https://docs.google.com/spreadsheets/d/13vDNPZZOzazAGY-fegAxKArbAFFju8E00h5NtuVkcZ4/edit?gid=0#gid=0';
    
    const result=url.parse(msg);
    console.log(result);
    // console.log(result.protocol);
    // console.log(result.host);
    // console.log(result.port);
    // console.log(result.hostname);
    // console.log(result.pathname);
    // console.log(result.path);
    // console.log(result.query);
    // console.log(result.search);
    // console.log(result.href);
    // console.log(result.auth);
    console.log('-----');
    const myUrl=new url.URL(msg);
    console.log(myUrl);
    console.log(myUrl.searchParams.keys());
    console.log(myUrl.searchParams.values());
    console.log(myUrl.searchParams.get('gid'));
    // url get values
    
    const query=require('querystring');
    
    let msg="https://www.google.com/search?q=java&id=tester&pw=1234";
    msg=msg.split('?')[1];
    
    // [Object: null prototype] { q: 'java', id: 'tester', pw: '1234' }
    console.log(query.parse(msg));
    
    // q=java&id=tester&pw=1234
    console.log(query.stringify(query.parse(msg)));

    encoding

    // encoding*
    
    const crypto=require('crypto');
    
    const hash=crypto.createHash('MDG');
    hash.update('abcd');
    
    console.log(hash.digest('hex'));

    event

    // event 
    
    const even=require('events');
    
    const emit=new even.EventEmitter();
    
    // 한번만 호출됨
    emit.once('evn1',function(e){
        console.log('1이벤트');
    });
    
    const cb=function(e){
        console.log('2이벤트');
    };
    // 계속 호출 가능
    emit.on('evn2',cb);
    emit.addListener('evn2',cb);
    
    emit.emit('evn1');
    emit.emit('evn2');
    console.log(emit.listenerCount('evn2'));
    
    emit.emit('evn1');
    emit.emit('evn2');
    console.log(emit.listenerCount('evn2'));
    
    emit.off('evn2',cb);
    // emit.removeListener('evn2',cb);
    emit.emit('evn1');
    emit.emit('evn2');
    console.log(emit.listenerCount('evn2'));

    io

    // io
    
    const path=require('path');
    const fs=require('fs');
    
    // console.log(fs);
    
    // 폴더 만들기
    fs.mkdir(path.join(__dirname,'test1'),function(e){console.log(e);});
    
    
    // 폴더 지우기 
    //fs.rm(path.join(__dirname,'test1'),function(e){console.log(e);});
    fs.rmdir(path.join(__dirname,'test1'),function(e){console.log(e);});
    
    console.log(fs.readdirSync(__dirname,function(e){console.log(e);}));

    파일 읽고 쓰기

    const fs=require('fs');
    
    const result=fs.writeFileSync('./ex01.js','// js 작성',{encoding:"utf-8"});
    console.log(result);
    
    const msg=fs.readFileSync('./ex01.js',{encoding:"utf-8"});
    console.log(msg.toString());

    비동기로 파일 읽고 쓰기 

    비동기로 파일을 쓰고 읽을 때는 파일이 클 경우 순차적으로 진행되지 않을 수 있다. 

    // 비동기로 파일 읽어오기
    
    const fs=require('fs');
    
    fs.writeFile(
        './ex01.js',
        '// javascript로 작성된 파일 내용',
        function(e){console.log(e);}
    );
    
    fs.readFile(
        './ex01.js',
        {encoding:'utf-8'},
        function(err,data){
            if(err){
                throw err;
            }
            console.log(data);
        },
        function(e){console.log(e);}
    );

    async 함수로 작업 순차적으로 진행

    // 비동기로 파일 읽어오기
    
    const fs=require('fs');
    
    (async function(){
        fs.appendFile;
        fs.appendFileSync;
    
        await fs.writeFile(
            './ex01.js',
            '// javascript로 작성된 파일 내용',
            function(e){console.log(e);}
        );
        
        await fs.readFile(
            './ex01.js',
            {encoding:'utf-8'},
            function(err,data){
                if(err){
                    throw err;
                }
                console.log(data);
            },
            function(e){console.log(e);}
        );
    });

    watchfile

    const fs=require('fs');
    
    // 파일에 조작이 일어나면 이벤트가 발생함 
    fs.watchFile(
        './ex01.js',
        function(){
            console.log("event...");
        }
    );
    
    const result=fs.writeFileSync('./ex01.js','// js 작성',{encoding:"utf-8"});
    console.log(result);

    stream

    // stream
    
    const fs=require('fs');
    
    const rs=new fs.createReadStream('./ex01.js',{encoding:'utf-8'});
    // console.log(rs);
    
    rs.on('data',function(data){
        console.log(data);
    });
    
    rs.on('end',function(){
        console.log('여기까지');
    });

    open

    const fs=require('fs');
    
    fs.open(
        './ex25.js',
        'w',
        function(e){
            console.log(e);
        }
    );