自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一篇搞懂 toString()函數(shù)與valueOf()函數(shù)

開發(fā) 前端
引用類型在轉(zhuǎn)化為number的時(shí)候,首先會(huì)判斷對(duì)象是否含有valueOf函數(shù),如果有,那就調(diào)用valueOf函數(shù),把它的返回值轉(zhuǎn)為數(shù)字,然后返回;如果沒有valueOf函數(shù),就調(diào)用toString函數(shù),將返回值轉(zhuǎn)為數(shù)字并返回。如果toString或者valueOf都不能獲取到原始值的話,那就拋出類型轉(zhuǎn)換異常。

tostring 和 valueOf 函數(shù)是解決值的顯示和運(yùn)算的問題。所有的 Object 類型的數(shù)據(jù)都自帶 toString 和 valueOf 函數(shù)。

比如我們定一個(gè) Object 類型數(shù)據(jù):

const obj = {
    name: "duxin"
}
console.log(obj.valueOf()); // { name: 'duxin' }

toString()

toString 函數(shù)的作用是把一個(gè)邏輯轉(zhuǎn)換為字符串,并且返回 Object 類型數(shù)據(jù)的 toString()默認(rèn)的返回值"[object Object]"。

如果我們?cè)诙x對(duì)象的時(shí)候,可以重寫 tosString 函數(shù),這樣 toString 的返回值可讀性會(huì)更好一些,比如:

const obj = {
    name: "duxin",
    toString:function(){
        return this.name;
    }
}
console.log(obj.valueOf()); // { name: 'duxin' }
console.log(obj.toString()); // duxin

以下這些函數(shù)都是有自定義的 toString 函數(shù):

  1. Array 的 toString 函數(shù)返回值是以逗號(hào)分隔的字符串;
  2. Function 的 toString 函數(shù)返回值是函數(shù)自身的文本定義;
  3. Date 的 toString 函數(shù)返回值是時(shí)間字符串;

valueOf()

valueOf 函數(shù)返回引用類型的原始值,如果沒有原始值,就返回"{}",就是空對(duì)象的字面量

  1. Array的valueOf函數(shù)返回的值數(shù)組本身;
  2. Function的valueOf函數(shù)返回的是函數(shù)本身;
  3. Date的valueOf函數(shù)返回的值時(shí)間戳。

在發(fā)生數(shù)據(jù)類型轉(zhuǎn)換的時(shí)候,有l(wèi)iang兩種場(chǎng)景:

  1. 引用數(shù)據(jù)類型轉(zhuǎn)為String,先是調(diào)用toString函數(shù),有值的話,就直接返回該字符串;如果對(duì)象沒有toString,那就調(diào)用valueOf函數(shù),然后將原始值轉(zhuǎn)為字符串并且返回;如果toString或者valueOf都不能獲取原始值,那就拋出類型轉(zhuǎn)換異常;
var arr = [];

arr.toString = function () {
     console.log('調(diào)用了toString()函數(shù)');
     return [];
};

arr.valueOf = function () {
     console.log('調(diào)用了valueOf()函數(shù)');
     return [];
};

console.log(String(arr));

在執(zhí)行String(arr)的時(shí)候,是先將數(shù)組轉(zhuǎn)為字符串,調(diào)用的是toString,它的結(jié)果不能轉(zhuǎn)為string;

那就調(diào)用valueOf函數(shù),它的返回值也是一個(gè)空數(shù)組,也不能轉(zhuǎn)為字符串,那就只能拋出類型轉(zhuǎn)換異常了。

  1. 引用類型在轉(zhuǎn)化為number的時(shí)候,首先會(huì)判斷對(duì)象是否含有valueOf函數(shù),如果有,那就調(diào)用valueOf函數(shù),把它的返回值轉(zhuǎn)為數(shù)字,然后返回;如果沒有valueOf函數(shù),就調(diào)用toString函數(shù),將返回值轉(zhuǎn)為數(shù)字并返回。如果toString或者valueOf都不能獲取到原始值的話,那就拋出類型轉(zhuǎn)換異常。
責(zé)任編輯:武曉燕 來源: 讀心悅
相關(guān)推薦

2022-04-12 08:30:52

回調(diào)函數(shù)代碼調(diào)試

2021-12-01 11:33:21

函數(shù)Min

2022-07-06 08:17:50

C 語言函數(shù)選型

2021-08-06 17:47:46

Kotin高階函數(shù)函數(shù)

2021-01-29 18:41:16

JavaScript函數(shù)語法

2021-04-24 10:19:41

Python函數(shù)指向

2025-02-19 10:39:26

Python高階函數(shù)函數(shù)名

2023-06-15 10:11:08

JavaScript函數(shù)表達(dá)式

2021-03-24 10:00:32

Python遞歸函數(shù)Python基礎(chǔ)

2024-04-17 13:21:02

Python匿名函數(shù)

2021-05-15 10:16:14

Python匿名函數(shù)

2019-07-09 14:17:28

Linux內(nèi)存管理進(jìn)程

2019-08-13 15:36:57

限流算法令牌桶

2020-06-03 11:06:26

DNS域名緩存

2021-05-27 07:12:19

Python函數(shù)裝飾器

2022-07-06 12:07:06

Python函數(shù)式編程

2021-05-21 09:01:29

JavaScript 前端函數(shù)閉包

2021-03-06 10:05:03

Python函數(shù)變量

2020-10-17 08:48:12

搞懂“智能聯(lián)接”

2020-11-06 10:01:06

Nginx
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)