js傳參時傳入 string有數據;傳入 number時沒有數據;2[0]是對的!number類型數據可以取下標

琹箐 2022-07-24 02:33:06 阅读数:429

jsstringnumbernumber取下

目錄

一、問題

二、解决方法

 三、總結


一、問題

1.今天真的有被震驚到,js number類型的數據 竟然能够取下標,返回值為 undefined。講真的我一直以為這個會報錯的。沒想到竟然沒有問題,實測如下:

1)代碼

//測試代碼
let obj={type:2} //undefined
console.log(obj["type"]);//2
console.log(obj["type"][0]);//undefined
console.log(2[0]);//undefined

2)結果

 2.同事有封裝一個組件,但是傳參的時候非常奇怪,傳入的是字符串的時候  接口請求頭就 有數據;但是轉換為 number類型後,請求頭就沒有數據了。百思不得其解。

  仔細看了一下代碼發現了這樣一段代碼:我天哪,2[0]什麼操作,竟然沒有報錯,去控制臺打印了一下確實沒有問題(驚悚.jpg)

 分析:

1)傳入filterData={type: 2}:當type為  number類型的 2時,因為filters[key][0]為 undefined,所以最終導致  this.filterData["type"]為undefined;

2)傳入filterData={type: ‘2’}:當type為 string類型的時候, "2"[0] 為 2,所以 this.filterData["type"]為 2 

 3.其他類型的數據是否也有這種情况?

  常識告訴我,只有字符串和數組可以這樣子取下標呀。難道其他基本數據類型都可以這樣取,只不過取不到值而已?經測試,不全是如此。

null和undefined不可以用下標訪問,直接報錯

object,boolean,number,symbol 可以使用下標訪問,但是取到的值均為undefined

string,array可以使用下標訪問,能正常取到值

1)測試結果

二、解决方法

   上面說了半天,問題還是在呀,怎麼樣才可以傳入的是number,還讓 this.filterData["type"]的值是正確的呢?

  開動你的小腦筋,要讓 filters["type"][0] 為 一個數字,比如是2,那麼要能用下標取到正常值,現在有兩種方式,要麼 filters["type"]是一個 string,要麼是一個數組 array。我們想要傳一個number類型的,肯定不能是string,所以filters["type"]是一個 array,裏面裝著一個 number類型的數據。傳入filterData={type: [2]},問題完美解决!!!

 三、總結

1.除了null和undefined取下標會報錯,其餘基本數據類型都不會報錯,但是這些數據類型中只有array和string能够正常取到數據,其餘取到的都是 undefined.

2.雖然是個小問題,但是我感覺自己從根本認知上就存在問題。還是記錄一下吧!

3.不寫不知道,一寫嚇一跳。動動手,說不定有新發現!

/*

希望對你有幫助!

如有錯誤,歡迎指正,非常感謝!

*/

版权声明:本文为[琹箐]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/205/202207240231553112.html