pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

Javascript 可迭代的技術(shù)定義是什么,您如何對(duì)其進(jìn)

What is the technical definition of a Javascript iterable and how do you test for it?(Javascript 可迭代的技術(shù)定義是什么,您如何對(duì)其進(jìn)行測(cè)試?)
本文介紹了Javascript 可迭代的技術(shù)定義是什么,您如何對(duì)其進(jìn)行測(cè)試?的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

我一直在實(shí)現(xiàn) ES6 Set 對(duì)象的一個(gè)??有用的子類(lèi).對(duì)于我的許多新方法,我希望接受一個(gè)參數(shù),該參數(shù)可以是另一個(gè) Set 或 Array,或者實(shí)際上是我可以迭代的任何東西.我一直在我的界面中將其稱(chēng)為可迭代",并在其上使用 .forEach() (這對(duì)于 Set 或 Array 來(lái)說(shuō)很好.示例代碼:

I've been implementing a useful subclass of the ES6 Set object. For many of my new methods, I want to accept an argument that can be either another Set or an Array, or really anything that I can iterate. I've been calling that an "iterable" in my interface and just use .forEach() on it (which works fine for a Set or an Array. Example code:

// remove items in this set that are in the otherIterable
// returns a count of number of items removed
remove(otherIterable) {
    let cnt = 0;
    otherIterable.forEach(item => {
        if (this.delete(item)) {
            ++cnt;
        }
    });
    return cnt;
}

或者

// add all items from some other iterable to this set
addTo(iterable) {
    iterable.forEach(item => {
        this.add(item);
    });
}

但是,我懷疑我可能并不真正支持 ES6 定義的任何可迭代對(duì)象,所以我對(duì) Javascript 可迭代對(duì)象的真正定義使用 ES6 規(guī)范中的術(shù)語(yǔ)感興趣?

But, I suspect I may be not really supporting any iterable in the way that ES6 defines it so I'm interested in what the real definition of a Javascript iterable is using the term as the ES6 specification does?

如何在 ES6 Javascript 中對(duì)其進(jìn)行測(cè)試?

How do you test for it in ES6 Javascript?

你應(yīng)該如何迭代一個(gè)通用的可迭代對(duì)象?

How should you iterate a generic iterable?

我在 ES6 規(guī)范中發(fā)現(xiàn)了這樣的短語(yǔ):

I've found phrases like this in the ES6 specification:

如果參數(shù)iterable存在,它應(yīng)該是一個(gè)對(duì)象實(shí)現(xiàn)了一個(gè)返回迭代器對(duì)象的@@iterator 方法生成一個(gè)二元素類(lèi)數(shù)組對(duì)象,其第一個(gè)元素是將用作 WeakMap 鍵的值,其第二個(gè)元素是與該鍵關(guān)聯(lián)的值.

If the parameter iterable is present, it is expected to be an object that implements an @@iterator method that returns an iterator object that produces a two element array-like object whose first element is a value that will be used as a WeakMap key and whose second element is the value to associate with that key.

但是,這指的是一個(gè) @@iterator 方法,我似乎無(wú)法通過(guò)該屬性名稱(chēng)訪問(wèn)它.

But, that refers to an @@iterator method which I don't seem to be able to access via that property name.

推薦答案

像 ES6 規(guī)范那樣使用術(shù)語(yǔ)的 Javascript 可迭代的真正定義是什么?

What is the real definition of a Javascript iterable using the term as the ES6 specification does?

§25.1.1.1 定義"Iterable 接口".

它們是帶有 Symbol.iterator-keyed 方法的對(duì)象,該方法返回一個(gè)有效的 Iterator (這反過(guò)來(lái)又是一個(gè)預(yù)期按照 §25.1.1.2).

They're objects with a Symbol.iterator-keyed method that returns a valid Iterator (which in turn is an object expected to behave as it should according to §25.1.1.2).

如何在 ES6 Javascript 中對(duì)其進(jìn)行測(cè)試?

How do you test for it in ES6 Javascript?

不調(diào)用@@iterator方法就無(wú)法測(cè)試返回的內(nèi)容,不嘗試運(yùn)行就無(wú)法測(cè)試結(jié)果是否符合Iterator接口.最好的辦法是這樣做

We cannot test what the @@iterator method returns without calling it, and we cannot test whether the result conforms to the Iterator interface without trying to run it. The best bet would be to do

function looksIterable(o) {
    return typeof o[Symbol.iterator] == "function";
}

但是我通常不會(huì)對(duì)此進(jìn)行測(cè)試,而只是在它不可迭代時(shí)讓它失敗并拋出異常.

however I wouldn't usually test for this but simply let it fail with an exception when it's not iterable.

你應(yīng)該如何迭代一個(gè)通用的可迭代對(duì)象?

How should you iterate a generic iterable?

不要使用 forEach.(事實(shí)上,不要在 ES6 的任何地方使用 forEach).

正確的迭代方式是 for (... of ...) 循環(huán).它會(huì)檢查所有的可迭代性(使用抽象的 GetIterator 操作 并運(yùn)行(甚至關(guān)閉)迭代器,并在用于不可迭代的值時(shí)拋出適當(dāng)?shù)?TypeError.

The proper way to iterate is a for (… of …) loop. It does all the checking for iterability (using the abstract GetIterator operation and running (and even closing) the iterator, and throws appropriate TypeErrors when used on non-iterable values.

這篇關(guān)于Javascript 可迭代的技術(shù)定義是什么,您如何對(duì)其進(jìn)行測(cè)試?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

discord.js v12: How do I await for messages in a DM channel?(discord.js v12:我如何等待 DM 頻道中的消息?)
how to make my bot mention the person who gave that bot command(如何讓我的機(jī)器人提及發(fā)出該機(jī)器人命令的人)
How to fix Must use import to load ES Module discord.js(如何修復(fù)必須使用導(dǎo)入來(lái)加載 ES 模塊 discord.js)
How to list all members from a specific server?(如何列出來(lái)自特定服務(wù)器的所有成員?)
Discord bot: Fix ‘FFMPEG not found’(Discord bot:修復(fù)“找不到 FFMPEG)
Welcome message when joining discord Server using discord.js(使用 discord.js 加入 discord 服務(wù)器時(shí)的歡迎消息)
主站蜘蛛池模板: 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 杭州代理记账费用-公司注销需要多久-公司变更监事_杭州福道财务管理咨询有限公司 | 干式磁选机_湿式磁选机_粉体除铁器-潍坊国铭矿山设备有限公司 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 超声波清洗机_细胞破碎仪_实验室超声仪器_恒温水浴-广东洁盟深那仪器 | 常州律师事务所_常州律所_常州律师-江苏乐天律师事务所 | pos机办理,智能/扫码/二维码/微信支付宝pos机-北京万汇通宝商贸有限公司 | 北京网站建设|北京网站开发|北京网站设计|高端做网站公司 | 液压中心架,数控中心架,自定心中心架-烟台恒阳机电设计有限公司 行星搅拌机,双行星搅拌机,动力混合机,无锡米克斯行星搅拌机生产厂家 | 衢州装饰公司|装潢公司|办公楼装修|排屋装修|别墅装修-衢州佳盛装饰 | 变色龙云 - 打包app_原生app_在线制作平台_短链接_ip查询 | 新能源汽车教学设备厂家报价[汽车教学设备运营18年]-恒信教具 | 蒸汽吸附分析仪-进口水分活度仪|康宝百科 | 好笔杆子网 - 公文写作学习交流分享平台| 恒温恒湿试验箱_高低温试验箱_恒温恒湿箱-东莞市高天试验设备有限公司 | 平面钻,法兰钻,三维钻-山东兴田阳光智能装备股份有限公司 | 液压油缸-液压缸厂家价格,液压站系统-山东国立液压制造有限公司 液压油缸生产厂家-山东液压站-济南捷兴液压机电设备有限公司 | ptc_浴霸_大巴_干衣机_呼吸机_毛巾架_电动车加热器-上海帕克 | 钢结构-钢结构厂房-钢结构工程[江苏海逵钢构厂] | 模型公司_模型制作_沙盘模型报价-中国模型网 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 蓄电池回收,ups电池后备电源回收,铅酸蓄电池回收,机房电源回收-广州益夫铅酸电池回收公司 | 高温链条油|高温润滑脂|轴承润滑脂|机器人保养用油|干膜润滑剂-东莞卓越化学 | 诗词大全-古诗名句 - 古诗词赏析 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 路斯特伺服驱动器维修,伦茨伺服驱动器维修|万骏自动化百科 | 新疆十佳旅行社_新疆旅游报价_新疆自驾跟团游-新疆中西部国际旅行社 | 非小号行情 - 专业的区块链、数字藏品行情APP、金色财经官网 | 丽陂特官网_手机信号屏蔽器_Wifi信号干扰器厂家_学校考场工厂会议室屏蔽仪 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 成都竞价托管_抖音代运营_网站建设_成都SEM外包-成都智网创联网络科技有限公司 | 登车桥动力单元-非标液压泵站-非标液压系统-深圳市三好科技有限公司 | 【星耀裂变】_企微SCRM_任务宝_视频号分销裂变_企业微信裂变增长_私域流量_裂变营销 | 置顶式搅拌器-优莱博化学防爆冰箱-磁驱搅拌器-天津市布鲁克科技有限公司 | 硫酸钡厂家_高光沉淀硫酸钡价格-河南钡丰化工有限公司 | 电子天平-华志电子天平厂家 | 油漆辅料厂家_阴阳脚线_艺术漆厂家_内外墙涂料施工_乳胶漆专用防霉腻子粉_轻质粉刷石膏-魔法涂涂 | 高尔夫球杆_高尔夫果岭_高尔夫用品-深圳市新高品体育用品有限公司 | 二手色谱仪器,十万分之一分析天平,蒸发光检测器,电位滴定仪-湖北捷岛科学仪器有限公司 | 智能气瓶柜(大型气瓶储存柜)百科 | 浙江筋膜枪-按摩仪厂家-制造商-肩颈按摩仪哪家好-温州市合喜电子科技有限公司 |