第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試將符號包裝對象顯式轉(zhuǎn)換為字符串時出錯

嘗試將符號包裝對象顯式轉(zhuǎn)換為字符串時出錯

猛跑小豬 2022-05-14 14:38:59
我在 Firefox Web 控制臺中嘗試了以下操作。    var sow = (function(){ return this; }).call(Symbol());    console.log(typeof (sow)); // object    console.log(sow.toString()); // Works: Symbol()    String(sow); // Does not work: Throws "TypeError: can't convert symbol to string"由于某種奇怪的原因,最后一條語句中的顯式轉(zhuǎn)換不起作用(引發(fā)錯誤)。為什么會這樣?請注意,它sow是一個對象,并且toString它的原型鏈中有一個返回字符串的函數(shù),因此它應(yīng)該通過使用該函數(shù)來工作。
查看完整描述

1 回答

?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個贊

首先請注意,您的定義sow可以簡化為:

var sow = Object(Symbol());

在草率模式下,它與您的代碼執(zhí)行相同的操作。

當(dāng)您String使用參數(shù)調(diào)用時value,根據(jù)規(guī)范

一種。如果 NewTarget 未定義且 Type(value) 為 Symbol,則返回 SymbolDescriptiveString(value)。

灣。讓我們成為?ToString(值)。

在這里,由于您將符號包裝在對象中,因此它的類型不是符號;相反,它是一個對象,因此ToString被稱為。這在使用 object調(diào)用時,將首先將對象強(qiáng)制為原語,然后調(diào)用ToString它:

  1. 讓 primValue 成為 ? ToPrimitive(參數(shù),提示字符串)。

  2. 返回 ?ToString(原始值)。

但是符號不能ToString召喚它們;正如您在同一張表中看到的那樣,當(dāng)傳遞一個符號時,ToString將拋出一個 TypeError。

這就是為什么String(sow);有效。相反,當(dāng)您這樣做時sow.toString(),您正在使用對象包裝符號Symbol.prototype.toString的調(diào)用上下文(a )進(jìn)行調(diào)用:this


var sow = Object(Symbol()); 
console.log(sow.toString === Symbol.prototype.toString);


這有點(diǎn)不同。Symbol.prototype.toString從對象中檢索底層 Symbol,然后使用 Symbol 調(diào)用SymbolDescriptiveString,從而生成一個帶有符號描述值(如果有)的字符串。

請注意,包裝在對象中的本機(jī) Symbol在傳遞給時不會String拋出,因?yàn)楫?dāng)參數(shù)是符號時,String 構(gòu)造函數(shù)不會調(diào)用有問題的抽象方法。ToString


const sym = Symbol(); 
console.log(String(sym)); 
console.log(sym.toString());


查看完整回答
反對 回復(fù) 2022-05-14
  • 1 回答
  • 0 關(guān)注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號