隱式轉換本質

隱式轉換本質

ToPrimitive():將值轉換為原始值

JavaScript 引擎內部的籠統操縱 ToPrimitive()有着如許的署名:

ToPrimitive (input,PreferredType?)

可選參數 PreferredType 可所以 Number 或許 String,它只代表了一個轉換的偏好,轉換效果不一定必需是這個參數所指的範例,但轉換效果一定是一個原始值。假如 PreferredType 被標誌為 Number,則會舉行下面的操縱來轉換輸入的值(59.1):

  1. 假如輸入的值已經是個原始值,則直接返回它。
  2. 不然,假如輸入的值是一個對象。則挪用該對象的 valueof ()要領。假如 valueOf()要領的返回值是一個原始值,則返回這個原始值。
  3. 不然,挪用這個對象的 toString()要領。假如 tostring()要領的返回值是一個原始值,則返回這個原始值。
  4. 不然,拋出 TypeError 非常。

假如 PreferredType 被標誌為 string,則轉換操縱的第二步和第三步的遞次會換取。假如沒有 PreferredType 這個參數,則 preferredrype 的值會根據如許的劃定規矩來自動設置:Date 範例的對象會被設置為 string,別的範例的值會被設置為 Number.

ToNumber():將值轉換為数字

下面的表格詮釋了 ToNumber()是如何將原始值轉換成数字的。

參數效果
undefinedNaN
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()將這個原始值轉換為字符串。

    原文作者:MythC
    原文地址: https://segmentfault.com/a/1190000014520770
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞