隱式轉換本質
ToPrimitive():將值轉換為原始值
JavaScript 引擎內部的籠統操縱 ToPrimitive()有着如許的署名:
ToPrimitive (input,PreferredType?)
可選參數 PreferredType 可所以 Number 或許 String,它只代表了一個轉換的偏好,轉換效果不一定必需是這個參數所指的範例,但轉換效果一定是一個原始值。假如 PreferredType 被標誌為 Number,則會舉行下面的操縱來轉換輸入的值(59.1):
- 假如輸入的值已經是個原始值,則直接返回它。
- 不然,假如輸入的值是一個對象。則挪用該對象的 valueof ()要領。假如 valueOf()要領的返回值是一個原始值,則返回這個原始值。
- 不然,挪用這個對象的 toString()要領。假如 tostring()要領的返回值是一個原始值,則返回這個原始值。
- 不然,拋出 TypeError 非常。
假如 PreferredType 被標誌為 string,則轉換操縱的第二步和第三步的遞次會換取。假如沒有 PreferredType 這個參數,則 preferredrype 的值會根據如許的劃定規矩來自動設置:Date 範例的對象會被設置為 string,別的範例的值會被設置為 Number.
ToNumber():將值轉換為数字
下面的表格詮釋了 ToNumber()是如何將原始值轉換成数字的。
參數 | 效果 |
---|---|
undefined | NaN |
null | +0 |
布爾值 | true 被轉換為 1, false 轉換為+0 |
数字 | 無需轉換 |
字符串 | 由字符串剖析為数字。比方,”324″被轉換為 324 |
假如輸入的值是一個對象,則會起首會挪用 roPrimitive (obj, Number)將該對象轉換為原始值,然後在挪用 roNumber()將這個原始值轉換為数字。
ToString():將值轉換為字符串
下面的表格詮釋了 ToString()是如何將原始值轉換成字符串的。
參數 | 效果 |
---|---|
undefined | “undefined” |
null | “null” |
布爾值 | “true”或許”false” |
数字 | 数字作為字符串,比方。”1.765*” |
字符串 | 無需轉換 |
假如輸入的值是一個對象,則會起首會挪用 toPrimitive (obj,String)將該對象轉換為原始值,然後再挪用 roString()將這個原始值轉換為字符串。