如果我們添加了一個方法,以數函數(或布爾或字符串)這樣爲什麼一個原始變量就像一個對象?
Number.prototype.sayMyNumber = function(){
return "My number is " + this;
}
,然後創建若干對象將其分配給一個變量
var num1 = new Number(34);
num1.sayMyNumber(); // it says "My number is 34"
這是精細和預期,因爲我們創建'Number'對象。
同樣,如果我要創建一個原始變量
num2 = 34;
num2.sayMyNumber(); // it says "My number is 34"
出人意料的是,NUM2也有一個方法sayMyNumber(),即使我們沒有明確創建一個Number對象。
然後我試圖像這樣,
34.sayMyNumber(); // error, this does not work
爲什麼NUM2工作?
更新
這是一個後續問題,我問在註釋部分,我把它這裏更好的可視性
下面的答案提到NUM2被認爲是一個「數'內部對象。這使我更加困惑。
typeof num1 === "number" // returns false
typeof num2 === "number" // returns true
typeof num1 === "object" // returns true
typeof num2 === "object" // returns false
這不是說num2不是「對象」嗎? 如果它不是一個「對象」,那麼這怎麼會是「數字」的實例?
在'34.sayMyNumber()'點被視爲導致錯誤的**小數點**。如果你想在這種情況下強制方法調用,你必須使用parens。 'num2'工作原因導致JS中的任何數字都是'Number'實例,即使它被定義爲文字 – hindmost
甚至當我像這樣寫'(2).sayMyNumber()'時它也不起作用。不知道這是否與上面 –
一樣誠實(whatever_number).yourFunction()的作品 –