AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

面試官:如何讓 var [a, b] = {a: 1, b: 2} 解構(gòu)賦值成功?

來源: 責(zé)編: 時間:2024-04-23 17:59:59 138觀看
導(dǎo)讀最近看到了一個面試題非常有意思,講得是:如何讓 var [a, b] = {a: 1, b: 2} 解構(gòu)賦值成功?。我們知道在 js 中 []代表數(shù)組,{}代表對象 。但是在這個代碼中:解構(gòu)賦值語法的左側(cè)是一個數(shù)組右側(cè)則應(yīng)該是一個具有迭代器接口的

最近看到了一個面試題非常有意思,講得是:如何讓 var [a, b] = {a: 1, b: 2} 解構(gòu)賦值成功?。E8B28資訊網(wǎng)——每日最新資訊28at.com

我們知道在 js 中 []代表數(shù)組,{}代表對象 。但是在這個代碼中:E8B28資訊網(wǎng)——每日最新資訊28at.com

  • 解構(gòu)賦值語法的左側(cè)是一個數(shù)組
  • 右側(cè)則應(yīng)該是一個具有迭代器接口的對象(如數(shù)組、Map、Set等)。

因此,將對象 {a: 1, b: 2} 解構(gòu)賦值給 [a, b] 會導(dǎo)致語法錯誤,那么怎么解決呢?我們來看一下!E8B28資訊網(wǎng)——每日最新資訊28at.com

思路

錯誤思路

既然將一個對象解構(gòu)賦值給數(shù)組,是一個語法錯誤,那我們直接把這個解構(gòu)語法變?yōu)閷ο蟮慕鈽?gòu)賦值語法不就好了。直接改成var { a, b } = { a: 1, b: 2 }; 如果這樣做的話,哈哈哈哈哈哈,恭喜你面試結(jié)束了。E8B28資訊網(wǎng)——每日最新資訊28at.com

所以我們得好好想清楚,這可是一個字節(jié)的面試題,它的考點可不是這么顯而易見的。E8B28資訊網(wǎng)——每日最新資訊28at.com

正確解題思路

我們首先來看看報錯是什么樣的:E8B28資訊網(wǎng)——每日最新資訊28at.com

var [a, b] = {a: 1, b: 2}TypeError: {(intermediate value)(intermediate value)} is not iterable

這個錯誤是個類型錯誤,并且是對象有問題,因為對象是一個不具備迭代器屬性的數(shù)據(jù)結(jié)構(gòu)。所以我們可以知道,這個面試題就是考驗我們對于迭代器屬性的認(rèn)識,我們再來個場景加深下理解。E8B28資訊網(wǎng)——每日最新資訊28at.com

let arr = [1, 2, 3]let obj = {    a: 1,    b: 2,    c: 3}for(let item of arr){    console.log(item)}for(let item of obj){    console.log(item)}

我們知道for of 只能遍歷具有迭代器屬性的,在遍歷數(shù)組的時候會打印出1 2 3,遍歷對象時會報這樣的一個錯誤TypeError: obj is not iterable,那么數(shù)組上的迭代器屬性究竟是什么樣的呢,我們來看一看。E8B28資訊網(wǎng)——每日最新資訊28at.com

E8B28資訊網(wǎng)——每日最新資訊28at.com

我們可以在最下面發(fā)現(xiàn),數(shù)組原型上有Symbol.iterator這樣一個屬性,這個屬性顯然是從Array身上繼承到的,并且這個屬性的值是一個函數(shù)體,如果我們調(diào)用一下這個函數(shù)體會怎么樣?我們打印來看看E8B28資訊網(wǎng)——每日最新資訊28at.com

console.log(arr.__proto__[Symbol.iterator]());// Object [Array Iterator] {}

最重要的點來了

它返回的是一個對象類型,并且是一個迭代器對象!!!所以一個可迭代對象的基本結(jié)構(gòu)是這樣的:E8B28資訊網(wǎng)——每日最新資訊28at.com

interable{    [Symbol.iterator]: function () {        return 迭代器 (可通過next()就能讀取到值)    }}

我們可以得出只要一個數(shù)據(jù)結(jié)構(gòu)身上,具有[Symbol.iterator]這樣一個屬性,且值是一個函數(shù)體,可以返回一個迭代器的話,我們就稱這個數(shù)據(jù)結(jié)構(gòu)是可迭代的。E8B28資訊網(wǎng)——每日最新資訊28at.com

這時候我們回到面試題之中,面試官要我們讓 var [a, b] = {a: 1, b: 2} 這個等式成立,那么有了上面的鋪墊,我們可以知道,我們接下來的操作就是:人為的為對象打造一個迭代器出來,也就是讓對象的隱式原型可以繼承到迭代器屬性,我們可以先這樣做:E8B28資訊網(wǎng)——每日最新資訊28at.com

Object.prototype[Symbol.iterator] = function(){}var [a, b] = {a: 1, b: 2}console.log(a,b);

這樣的話,報錯就改變了,變成:E8B28資訊網(wǎng)——每日最新資訊28at.com

TypeError: Result of the Symbol.iterator method is not an object

接下來,我們知道var [a, b] = [1, 2]這是肯定沒有問題的,所以我們可以將對象身上的迭代器,打造成和數(shù)組身上的迭代器(arr[Symbol.iterator])一樣,代碼如下:E8B28資訊網(wǎng)——每日最新資訊28at.com

Object.prototype[Symbol.iterator] = function(){    // 使用 Object.values(this) 方法獲取對象的所有值,并返回這些值的迭代器對象    return Object.values(this)[Symbol.iterator]()}

這段代碼是將 Object.prototype 上的 [Symbol.iterator] 方法重新定義為一個新的函數(shù)。新的函數(shù)通過調(diào)用 Object.values(this) 方法獲取對象的所有值,并返回這些值的迭代器對象。E8B28資訊網(wǎng)——每日最新資訊28at.com

通過這個代碼,我們可以使得任何 JavaScript 對象都具有了迭代能力。例如,對于一個對象 obj,我們可以直接使用 for...of 循環(huán)或者 ... 操作符來遍歷它的所有值。E8B28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-84902-0.html面試官:如何讓 var [a, b] = {a: 1, b: 2} 解構(gòu)賦值成功?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Spring Boot 配置文件加載優(yōu)先級詳解

下一篇: 一文讀懂Python數(shù)字、字符串、列表和元組是否可以作為字典的鍵

標(biāo)簽:
  • 熱門焦點
  • 7月安卓手機性價比榜:努比亞+紅魔兩款新機入榜

    7月登場的新機有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產(chǎn)品,而且努比亞和紅魔也一貫有著不錯的性價比,所以在本次的性價比榜單
  • 十個可以手動編寫的 JavaScript 數(shù)組 API

    JavaScript 中有很多API,使用得當(dāng),會很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進(jìn)行一次小總結(jié)。現(xiàn)在開始吧。1.forEach()forEach()用于遍歷數(shù)組接收一參
  • 多線程開發(fā)帶來的問題與解決方法

    使用多線程主要會帶來以下幾個問題:(一)線程安全問題  線程安全問題指的是在某一線程從開始訪問到結(jié)束訪問某一數(shù)據(jù)期間,該數(shù)據(jù)被其他的線程所修改,那么對于當(dāng)前線程而言,該線程
  • WebRTC.Net庫開發(fā)進(jìn)階,教你實現(xiàn)屏幕共享和多路復(fù)用!

    WebRTC.Net庫:讓你的應(yīng)用更親民友好,實現(xiàn)視頻通話無痛接入! 除了基本用法外,還有一些進(jìn)階用法可以更好地利用該庫。自定義 STUN/TURN 服務(wù)器配置WebRTC.Net 默認(rèn)使用 Google 的
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學(xué)弟,最近學(xué)習(xí)的怎么樣啊 了不起學(xué)弟:最近學(xué)習(xí)的還不錯,每天都在學(xué)習(xí),每天都在進(jìn)步! 了不起:那你最近學(xué)習(xí)的什么呢? 了不起學(xué)弟:最近在學(xué)習(xí)C
  • 零售大模型“干中學(xué)”,攀爬數(shù)字化珠峰

    文/侯煜編輯/cc來源/華爾街科技眼對于絕大多數(shù)登山愛好者而言,攀爬珠穆朗瑪峰可謂終極目標(biāo)。攀登珠峰的商業(yè)路線有兩條,一是尼泊爾境內(nèi)的南坡路線,一是中國境內(nèi)的北坡路線。相
  • 花7萬退貨退款無門:誰在縱容淘寶珠寶商家造假?

    來源:極點商業(yè)作者:楊銘在淘寶購買珠寶玉石后,因為保證金不夠賠付,店鋪關(guān)閉,退貨退款難、維權(quán)無門的比比皆是。“提供相關(guān)產(chǎn)品鑒定證書,支持全國復(fù)檢,可以30天無理由退換貨。&
  • 一條抖音4億人圍觀 ! 這家MCN比無憂傳媒還野

    作者:Hiu 來源:互聯(lián)網(wǎng)品牌官01 擦邊少女空降熱搜,幕后推手曝光被網(wǎng)友譽為“純欲天花板”的女網(wǎng)紅井川里予,近期因為一組哥特風(fēng)照片登上熱搜,引發(fā)了一場互聯(lián)網(wǎng)世界關(guān)于
  • 英特爾Xe HPG游戲顯卡:擁有512EU,單風(fēng)扇版本

    據(jù)10 月 30 日外媒 TheVerge 消息報道,英特爾 Xe HPG Arc Alchemist 的正面實被曝光,不僅擁有 512 EU 版顯卡,還擁有 128EU 的單風(fēng)扇版本。另外,這款顯卡 PCB
Top