Javascript

3. ์–ธ์–ด์˜ ๊ธฐ์ดˆ

  • , = ์—ฐ์‚ฐ์ž

    • ==, != ์—ฐ์‚ฐ์ž๋Š” ๋น„๊ตํ•˜๊ธฐ ์ „์— ํ˜•๋ณ€ํ™˜์„ ์ง„ํ–‰ํ•œ๋‹ค.
    • false โ‡’ 0 true โ‡’ 1 ๋ณ€ํ™˜ํ•œ๋‹ค.
    • โ€5โ€์™€ 5 ๋น„๊ตํ•œ๋‹ค๋ฉด ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ํ˜•๋ณ€ํ™˜์„ ์‹œ๋„.
    • ํ•˜๋‚˜๊ฐ€ ๊ฐ์ฒด์ด๊ณ  ํ•˜๋‚˜๋‹ค ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ฉด valueOf() ํ˜ธ์ถœํ•œ๋‹ค.
    • null๊ณผ undefined ๋™์ผํ•˜๋‹ค.
    • NaN์ด๋ผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ ํ•ญ์ƒ false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  null == undefined // true
  "NaN" == NaN // false
  NaN == NaN // false
  true == 1 // true
  true == 2 // false
  "5" == 5 //true
  • ====์€ ํ”ผ์—ฐ์‚ฐ์ž์˜ ํƒ€์ž…์„ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๊ณ  ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๋น„๊ตํ•œ๋‹ค.
    var result1 = {"55" == 55}; //true
    var result2 = {"55" === 55}; //false
  • ==,!=์€ ํƒ€์ž… ๋ณ€ํ™˜ ๋•Œ๋ฌธ์— ์ž์ฃผ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๋Œ€์‹  =,!๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•˜์ž. ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.
  • Switch ๋ฌธ

    • ===๋กœ ๊ฐ’์„ ๋น„๊ตํ•˜๋ฏ€๋กœ ํƒ€์ž… ๋ณ€ํ™˜์€ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค. ex) โ€œ10โ€๊ณผ 10์€ ์„œ๋กœ ๋‹ค๋ฅด๋‹ค.
  • Overloading ์—†์Œ

4. ๋ณ€์ˆ˜์™€ ์Šค์ฝ”ํ”„, ๋ฉ”๋ชจ๋ฆฌ

  • ECMAScript์˜ ๋ณ€์ˆ˜๋Š” ์›์‹œ ๊ฐ’๊ณผ ์ฐธ์กฐ ๊ฐ’ ๋‘๊ฐ€์ง€ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ์›์‹œ ๊ฐ’ : undefined, Null, Boolean, ์ˆซ์ž, ๋ฌธ์ž์—ด
    • ์ฐธ์กฐ ๊ฐ’ : Reference ๊ณต์œ 
    // ์ฐธ์กฐ ๊ฐ’
    var person = new Object();
    person.name = "Young Jae";
    alert(person.name); //Young Jae
 
    // ์›์‹œ ๊ฐ’
    var name = "Young Jae";
    name.age = 27;
    alert(name.age); // undefined
 
    // ๊ฐ’ ๋ณต์‚ฌ
    var obj1 = new Object();
    var obj2 = obj1;
    obj1.name = "Young Jae";
    alert(obj2.name); // Young Jae
  • ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ์€ ๊ฐ’์ด ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ๊ณผ ๋˜‘๊ฐ™๋‹ค.

function addTen(num){ // num => local Variable
  num += 10;
  return num;
}
var count = 20;
var result = addTen(count);
alert(count); // 20
alert(result); // 30
  • obj๋Š” ํž™์— ์กด์žฌํ•˜๋Š” ์ „์—ญ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ

function setName(obj){
  obj.name = "NESOY"
}
var person = new Object();
setName(person);
alert(person.name); // NESOY
  • ํ•จ์ˆ˜์— ๊ฐ’์„ ์ „๋‹ฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ฐ”๋€Œ์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์›๋ž˜ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€.

function setName(obj){
  obj.name = "NESOY"
  obj = new Object();
  obj.name = "Cola";
}
var person = new Object();
setName(person);
alert(person.name); // NESOY
  • Execution Context(EC)

    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด๊ฐ€ Execution Context๋‹ค.
    • ๋ณ€์ˆ˜
      • ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์—ญ๋ณ€์ˆ˜
      • this๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ Property
    • ๋งค๊ฐœ๋ณ€์ˆ˜
    • ํ•จ์ˆ˜ ์„ ์–ธ
    • Scope
    • this
  var x = 'xxx';
 
  function foo () {
    var y = 'yyy';
 
    function bar () {
      var z = 'zzz';
      console.log(x + y + z); //xxxyyyzzz
    }
    bar();
  }
  foo();

  • Global Execution Context ์ƒ์„ฑ
  • ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ ๋ ๋•Œ๋งˆ๋‹ค Stack์˜ ๋ชจ์–‘์œผ๋กœ ์Œ“์ธ๋‹ค.
  • ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜์˜ EC ์—†์–ด์ง€๊ณ  ์ด์ „ Context๋กœ ๋Œ์•„์˜จ๋‹ค.
  • Scope Chain(SC)
    • List ํ˜•ํƒœ๋ฅผ ๋„๊ณ  ์žˆ๋‹ค.
    • SC์˜ ๋ชฉ์ ์€ Execution Context๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜์— ์ˆœ์„œ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
    • Scope Chain์˜ ์•ž์ชฝ์€ ํ•ญ์ƒ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ปจํ…์ŠคํŠธ์˜ ๋ณ€์ˆ˜ ๊ฐ์ฒด์ด๋‹ค.
  • Javascript์—๋Š” ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๊ฐ€ ์—†๋‹ค.

    • var๋ฅผ ์‚ฌ์šฉํ•ด ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์ž๋™์œผ๋กœ ๊ฐ€๊นŒ์šด ์ปจํ…์ŠคํŠธ์— ์ถ”๊ฐ€๋œ๋‹ค.
    • ์„ ์–ธํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ ์ „์—ญ ์ปจํ…์ŠคํŠธ์— ์ถ”๊ฐ€๋œ๋‹ค.
  // var๋กœ ์„ ์–ธ
  function add(num1,num2){
    var sum = num1 + num2;
    return sum;
  }
  var result = add(10, 20); //30
  alert(result);  // Error
 
 
  // ๊ทธ๋ƒฅ ์„ ์–ธ
  function add(num1,num2){
    sum = num1 + num2;
    return sum;
  }
  var result = add(10, 20); //30
  alert(result);  // 30

์ฐธ์กฐ