簡體   English   中英

JavaScript 中的對象到原始類型的轉換

[英]Object to primitive conversions in JavaScript

我讀了一本關於 JS 的書,但無法理解接下來的事情:

2 + null // => 2: addition after null converts to 0
2 + undefined // => NaN: addition after undefined converts to NaN

我讀到 JS 如何使用toString()valueOf()將對象轉換為原始值,但是 null 和 undefined 沒有這樣的方法 - 那么它是如何工作的呢?

您可以閱讀此內容,例如: http : //www.adequatelygood.com/Object-to-Primitive-Conversions-in-JavaScript.html

... 然而,需要更多解釋的關鍵機制是 ToPrimitive 函數。 此函數用於取任意值並獲取相應的原始值。 如果輸入已經是原始值,則該值將在不進行轉換的情況下返回。 但是,如果該值是非原始值,則它將調用內部 [[DefaultValue]] 方法來為對象查找默認值。

簡而言之,它的內部機制。

根據https://www.ecma-international.org/ecma-262/5.1/#sec-11.6.1上的 ECMAScript 規范,它表示何時應用加法運算符 ( + ) 並且給定操作數的原始值不是字符串,兩個操作數都被轉換為原始值,然后將這些原始值的數值相加。 例如。

let x = 2 + null;

這里 2 和 null 都被轉換為原始值,即 2(數字已經是原始的)和 null(已經是原始的)。 然后使用 ToNumber 函數轉換為數字,該函數根據ToNumber分別為 2 和 null 提供值 2 和 +0。 現在值變成

let x = 2 + (+0);

成為

let x = 2 + 0;

變成 2。因為 null 和 undefined 已經是原始值。 這里不需要 [[DefaultValue]],即不需要使用 valueOf,因為它已經是一個原始值。 只有ToPrimitive 中提到的 Object 類型的值才需要 valueOf 或 toString 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM