1. 程式人生 > >js獲取陣列元素個數和物件成員數

js獲取陣列元素個數和物件成員數

Javascript怎麼得到陣列長度(也就是陣列的元素個數)?
Javascript怎麼獲取物件的成員個數?
你肯定想到了array.length!? 那麼我們來測試一下下面這個例子.
  1. <script type="text/javascript">
  2.         var a = [];
  3.         a[50] = 50;
  4.         alert(a.length);
  5. </script>
複製程式碼 請問陣列a有多少個元素, 或者換一句話說, 陣列a的長度為多少?你會告訴我長度為1, 但瀏覽器會告訴你a.length為51.
有點意思吧? 那我們再看一個例子.
  1. <script type="text/javascript">
  2.         var a = [];
  3.         a['age'] = '18';
  4.         a['sex'] = 'Male';
  5.         a['site'] = 'http://www.qSyz.net';
  6.         alert(a.length);
  7. </script>
複製程式碼 請問陣列a有多少個元素, 或者換一句話說, 陣列a的長度為多少?
我們都知道現在陣列a的元素個數為3個,但瀏覽器會告訴你a.length為0 !!

js怎麼獲取物件的成員個數? 用length屬性嗎?
  1. <script type="text/javascript">
  2.         var a = {'age':30,'sex':'male'};
  3.         alert(a.length);
  4. </script>
複製程式碼 以上程式碼得到結果為undefined!

綜上所述,length不可靠,要想得到準確的陣列元素個數或者物件的成員個數,我們需要自己動手寫一個函式.
如果傳入陣列則計算陣列長度,如果傳入物件則計算物件成員數,如果傳入字串則計算字串的字數.其他型別返回false
  1. <script type="text/javascript">
  2.         function count(o){
  3.                 var t = typeof o;
  4.                 if(t == 'string'){
  5.                         return o.length;
  6.                 }else if(t == 'object'){
  7.                         var n = 0;
  8.                         for(var i in o){
  9.                                 n++;
  10.                         }
  11.                         return n;
  12.                 }
  13.                 return false;
  14.         }
  15. </script>
複製程式碼 現在在測試一下剛才的例子? 
  1. <script type="text/javascript">
  2.         var a = [];
  3.         a[50] = 50;
  4.         alert(count(a));
  5. </script>
複製程式碼 得到結果為2
  1. <script type="text/javascript">
  2.         var a = [];
  3.         a['age'] = '18';
  4.         a['sex'] = 'Male';
  5.         a['site'] = 'http://www.qSyz.net';
  6.         alert(count(a));
  7. </script>
複製程式碼 得到結果為3.
  1. <script type="text/javascript">
  2.         var a = {'age':30,'sex':'male'};
  3.         alert(count(a));
  4. </script>
複製程式碼 得到結果為2