国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Javascript/Node.JS中如何用多種方式避免屬性為空(cannot read property of undefined ERROR)

這篇具有很好參考價值的文章主要介紹了Javascript/Node.JS中如何用多種方式避免屬性為空(cannot read property of undefined ERROR)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

?>>>>>>問題

"cannot read property of undefined" 是一個常見的 JavaScript 錯誤,包含我在內(nèi)很多人都會遇到,表示你試圖訪問一個未定義(undefined)對象的屬性。這通常是因?yàn)槟阍谠L問一個不存在的對象或者變量。為了解決這個問題,你需要檢查你的代碼,確保在訪問對象屬性之前,對象已經(jīng)被正確定義。

How can I avoid 'cannot read property of undefined' errors?

如何避免“無法讀取未定義的屬性”錯誤?

node.js中不為空顯示a如果為空顯示b,Vue/Node.js/JavaScript,javascript,前端,vue.js,屬性為空,對象

Given that below object , not all object has same property , normally happens in JSON format , 如果閣下遇到以下問題,a中未必包含b,b中未必包含c,甚至a也不一定存在,應(yīng)該如何優(yōu)雅的判斷呢。

// Where this array is hundreds of entries long, with a mix
// of the two examples given
var test = [{'a':{'b':{'c':"foo"}}}, {'a': "bar"}];

for (i=0; i<test.length; i++) {
    // OK, on i==0, but 'cannot read property of undefined' on i==1
    console.log(a.b.c);
}

>>>>>>解決方法

強(qiáng)力推薦!封裝GetProperty方法,從對象中獲取屬性,屬性不存在則返回默認(rèn)值

This is a common issue when working with deep or complex JSON object, so I try to avoid try/catch or embedding multiple checks which would make the code unreadable. I usually use this little piece of code in all my projects to do the job.?

/* Example: getProperty(myObj, 'aze.xyz', 0) // return myObj.aze.xyz safely
 * accepts array for property names:
 *     getProperty(myObj, ['aze', 'xyz'], {value: null})
 */
function getProperty(obj, props, defaultValue) {
    var res, isvoid = function(x) {return typeof x === "undefined" || x === null;}
    if(!isvoid(obj)) {
        if(isvoid(props))
            props = [];
        if(typeof props  === "string")
            props = props.trim().split(".");
        if(props.constructor === Array) {
            res = props.length>1 ? getProperty(obj[props.shift()], props, defaultValue) : obj[props[0]];
        }
    }
    return typeof res === "undefined" ? defaultValue: res;
}

思路二,我的項(xiàng)目中用的就是這個方法 !!! 好用

//by zhengkai.blog.csdn.net
const temp = {};
console.log(getSafe(()=>a.b.c, '0'));

function getSafe(fn, defaultVal) {
    try {
        if (fn() === undefined || fn() === null) {
            return defaultVal
        } else {
            return fn();
        }

    } catch (e) {
        return defaultVal;
    }
}

使用默認(rèn)參數(shù)值

在函數(shù)定義時,為參數(shù)設(shè)置默認(rèn)值,以確保即使沒有傳遞參數(shù),也不會出現(xiàn)未定義的屬性。

function example(param = "default value") {
  console.log(param);
}

example(); // 輸出 "default value"

hasOwnProperty檢查屬性是否存在

const obj = {
  key: "value"
};

if (obj.hasOwnProperty("key")) {
  console.log(obj.key);
} else {
  console.log("Key does not exist");
}

?

使用邏輯或操作符(||)

const obj = {
  key: "value"
};

console.log(obj.key || "Default value"); // 輸出 "value"

使用解構(gòu)賦值

const obj = {
  key: "value"
};

const { key = "Default value" } = obj;

console.log(key); // 輸出 "value"

可選鏈操作符optional chaining語法(.?)

  • If you use JavaScript according to ECMAScript 2020 or later, see?optional chaining.
  • TypeScript has added support for optional chaining in version?3.7.
// use it like this
obj?.a?.lot?.of?.properties

使用可選鏈操作符(?.):可選鏈操作符允許你在嘗試訪問對象的屬性時提供一個后備值,以防屬性不存在。?

const obj = {
  key: "value"
};

console.log(obj?.key ?? "Default value"); // 輸出 "value"

不是很建議的try/catch

A quick workaround is using a try/catch helper function with ES6?arrow function:?

function getSafe(fn, defaultVal) {
  try {
    return fn();
  } catch (e) {
    return defaultVal;
  }
}

// use it like this
console.log(getSafe(() => obj.a.lot.of.properties));

// or add an optional default value
console.log(getSafe(() => obj.a.lot.of.properties, 'nothing'));

?不夠優(yōu)雅的“多重判斷”方法

ry this. If?a.b?is?undefined, it will leave the?if?statement without any exception.文章來源地址http://www.zghlxwxcb.cn/news/detail-845583.html

if (a && a.b && a.b.c) {
  console.log(a.b.c);
}

到了這里,關(guān)于Javascript/Node.JS中如何用多種方式避免屬性為空(cannot read property of undefined ERROR)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SQL中如何用快照,恢復(fù)被誤刪的數(shù)據(jù)?

    SQL中如何用快照,恢復(fù)被誤刪的數(shù)據(jù)?

    什么是快照 數(shù)據(jù)庫快照是sql server 2005的一個新功能。MSDN上對它的定義是: 數(shù)據(jù)庫快照是數(shù)據(jù)庫(稱為“源數(shù)據(jù)庫”)的只讀靜態(tài)視圖。在創(chuàng)建時,每個數(shù)據(jù)庫快照在事務(wù)上都與源數(shù)據(jù)庫一致。在創(chuàng)建數(shù)據(jù)庫快照時,源數(shù)據(jù)庫通常會有打開的事務(wù)。在快照可以使用之前,打開

    2024年02月13日
    瀏覽(25)
  • Python Matplotlib 中如何用 plt.savefig 存儲圖片

    Python Matplotlib 中如何用 plt.savefig 存儲圖片

    plt.show()展示圖片的時候,截圖進(jìn)行保存,圖片不是多么清晰 如何保存高清圖也是一知識點(diǎn) 函數(shù)包名: import matplotlib.pyplot as plt 主要功能 :保存繪制數(shù)據(jù)后創(chuàng)建的圖形。使用此方法可以將創(chuàng)建的圖形保存 函數(shù)源碼: (根據(jù)需要進(jìn)行選擇) 參數(shù)解釋: 參數(shù) 描述 fname 指定格式

    2024年02月01日
    瀏覽(18)
  • Excel中如何用計算公式或表達(dá)式直接計算出結(jié)果?

    Excel中如何用計算公式或表達(dá)式直接計算出結(jié)果?

    目錄 Excel中如何用計算公式或表達(dá)式直接計算出結(jié)果? 1、例如:我們需要用E列的計算公式(表達(dá)式),直接計算出結(jié)果填至F列 2、另一種方法:在菜單欄中點(diǎn)擊【公式】再點(diǎn)擊【定義名稱】自動彈出對話框, ?3、修改【名稱】可以隨意填漢字或者英文字母G;【引用位置】改

    2024年02月14日
    瀏覽(17)
  • js 獲取url的多種方式

    window.location.href:這個屬性返回當(dāng)前窗口(當(dāng)前頁面、iframe)的完整 URL。 window.parent.location.href 是上一層頁面跳轉(zhuǎn)url window.top.location.href 是最外層的頁面跳轉(zhuǎn)url document.URL:這個屬性也可以用來獲取當(dāng)前窗口的完整 URL window.location.toString():使用該方法同樣可以獲得當(dāng)前頁面的完整

    2024年02月08日
    瀏覽(16)
  • 嵌入式中如何用C語言操作sqlite3(07)

    嵌入式中如何用C語言操作sqlite3(07)

    sqlite3編程接口非常多,對于初學(xué)者來說,我們暫時只需要掌握常用的幾個函數(shù),其他函數(shù)自然就知道如何使用了。 本篇假設(shè)數(shù)據(jù)庫為my.db,有數(shù)據(jù)表student。 no name score 4 嵌入式開發(fā)愛好者 89.0 創(chuàng)建表格語句如下: sqlite3_open sqlite3_close sqlite3_get_table 舉例 下面比如我們要顯示st

    2024年02月07日
    瀏覽(19)
  • ubuntu中如何用docker下載華為opengauss數(shù)據(jù)庫(超簡單)

    ubuntu中如何用docker下載華為opengauss數(shù)據(jù)庫(超簡單)

    openGauss 是一款全面友好開放,攜手伙伴共同打造的企業(yè)級開源關(guān)系型數(shù)據(jù)庫。openGauss采用木蘭寬松許可證v2發(fā)行,提供面向多核架構(gòu)的極致性能、全鏈路的業(yè)務(wù)、數(shù)據(jù)安全、基于AI的調(diào)優(yōu)和高效運(yùn)維的能力。openGauss深度融合華為在數(shù)據(jù)庫領(lǐng)域多年的研發(fā)經(jīng)驗(yàn),結(jié)合企業(yè)級場景

    2024年02月08日
    瀏覽(27)
  • 樹莓派Debian系統(tǒng)中如何用mDNS廣播自己的ip地址

    在 Debian 系統(tǒng)的樹莓派上使用 mDNS(Multicast DNS)廣播其 IP 地址通常涉及到 Avahi 服務(wù)的使用。Avahi 是 Linux 系統(tǒng)中的一個零配置網(wǎng)絡(luò)(Zeroconf)實(shí)現(xiàn),它允許設(shè)備在沒有配置DNS服務(wù)器的情況下通過網(wǎng)絡(luò)發(fā)現(xiàn)服務(wù)和主機(jī)名。 以下是在樹莓派上設(shè)置 Avahi 以使用 mDNS 的步驟: 安裝 A

    2024年02月02日
    瀏覽(22)
  • JavaScript【Text 節(jié)點(diǎn)、Node 節(jié)點(diǎn)屬性(nodeName、nodeValue 、textContent、nextSibling、previousSibling)】(十二)

    目錄 Text 節(jié)點(diǎn) Text節(jié)點(diǎn)屬性 Text節(jié)點(diǎn)方法 appendData() deleteData() ?insertData() ?replaceData()

    2024年02月12日
    瀏覽(10)
  • 【JS】js數(shù)組分組,javascript實(shí)現(xiàn)數(shù)組的按屬性分組

    項(xiàng)目代碼中有很多時候需要按一定的條件實(shí)現(xiàn)按屬性分組 你可以使用JavaScript的 Array.prototype.reduce() 方法來將數(shù)組分組。這是一種高級的方法,它可以將數(shù)組元素組合成一個單值。在這種情況下,你可以使用它來把數(shù)組元素放到一個對象中,其中對象的鍵是分組的條件,值是所

    2023年04月08日
    瀏覽(27)
  • 寫一個java中如何用JSch來連接sftp的類并做測試?(親測)

    當(dāng)使用JSch連接SFTP服務(wù)器的類,并進(jìn)行測試時,可以按照以下步驟操作: 添加JSch庫的依賴項(xiàng)。在你的項(xiàng)目中添加JSch庫的Maven依賴項(xiàng)(如前面所述)或下載JAR文件并將其包含在項(xiàng)目中。 dependency ? ? groupIdcom.jcraft/groupId ? ? artifactIdjsch/artifactId ? ? version0.1.55/version /dependency 創(chuàng)建

    2024年02月11日
    瀏覽(12)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包