日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

JavaScript如何優(yōu)雅地告別Cannot read properties of undefined,Optional類體驗

來源: 責編: 時間:2024-05-16 09:10:08 203觀看
導讀相信很多開發(fā)者在開發(fā)中經(jīng)常遇到的一個報錯:Uncaught TypeError: Cannot read properties of undefined.圖片作為一名熟練的前端攻城獅,你一眼就能這是由于讀取一個對象屬性時,對象為 undefined 時導致的。要想避免,我們

相信很多開發(fā)者在開發(fā)中經(jīng)常遇到的一個報錯:zDZ28資訊網(wǎng)——每日最新資訊28at.com

Uncaught TypeError: Cannot read properties of undefined.zDZ28資訊網(wǎng)——每日最新資訊28at.com

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

作為一名熟練的前端攻城獅,你一眼就能這是由于讀取一個對象屬性時,對象為 undefined 時導致的。zDZ28資訊網(wǎng)——每日最新資訊28at.com

要想避免,我們需要做下判斷。zDZ28資訊網(wǎng)——每日最新資訊28at.com

let a = fetch(url, params);a?.result?.map(console.log);

或者你使用 try catch 結構來捕獲異常。zDZ28資訊網(wǎng)——每日最新資訊28at.com

try {  let a = fetch(url, params);  a.result.map(console.log);} catch (err) {  console.log(err);}

當然,我們還有很多其他的選擇,這里就不一一列舉了。zDZ28資訊網(wǎng)——每日最新資訊28at.com

接下來我介紹一種我最新學到的方案——Java 的 Optional 類。zDZ28資訊網(wǎng)——每日最新資訊28at.com

Optional 類是 Java 中解決空指針異常(NullPointerException)的一種方案。(它和 Cannot read properties of undefined 是一樣的錯誤),我們看看沒有 Optional 類的情況。zDZ28資訊網(wǎng)——每日最新資訊28at.com

String str = null;// System.out.println(appendTest.toString());// 上面會觸發(fā):NullPointerException,下面是常見的應對方法if (str !== null) {    System.out.println(str.toString());} else {    System.out.println("str is null!!!");}

但是使用 Optional 就優(yōu)雅的多了。zDZ28資訊網(wǎng)——每日最新資訊28at.com

String str = null;// 生成Optional類,ofNullablebiao 生成可以為null的對象Optional<String> optional = Optional.ofNullable(name);

生成 Optional 類還有 of 方法,不同的是不能為 null,否則調(diào)用 ifPresent 依然會報錯 NullPointerException。zDZ28資訊網(wǎng)——每日最新資訊28at.com

ifPresent: 如果存在就打印它,否則不進行任何操作。zDZ28資訊網(wǎng)——每日最新資訊28at.com

optional.ifPresent(str -> System.out.println(str));// 等價于optional.ifPresent(System.out::println);

orElseGet:如果存在就返回它,否則執(zhí)行后面的表達式。zDZ28資訊網(wǎng)——每日最新資訊28at.com

optional.orElseGet(() -> System.out.println("str is null!!"));

除此之外還有很多有意思的接口,比如我們熟悉的:map、flatmap、filter 等。zDZ28資訊網(wǎng)——每日最新資訊28at.com

需要注意的是,因為 Optional 是一個容器類,它的方法返回的仍然是 Optional 對象,所以你可以繼續(xù)對返回的 Optional 對象進行鏈式調(diào)用。例如:zDZ28資訊網(wǎng)——每日最新資訊28at.com

import java.util.Optional;public class Person {    // something}public class Main {    public static void main(String[] args) {        // 創(chuàng)建一個可能為 null 的 Person 對象        Person person = new Person("John Doe", 30);        // 使用 Optional 對象進行鏈式調(diào)用        Optional<Person> optionalPerson = Optional.ofNullable(person)                .filter(p -> p.getAge() >= 18)                .map(p -> new Person(p.getName().toUpperCase(), p.getAge())                .flatMap(p -> Optional.of(new Person(p.getName(), p.getAge() + 1)));        // 輸出結果        optionalPerson.ifPresent(p -> System.out.println("Name: " + p.getName() + ", Age: " + p.getAge()));    }}

更多信息可以看下面這張截圖:zDZ28資訊網(wǎng)——每日最新資訊28at.com

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

這些方法像極了 javascript 的數(shù)組方法,但是他們的區(qū)別是,在 Java 中,Optional 類主要用于包裝單個對象,以表示一個可能存在或可能不存在的值。它并不直接支持包裝數(shù)組。zDZ28資訊網(wǎng)——每日最新資訊28at.com

讓我們回到 javascript,這種方案似乎可以很好的解決前端的問題。好奇的搜索 GitHub,這種方案有很多 javascript 版本的實現(xiàn)。zDZ28資訊網(wǎng)——每日最新資訊28at.com

例如:https://github.com/JasonStorey/Optional.jszDZ28資訊網(wǎng)——每日最新資訊28at.com

const Optional = require("optional-js");// Define some simple operationsconst getUserId = (username) => (username === "root" ? 1234 : 0);const verify = (userId) => userId === 1234;const login = (userId) => console.log("Logging in as : " + userId);// Declare a potentially undefined valueconst username = process.argv[2];// Wrap username in an Optional, and build a pipeline using our operationsOptional.ofNullable(username).map(getUserId).filter(verify).ifPresent(login);

這看起來妙極了!!!zDZ28資訊網(wǎng)——每日最新資訊28at.com

那么這種方案是怎么實現(xiàn)的呢?關鍵是函數(shù)返回值依然是個 Optional 對象。下面我們簡單的實現(xiàn)一下這個過程。zDZ28資訊網(wǎng)——每日最新資訊28at.com

class Optional {  constructor(value) {    this.value = value;  }  static of(value) {    return new Optional(value);  }  isPresent() {    return this.value !== undefined && this.value !== null;  }  map(mapper) {    if (this.isPresent()) {      const mappedValue = mapper(this.value);      return Optional.of(mappedValue);    }    return Optional.ofNullable(null);  }  flatMap(mapper) {    if (this.isPresent()) {      const mappedValue = mapper(this.value);      if (mappedValue instanceof Optional) {        return mappedValue;      }      return Optional.ofNullable(mappedValue);    }    return Optional.ofNullable(null);  }  orElse(defaultValue) {    return this.isPresent() ? this.value : defaultValue;  }  static ofNullable(value) {    return Optional.of(value);  }}function getNameLength(person) {  return Optional.ofNullable(person)    .map((p) => p.name)    .map((name) => name.length)    .orElse(0);}const person = { name: "John Doe" };console.log(getNameLength(person)); // 輸出:8const emptyPerson = null;console.log(getNameLength(emptyPerson)); // 輸出:0

你覺得這個方案可以嗎?相信大家讀到這里心中已經(jīng)有答案了吧?zDZ28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-88388-0.htmlJavaScript如何優(yōu)雅地告別Cannot read properties of undefined,Optional類體驗

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

上一篇: 面試官:你的系統(tǒng),是如何建模的?

下一篇: Java EE更名Jakarta EE對程序開發(fā)影響,你知道嗎?

標簽:
  • 熱門焦點
  • 小米平板5 Pro 12.4簡評:多專多能 兼顧影音娛樂的大屏利器

    疫情帶來了網(wǎng)課,網(wǎng)課盤活了安卓平板,安卓平板市場雖然中途停滯了幾年,但好的一點就是停滯的這幾年行業(yè)又有了新的發(fā)展方向,例如超窄邊框、高刷新率、多攝鏡頭組合等,這就讓安卓
  • 6月安卓手機性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經(jīng)正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發(fā)布之前,性能榜的榜單大體會以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領先
  • 使用LLM插件從命令行訪問Llama 2

    最近的一個大新聞是Meta AI推出了新的開源授權的大型語言模型Llama 2。這是一項非常重要的進展:Llama 2可免費用于研究和商業(yè)用途。(幾小時前,swyy發(fā)現(xiàn)它已從LLaMA 2更名為Lla
  • 2天漲粉255萬,又一賽道在抖音爆火

    來源:運營研究社作者 | 張知白編輯 | 楊佩汶設計 | 晏談夢潔這個暑期,旅游賽道徹底火了:有的「地方」火了&mdash;&mdash;貴州村超旅游收入 1 個月超過 12 億;有的「博主」火了&m
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯(lián)網(wǎng)企業(yè)調(diào)整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 華為和江淮汽車合作開發(fā)百萬元問界MPV?雙方回應來了

    8月1日消息,郭明錤今天在社交平臺發(fā)文稱,華為正在和江淮汽車合作,開發(fā)售價在100萬元的問界MPV,預計在2024年第2季度量產(chǎn),銷量目標為上市首年交付5萬輛。
  • 三星獲批量產(chǎn)iPhone 15全系屏幕:蘋果史上最驚艷直屏

    按照慣例,蘋果將繼續(xù)在今年9月舉辦一年一度的秋季新品發(fā)布會,有傳言稱發(fā)布會將于9月12日舉行,屆時全新的iPhone 15系列將正式與大家見面,不出意外的話
  • 2022爆款:ROG魔霸6 冰川散熱系統(tǒng)持續(xù)護航

    喜逢開學季,各大商家開始推出自己的新產(chǎn)品,進行打折促銷活動。對于忠實的端游愛好者來說,能夠擁有一款夢寐以求的筆記本電腦是一件十分開心的事。但是現(xiàn)在的
  • 最薄的14英寸游戲筆記本電腦 Alienware X14已可以購買

    2022年1月份在國際消費電子展(CES2022)上首次亮相的Alienware新品——Alienware X14現(xiàn)在已經(jīng)可以購買了,這款筆記本電腦被譽為世界上最薄的 14 英寸游戲筆
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品超碰97尤物18| 久久久蜜桃精品| 亚洲乱亚洲高清| 日韩一级精品视频在线观看| 一区二区三区久久| 亚洲欧美日本国产有色| 久久国产精品久久w女人spa| 美日韩精品免费观看视频| 欧美久久电影| 欧美系列亚洲系列| 国外成人网址| 亚洲美女色禁图| 亚洲免费在线视频一区 二区| 久久成人一区二区| 欧美~级网站不卡| 欧美午夜a级限制福利片| 国产深夜精品福利| 亚洲经典自拍| 亚洲综合国产激情另类一区| 久久亚洲欧洲| 欧美色图麻豆| 黄色国产精品| 在线中文字幕一区| 久久久亚洲精品一区二区三区| 欧美日韩成人在线视频| 国产一区二区主播在线| 99riav1国产精品视频| 久久精品成人一区二区三区蜜臀| 欧美精品 日韩| 国产一区二区精品久久99| 亚洲日本欧美在线| 欧美一区永久视频免费观看| 欧美激情乱人伦| 国产婷婷色一区二区三区四区| 亚洲精品日本| 久久精品中文字幕一区二区三区| 欧美人与禽性xxxxx杂性| 国产亚洲福利一区| 一区二区三区四区国产| 久久亚洲综合色| 欧美午夜精品理论片a级大开眼界| 亚洲第一在线综合网站| 销魂美女一区二区三区视频在线| 欧美激情1区2区3区| 国产一区二区三区四区老人| 在线亚洲一区观看| 免费日本视频一区| 国产亚洲欧美日韩美女| 国产精品亚洲产品| 亚洲日本欧美日韩高观看| 国产精品亚洲美女av网站| 国产精品青草综合久久久久99| 亚洲高清资源| 欧美一区二区精品在线| 欧美日韩99| 在线观看不卡| 久久国产日韩| 国产精品永久| 在线亚洲精品| 欧美日本视频在线| 亚洲国产乱码最新视频| 久久午夜精品一区二区| 国产日韩欧美一区二区三区四区| 一区二区三区国产精华| 欧美福利视频一区| 在线播放一区| 久久久噜噜噜久噜久久 | 欧美一区二区在线看| 欧美午夜剧场| 99人久久精品视频最新地址| 欧美成人免费观看| 一区二区亚洲精品国产| 欧美制服第一页| 欧美性开放视频| 一区二区毛片| 欧美日韩精品免费| 亚洲精品一区二区三区四区高清 | 99热精品在线| 欧美精品亚洲二区| 亚洲精品久久久久| 欧美激情第8页| 亚洲日本在线视频观看| 欧美国产亚洲精品久久久8v| 亚洲国产精品一区| 欧美jizz19性欧美| 亚洲激情综合| 欧美精品七区| 一区二区三区四区蜜桃| 欧美性做爰毛片| 亚洲综合电影| 国产视频自拍一区| 久久久久久免费| 国语精品一区| 免费久久99精品国产自| 亚洲激情在线播放| 欧美人牲a欧美精品| 中文精品99久久国产香蕉| 国产精品超碰97尤物18| 亚洲欧美在线磁力| 国产中文一区| 麻豆乱码国产一区二区三区| 亚洲欧洲一区| 欧美午夜精品电影| 欧美一区二区三区视频免费播放| 国语自产精品视频在线看| 老色鬼精品视频在线观看播放| 亚洲欧洲日本专区| 欧美三级精品| 欧美一区二区三区精品电影| 在线电影院国产精品| 欧美经典一区二区| 亚洲视频一区| 国产日韩精品视频一区二区三区 | 免费成人毛片| 99天天综合性| 国产农村妇女精品| 久久综合久久综合这里只有精品 | 亚洲欧美经典视频| 精品av久久707| 欧美日本中文字幕| 午夜免费电影一区在线观看 | 欧美一区不卡| 亚洲经典在线| 国产精品人人做人人爽| 久久久久久久久综合| 亚洲狼人精品一区二区三区| 国产精品毛片一区二区三区| 久久精品99国产精品酒店日本| 亚洲激情电影在线| 国产精品激情电影| 久久综合久久久久88| 亚洲香蕉成视频在线观看| 黄色成人av在线| 欧美日韩三区四区| 久久精品一区蜜桃臀影院| 亚洲精品欧美激情| 国产农村妇女精品一区二区| 免费观看久久久4p| 亚洲欧美日韩一区二区在线 | 欧美不卡激情三级在线观看| 亚洲专区国产精品| 亚洲福利电影| 国产精品网站在线| 欧美精品v国产精品v日韩精品| 欧美亚洲网站| 9i看片成人免费高清| 国语自产精品视频在线看抢先版结局| 欧美日韩www| 久久久久一区二区三区| 亚洲网站视频| 亚洲韩国日本中文字幕| 国产日韩欧美| 欧美日韩国产二区| 久热综合在线亚洲精品| 亚洲欧美一区二区视频| 亚洲精品永久免费| 激情五月综合色婷婷一区二区| 国产精品久久久久av免费| 欧美高清成人| 久久大香伊蕉在人线观看热2| 一区二区动漫| 亚洲国产一区二区三区在线播| 国产一区二区精品丝袜| 国产精品久久久久av免费| 欧美激情亚洲精品| 久久综合精品国产一区二区三区| 午夜精品在线观看| 一区二区三区高清在线| 亚洲高清网站| 依依成人综合视频| 国产午夜精品全部视频播放| 欧美色图一区二区三区| 欧美国产一区在线| 玖玖在线精品| 久久精品国产亚洲5555| 亚洲欧美在线免费观看| 中文欧美字幕免费| 日韩视频第一页| 亚洲欧洲精品一区二区| 亚洲第一天堂av| 一区免费在线| 国内精品久久国产| 国产偷自视频区视频一区二区| 国产精品久久久久久久浪潮网站| 欧美日本韩国一区| 欧美高清视频在线| 欧美成人自拍视频| 免费视频一区| 农村妇女精品| 欧美不卡在线视频| 男女视频一区二区| 免费在线观看成人av| 美女网站久久| 久久阴道视频| 免费观看日韩av| 欧美h视频在线| 嫩草影视亚洲| 欧美高清不卡| 欧美日韩1234| 欧美日韩一级视频| 欧美午夜女人视频在线| 国产精品福利网| 国产精品美女视频网站| 国产精品一区二区三区四区|