精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

小心這個(gè)陷阱: 為什么JS中的 Every()對空數(shù)組總返回 True

開發(fā) 前端
當(dāng)我第一次看到 Every()? 在空數(shù)組上的行為時(shí),我感到很驚訝,但一旦你理解了這個(gè)操作的更大背景和這個(gè)功能在各種語言中的廣泛應(yīng)用,就會覺得它是有道理的。如果你也對這個(gè)行為感到困惑,那么我建議你改變閱讀 Every()? 調(diào)用的方式。

JavaScript 語言的核心部分足夠大,以至于我們很容易誤解其某些部分的工作方式。最近在重構(gòu)一些使用 every() 方法的代碼時(shí),發(fā)現(xiàn)實(shí)際上并不理解其背后的邏輯。在我的理解中,我認(rèn)為回調(diào)函數(shù)必須被調(diào)用并返回true , every() 才會返回 true ,但實(shí)際上并非如此。對于一個(gè)空數(shù)組, every() 無論回調(diào)函數(shù)是什么都會返回 true ,因?yàn)槟莻€(gè)回調(diào)函數(shù)從未被調(diào)用過。考慮以下情況:

function isNumber(value) {
    return typeof value === "number";
}

[1].every(isNumber);            // true
["1"].every(isNumber);          // false
[1, 2, 3].every(isNumber);      // true
[1, "2", 3].every(isNumber);    // false
[].every(isNumber);             // true

在這個(gè)例子的每個(gè)情況中,對 every() 的調(diào)用都會檢查數(shù)組中的每個(gè)項(xiàng)目是否為數(shù)字。前四次調(diào)用相當(dāng)直接, every() 產(chǎn)生了預(yù)期的結(jié)果。現(xiàn)在考慮以下這些例子:

[].every(() => true);           // true
[].every(() => false);          // true

這可能更令人驚訝:返回 true 或 false 的回調(diào)函數(shù)具有相同的結(jié)果。這只能發(fā)生的唯一原因是如果回調(diào)函數(shù)沒有被調(diào)用,而 every() 的默認(rèn)值是 true 。但是,為什么在沒有值來運(yùn)行回調(diào)函數(shù)時(shí),空數(shù)組會返回 true 給 every() 呢?

要理解為什么,我們需要仔細(xì)看看規(guī)范是如何描述這個(gè)方法的。

實(shí)現(xiàn) every()

ECMA-262 定義了一個(gè) Array.prototype.every()  算法,大致可以翻譯成這段JavaScript代碼:

Array.prototype.every = function(callbackfn, thisArg) {

    const O = this;
    const len = O.length;

    if (typeof callbackfn !== "function") {
        throw new TypeError("Callback isn't callable");
    }

    let k = 0;

    while (k < len) {
        const Pk = String(k);
        const kPresent = O.hasOwnProperty(Pk);

        if (kPresent) {
            const kValue = O[Pk];
            const testResult = Boolean(callbackfn.call(thisArg, kValue, k, O));

            if (testResult === false) {
                return false;
            }
        }

        k = k + 1;
    }

    return true;
};

從代碼中,你可以看到 every() 假設(shè)結(jié)果是 true ,并且只有在回調(diào)函數(shù)對數(shù)組中的任何一項(xiàng)返回 false 時(shí)才返回 false 。如果數(shù)組中沒有任何項(xiàng)目,那么就沒有機(jī)會執(zhí)行回調(diào)函數(shù),因此,該方法無法返回 false 。

現(xiàn)在的問題是:為什么 every() 會表現(xiàn)出這樣的行為?

在數(shù)學(xué)和JavaScript中的“對所有”的量詞

MDN頁面 提供了為什么 every() 會對空數(shù)組返回 true 的答案:

every 的行為就像數(shù)學(xué)中的“全稱量詞”。特別是對于空數(shù)組,它返回真值。(空集中的所有元素都滿足任何給定條件,這是顯然的真理。)

空真(Vacuous truth)是一個(gè)數(shù)學(xué)概念,意味著如果給定的條件(稱為前件)不能被滿足(即給定的條件不為真),那么某件事就是真的。用JavaScript的術(shù)語來說,every() 對于一個(gè)空集合返回 true,因?yàn)闆]有辦法調(diào)用回調(diào)函數(shù)。回調(diào)函數(shù)代表要測試的條件,如果由于數(shù)組中沒有值而無法執(zhí)行它,那么 every() 必須返回 true。

“全稱量詞”("for all" quantifier)是數(shù)學(xué)中更大主題“全稱量化”(universal quantification)的一部分,它允許你對數(shù)據(jù)集進(jìn)行推理。考慮到JavaScript數(shù)組在進(jìn)行數(shù)學(xué)計(jì)算方面的重要性,尤其是在使用類型數(shù)組(typed arrays)的情況下,內(nèi)置支持這樣的操作是合理的。而**every()**方法并不是唯一的例子。

在數(shù)學(xué)和JavaScript中的“存在量詞”

JavaScript的 some() 方法實(shí)現(xiàn)了存在量化(existential quantification)中的“存在量詞”(“存在”有時(shí)也被稱為“存在”或“對某些”)。這個(gè)“存在量詞”規(guī)定,對于任何空集合,結(jié)果都是假的。因此,some() 方法對空集合返回 false,并且也不會執(zhí)行回調(diào)函數(shù)。以下是一些相關(guān)的示例:

function isNumber(value) {
    return typeof value === "number";
}

[1].some(isNumber);            // true
["1"].some(isNumber);          // false
[1, 2, 3].some(isNumber);      // true
[1, "2", 3].some(isNumber);    // true
[].some(isNumber);             // false
[].some(() => true);           // false
[].some(() => false);          // false

其他語言中的量化

JavaScript并不是唯一實(shí)現(xiàn)了集合或可迭代對象的量化方法的編程語言:

  • Python: all() 函數(shù)實(shí)現(xiàn)了“對所有”  ,而 any() 函數(shù)實(shí)現(xiàn)了“存在”  。
  • Rust: Iterator::all() 方法實(shí)現(xiàn)了“對所有”  ,而 any() 函數(shù)實(shí)現(xiàn)了“存在” 。

“全稱量詞”(for all)的 every() 方法的含義與影響

無論你是否認(rèn)為 every() 方法的行為違反直覺都是可以討論的。然而,無論你的觀點(diǎn)如何,你都需要了解 every() 的“全稱量詞”(for all)特性以避免錯(cuò)誤。簡而言之,如果你使用 every() 方法或可能為空的數(shù)組,你應(yīng)該事先進(jìn)行明確的檢查。例如,如果你有一個(gè)依賴于數(shù)字?jǐn)?shù)組的操作,并且在數(shù)組為空時(shí)會失敗,那么在使用 every() 之前,你應(yīng)該檢查數(shù)組是否為空。

function doSomethingWithNumbers(numbers) {

    // first check the length
    if (numbers.length === 0) {
        throw new TypeError("Numbers array is empty; this method requires at least one number.");
    }

    // now check with every()
    if (numbers.every(isNumber)) {
        operationRequiringNonEmptyArray(numbers);
    }

}

再次強(qiáng)調(diào),只有當(dāng)你有一個(gè)數(shù)組在為空時(shí)不應(yīng)該被用于操作時(shí),這才重要;否則,你可以避免這個(gè)額外的檢查。

結(jié)論

當(dāng)我第一次看到 every() 在空數(shù)組上的行為時(shí),我感到很驚訝,但一旦你理解了這個(gè)操作的更大背景和這個(gè)功能在各種語言中的廣泛應(yīng)用,就會覺得它是有道理的。如果你也對這個(gè)行為感到困惑,那么我建議你改變閱讀 every() 調(diào)用的方式。不要把 every() 理解為“這個(gè)數(shù)組中的每一項(xiàng)是否都符合這個(gè)條件?”而應(yīng)該理解為“這個(gè)數(shù)組中是否有任何一項(xiàng)不符合這個(gè)條件?”這種思維方式的轉(zhuǎn)變可以幫助你避免在未來的JavaScript代碼中出現(xiàn)錯(cuò)誤。

責(zé)任編輯:姜華 來源: 大遷世界
相關(guān)推薦

2024-09-11 08:38:02

JavaScriptC#語言編程

2024-04-29 14:39:20

2023-03-28 08:53:18

操作符數(shù)字字符串

2022-12-22 14:32:37

JavaScript編程語言

2010-08-05 09:27:03

Flex應(yīng)用

2023-12-04 09:37:00

C++靜態(tài)變量

2024-06-20 13:38:03

2024-03-04 00:00:00

數(shù)組every條件

2016-12-22 18:38:49

JavaAndroid

2010-05-12 12:36:46

MySQL innod

2020-04-20 17:15:32

Java開發(fā)代碼

2020-04-02 09:01:54

JSES 6開發(fā)

2020-03-31 16:30:09

JS語言ES 6

2013-07-30 09:45:53

2011-03-07 10:10:35

MySQL處理空值

2021-09-07 15:41:35

Bug誘因代碼

2022-09-05 11:28:07

數(shù)據(jù)分析活動分析

2025-10-29 09:34:00

2015-11-23 10:09:30

Java

2009-12-22 20:45:00

圣誕購物釣魚網(wǎng)站
點(diǎn)贊
收藏

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

国产三级中文字幕| 久久久久久综合网天天| 亚洲娇小娇小娇小| 亚洲第一图区| 久久日一线二线三线suv| 国产福利视频一区二区| 91九色丨porny丨极品女神| 人人精品视频| 日韩一区二区精品葵司在线| avav在线看| 18av在线视频| 久久久久久久久久电影| 亚洲综合在线小说| 亚洲中文无码av在线| 极品少妇一区二区三区| 一区二区亚洲精品国产| xxxxxx黄色| 国产精品成人3p一区二区三区| 午夜精品久久久久久久久久| 樱空桃在线播放| 九色网友自拍视频手机在线| 国产成人免费高清| 成人xxxxx| 国产精品久久久久久久久夜色| 国产一区日韩欧美| 搡老女人一区二区三区视频tv| 国产一级二级视频| 久久天堂久久| 欧美猛男gaygay网站| 国产免费成人在线| 国产精品一区hongkong| 亚洲视频综合在线| 亚洲视频在线二区| 噜噜噜在线观看播放视频| 不卡高清视频专区| 97自拍视频| 国产女主播福利| 精品亚洲成a人| 国产精品亚洲片夜色在线| 久久精品无码av| 亚洲一区日本| 91成人天堂久久成人| 久久亚洲AV无码| 女生裸体视频一区二区三区| 日韩有码片在线观看| 正在播放国产对白害羞| 欧美日韩精品一区二区视频| 国产午夜精品一区二区三区| 中文字幕第20页| 精品国产精品| 亚洲最新av在线网站| 亚洲精品国产一区黑色丝袜| 国产精品自拍区| 日韩风俗一区 二区| 亚洲一区二区三区四区五区六区| 国产精品45p| 亚洲精品久久久久国产| 变态另类丨国产精品| 日本福利一区| 亚洲欧美日韩网| 欧美做受喷浆在线观看| 久久超碰99| 国产一区二区三区在线看| av男人的天堂av| 手机在线一区二区三区| www.欧美三级电影.com| 欧产日产国产v| 在线观看视频免费一区二区三区| 久久久久久综合网天天| 天天操中文字幕| 日韩精品三区四区| 国产剧情日韩欧美| 国产富婆一级全黄大片| 成人av电影免费观看| 欧美成人在线免费观看| 尤物在线视频| 一区二区三区欧美| 99色精品视频| 伊人久久综合网另类网站| 日韩一区二区在线观看视频| 亚洲图片综合网| 国产亚洲精品美女久久久久久久久久| 色偷偷av亚洲男人的天堂| 老熟妻内射精品一区| 亚洲国产专区校园欧美| 国产成人欧美在线观看| 国产黄色一级大片| 2023国产一二三区日本精品2022| 色综合久久av| 色呦呦视频在线观看| 欧美日韩精品国产| www.亚洲高清| 免费日韩一区二区三区| 日韩一区二区在线视频| 黄网在线观看视频| 久久er精品视频| 精品国产综合久久| 午夜激情视频在线| 欧美视频13p| 欧美色图校园春色| 国产欧美日韩精品一区二区免费 | 国产午夜精品一区| 在线视频三区| 五月天激情小说综合| 九九热精品国产| 免费看成人哺乳视频网站| 久精品免费视频| 国产亚洲久一区二区| 成人99免费视频| 在线观看日韩片| 亚洲天堂免费电影| 欧美videossexotv100| 欧美性受xxxx黑人| 久久精品91| 激情视频在线观看一区二区三区| 免费观看在线黄色网| 欧美视频精品一区| 一级黄色片毛片| 欧美暴力喷水在线| 国产区亚洲区欧美区| 色就是色亚洲色图| 亚洲福利电影网| 无套白嫩进入乌克兰美女| 精品国产91| 秋霞午夜一区二区| 可以免费观看的毛片| 亚洲日本青草视频在线怡红院| 看欧美ab黄色大片视频免费| 日韩极品在线| 26uuu国产精品视频| 精品二区在线观看| 亚洲欧洲制服丝袜| 欧美丝袜在线观看| 日韩在线观看| 国产精品美女久久久久久免费| 青青草免费在线| 狠狠色狠色综合曰曰| japanese在线观看| 亚洲精品乱码久久久久久蜜桃麻豆| 97超碰人人看人人 | 香蕉久久夜色精品国产更新时间| 欧美高清自拍一区| 精品国精品国产自在久不卡| 亚洲欧美日韩在线不卡| 91欧美一区二区三区| 99精品视频在线| 亚洲精品免费一区二区三区| 成人片在线看| 精品久久久久香蕉网| 精品视频久久久久| 成人免费毛片app| 丰满少妇久久久| 日韩av系列| 欧美洲成人男女午夜视频| 久久国产精品高清一区二区三区| 在线亚洲+欧美+日本专区| 中文字幕人妻一区二区三区在线视频| 日韩一区欧美二区| 亚洲一区二区三区四区中文| 国产精品国产三级在线观看| 欧美成人剧情片在线观看| 亚洲国产精品成人久久蜜臀| 婷婷亚洲久悠悠色悠在线播放| 亚洲欧美日本一区| 久久综合激情| 一区二区成人国产精品| 欧美1区2区3| 久久免费视频网| 嫩草在线播放| 51午夜精品国产| 国产真实的和子乱拍在线观看| 26uuu精品一区二区| 久久精品免费网站| 亚洲电影影音先锋| 国产一区精品视频| 中文.日本.精品| 久久精品视频网站| 黄色片网站免费在线观看| 日本道免费精品一区二区三区| 极品久久久久久久| 成人永久免费视频| 国产女女做受ⅹxx高潮| 久久久久久久久久久9不雅视频| 国产成人精品日本亚洲11| 日本免费一区二区三区四区| 久久久精品国产| 午夜在线视频免费| 欧美日韩免费观看一区二区三区| 国产亚洲第一页| 国产农村妇女毛片精品久久麻豆 | 一区二区三区四区精品在线视频| 北岛玲一区二区| 精品一区二区三区视频| 国产精品又粗又长| 99久久久国产精品美女| 国新精品乱码一区二区三区18| 丁香婷婷久久| 8050国产精品久久久久久| 日本电影在线观看网站| 亚洲福利视频久久| 国产孕妇孕交大片孕| 午夜国产不卡在线观看视频| 黄色裸体一级片| www激情久久| 日韩欧美中文视频| 日韩电影免费在线看| 你懂的av在线| 欧美福利电影在线观看| 亚洲午夜精品国产| 免费成人av| 久久av一区二区三区亚洲| 老司机亚洲精品一区二区| 国产精品香蕉国产| 国产高清不卡| 97精品免费视频| 青青在线视频| 久久亚洲私人国产精品va| 亚洲激情综合| 美日韩在线视频| 久草视频在线看| 美女精品在线观看| 亚洲 欧洲 日韩| 欧美日韩在线二区| 久草一区二区| 中文一区二区三区四区| 91色在线视频| 亚洲精品第一| 国产精品视频中文字幕91| 松下纱荣子在线观看| 欧美激情在线狂野欧美精品| www在线视频| www国产精品视频| 在线看黄色av| 中文字幕日本欧美| a√在线中文网新版址在线| 亚洲精品黄网在线观看| 天天干,夜夜爽| 亚洲精品久久久久久久久久久| 亚洲欧美激情在线观看| 欧美第一区第二区| 亚洲精品久久久久久久久久| 欧美一级二级在线观看| 精品久久久久成人码免费动漫| 91麻豆精品国产自产在线| 国产又大又黑又粗| 欧美军同video69gay| www.色国产| 欧美日韩在线三区| 亚洲天堂一二三| 欧美夫妻性生活| 国产丰满果冻videossex| 日韩久久精品一区| 天天干天天干天天干| 日韩av影视综合网| 男人天堂资源在线| 中文字幕在线国产精品| 黄色片免费在线观看| 久久影院资源网| 欧洲一区二区三区| 久久久久久久久久久免费精品| 都市激情国产精品| 亲子乱一区二区三区电影| 日韩在线影院| 国产日韩在线精品av| 国产视频一区二| 国产精品v欧美精品v日韩精品| 一区中文字幕电影| 麻豆av一区二区三区久久| 国产欧美一区二区三区精品观看| 亚洲精品国产精品久久| 亚洲va在线| 青青草成人免费在线视频| 免播放器亚洲| 免费黄频在线观看| 国产98色在线|日韩| jizz日本免费| 国产精品大尺度| 久久久全国免费视频| 日韩欧美视频一区二区三区| 在线免费观看一级片| 日韩欧美不卡一区| 男男电影完整版在线观看| 久久视频在线免费观看| 五月天av在线| 成人亚洲综合色就1024| 欧美大胆a级| 中文字幕黄色大片| 先锋影音久久| 伊人国产精品视频| www精品美女久久久tv| 中文字幕乱码av| 欧美午夜久久久| 国产高潮流白浆喷水视频| 亚洲人成77777在线观看网| 91精品久久久| 国产精品国产三级国产aⅴ浪潮| 日韩在线观看中文字幕| 日韩高清av| 亚洲精品影视| 亚洲理论中文字幕| 久久精品日产第一区二区三区高清版| 少妇人妻丰满做爰xxx| 日韩欧美在线视频免费观看| 国产又粗又猛又爽又黄视频| 日韩精品在线看| 欧美巨大xxxx做受沙滩| 国产精品视频久久久| 麻豆国产欧美一区二区三区r| 中文字幕中文字幕99| 久久婷婷麻豆| 91丨porny丨对白| 亚洲乱码精品一二三四区日韩在线| 欧美一区二区三区网站| 欧美精品一区二区在线观看| 日本中文字幕在线观看| 日本精品中文字幕| 久久91在线| av在线com| 国产麻豆91精品| 精品丰满少妇一区二区三区| 欧美视频中文在线看| 粉嫩av一区二区夜夜嗨| 色综合色综合网色综合| 91精品网站在线观看| 视频一区二区三| 蜜桃伊人久久| 新91视频在线观看| 欧美色另类天堂2015| 亚洲欧美综合在线观看| 97在线免费观看| 欧美综合精品| 成人免费观看cn| 99久久综合国产精品| 一级aaa毛片| 亚洲国产成人精品电影| 后进极品白嫩翘臀在线播放| 99re国产| 狠色狠色综合久久| 少妇伦子伦精品无吗| 一区av在线播放| 亚洲xxxx天美| 久久久久久69| 久久综合社区| 国产白丝袜美女久久久久| aaa国产一区| 欧美一级特黄视频| 亚洲欧美日本另类| 日韩电影大全网站| 欧美日韩在线观看一区| 日韩电影一区二区三区| 中文字幕精品亚洲| 欧美二区三区91| 欧美韩日亚洲| 精品国产乱码久久久久软件 | 欧美精品一区二区三区国产精品| 国产精品日本一区二区不卡视频 | 日本中文字幕一区二区有限公司| 精品国产aaa| 欧美剧情片在线观看| 色呦呦在线播放| 国产一区国产精品| 视频一区二区三区中文字幕| 一级黄色片网址| 欧美精品高清视频| 黑人玩欧美人三根一起进| 国产综合 伊人色| 日韩激情在线观看| 日本裸体美女视频| 日韩欧美一级精品久久| 国产精品一二三产区| 日韩国产一区久久| 国产一区二区免费在线| 动漫精品一区一码二码三码四码| 日韩精品福利在线| 黄色日韩网站| 国产成a人亚洲精v品在线观看| 97久久超碰国产精品| 中文字幕 国产| 欧美激情精品久久久久久久变态| 亚洲婷婷丁香| 91网址在线观看精品| 欧美视频在线视频| 99视频免费在线观看| 久久久久久a亚洲欧洲aⅴ| 久久99热这里只有精品| 国产女同在线观看| 中文日韩电影网站| 久久综合五月婷婷| 国产免费又粗又猛又爽| 亚洲午夜精品一区二区三区他趣| 精品欧美不卡一区二区在线观看| 91九色露脸| 免费在线观看一区二区三区| 久久中文字幕在线观看| 在线中文字幕日韩| 久9re热视频这里只有精品| 欧美大片久久久| 色婷婷亚洲综合| 国内小视频在线看| 一级做a爰片久久|