亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

javascript 調用不存在的屬性能不報錯嗎?

javascript 調用不存在的屬性能不報錯嗎?

千巷貓影 2018-09-11 13:35:40
問題是這樣的 有一個對象var w = {a:1,b:2,c:{d:123}};那么我調用console.log(w.x.y , w.r , w.c.d , w.c.d.xw);上面的 w.x.y , w.c.d.xw 都會報錯 w.r 是 undefined ,我想做要實現的是沒有的項用空字符串代替就好了,就像 w.x.y.q.we.r.t.y.u.i.o.......無論多少個屬性掉用都不會報錯,輸出“”就好了, 不用 try catch ,要寫全局的,api數據結構比較復習,老是缺少數據,要寫的判斷好多,所以問問有沒有比較好的解決方案.
查看完整描述

1 回答

?
LEATH

TA貢獻1936條經驗 獲得超7個贊

對象屬性的查找是由點運算符(.)引起的,這個運算就負責在引用對象內部查找屬性,假如沒有找到屬性,那么就會返回undefined。

形如w.x.y.q.we.r.t.y.u.i.o這樣的鏈式查找,假如說其中一個沒有找到,那么返回了undefined,但是接下來還有點運算需要繼續查找,然而undefined并不是對象,它不可能有點運算,所以這里會拋出類型錯誤TypeError。


想要實現你的功能,你需要自己封裝一個方法,比如這樣——

Object.prototype.attr = function (search) {    const arr = search.split(".");    let obj = this;    
    for(let i = 0; i < arr.length; i++) {
        obj = obj[arr[i]];        if(obj === undefined) {            return("");
        }
    }    return(obj);
}var w = {a:1,b:2,c:{d:123}};
w.attr("x.y.q.we.r.t.y.u.i.o");

代碼大概就是這么個意思,我沒有測試,思路就是這樣,你可以參考參考。


查看完整回答
反對 回復 2018-10-16
  • 1 回答
  • 0 關注
  • 1884 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號