tags: 程式語言

JS

  1. 複製變數A,得到變數B,這時改動A或B的值並不會影響B或A (pass by value);
    不過當複製物件A,得到物件B,這時改動物件A裡的內容,B是會跟著改動的 (pass by refrence)。
   var a = 10;
   var b = a;

   console.log( a );   // 10
   console.log( b );   // 10
   
   a = 100;

   // 變數 b 依然是 10,而變數 a 變成了 100
   console.log( a );   // 100
   console.log( b );   // 10
   var coin1 = { value: 10 };
   var coin2 = coin1;

   console.log( coin1.value );       // 10
   console.log( coin2.value );       // 10
   
   coin1.value = 100;

   console.log( coin1.value );       // 100
   console.log( coin2.value );       // 100
  1. 做加法時,若其中一個運算元是字串,JS會在背後用toString()把另一個運算元自動轉型成字串;
    做減法時,若其中一個運算元不是數字,JS會在背後用Number()把另一個運算元自動轉型成數字。
   100 + "100"      // "100100"

   100 + "ABC"      // "100ABC"

   "ABC" + "XYZ"    // "ABCXYZ"
   100 - "50"        // 50
   100 - "abc"       // NaN

   // false 經過 Number() 轉型成數字後,會變成 0
   100 - false       // 100
   // true 經過 Number() 轉型成數字後,會變成 1
   100 - true        // 99

   100 - undefined   // NaN 
   100 - null        // 100
  1. 比對時用=== 不要用== (JS裡用==會幫你自動轉型)

  2. 除了基本型別以外的都是物件 ex. function是物件 (雖然用typeof去印它是function)