###### tags: `程式語言` # JS 1. 複製變數A,得到變數B,這時改動A或B的值並不會影響B或A (pass by value); 不過當複製物件A,得到物件B,這時改動物件A裡的內容,B是會跟著改動的 (pass by refrence)。 ```javascript 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 ``` ```javascript 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 ``` 2. 做加法時,若其中一個運算元是字串,JS會在背後用toString()把另一個運算元自動轉型成字串; 做減法時,若其中一個運算元不是數字,JS會在背後用Number()把另一個運算元自動轉型成數字。 ```javascript 100 + "100" // "100100" 100 + "ABC" // "100ABC" "ABC" + "XYZ" // "ABCXYZ" ``` ```javascript 100 - "50" // 50 100 - "abc" // NaN // false 經過 Number() 轉型成數字後,會變成 0 100 - false // 100 // true 經過 Number() 轉型成數字後,會變成 1 100 - true // 99 100 - undefined // NaN 100 - null // 100 ``` 3. 比對時用=== 不要用== (JS裡用==會幫你自動轉型) 4. 除了基本型別以外的都是物件 ex. function是物件 (雖然用typeof去印它是function)