// プリミティブ型はboolean,number,string,null,undefinedのこと
// プリミティブ型は基本は値そのもの
// でも、たまに一時的にオブジェクトになっている
var num = 69;
var num2 = new Number(69);
console.log(typeof num); // number
console.log(typeof num2); // object(Numberオブジェクトのインスタンス)
console.log(num.toString()); // オブジェクトじゃないから、こんなメソッドないはずなぜか使える??
console.log(num2.toString());
// jsのプリミティブ型は、オブジェクトのように使おうとすると勝手にそれぞれの型に応じた「ラッパーオブジェクト」を裏で作ってくれる
var num = 69;
// こうした瞬間
console.log(num.toString());
// 裏ではこんなコードが自動で走っている
var num_tmp = num; // 一旦、プリミティブ値を退避する
num.toString = function(){
// 文字列に変換するメソッド
}
// 処理が完了するとラッパーオブジェクトは破棄され、普通のプリミティブ型に戻る
num = num_tmp; // num変数に退避させたプリミティブ値を入れ戻す
delete num_tmp; // 作ったラッパーオブジェクトは捨てる
// 孫悟空が一瞬スーパーサイヤ人になれる
// だから、「全てのものはオブジェクトかオブジェクトのように使える」という意味になる