arr.length獲取的是真實長度嗎:
var arr=new Array(10) console(arr.length) // 10
1. 以上代碼獲得的數組長度是10.其實數組實際不為undefined的長度是0啊。
var a = []; a['age'] = '18'; a['sex'] = 'Male'; console.log(a.length); // 0
2. 獲得的數組長度是0. 其實數組實際不為undefined的長度是2啊。
再來看看對象長度
var a = {'age':30,'sex':'male'}; console.log(a.length); //undefined
所以長度要怎么獲取呢?
es6新方法一招搞定: Object.keys(obj).length,畢竟數組也是特殊的對象嘛
var arr = new Array(10) console.log(Object.keys(arr).length) // 0 var a = []; a['age'] = '18'; a['sex'] = 'Male'; console.log(Object.keys(a).length); //2 var b = { 'age': 30, 'sex': 'male' }; console.log(Object.keys(b).length); //2
也可以通過數組API for in等
function getObjLength(obj) { if (typeof obj == "string") { return obj.length; } var j = 0; for (var i in obj) { j++; } return j; } var arr = new Array(10) console.log(getObjLength(arr)) // 0 var a = []; a['age'] = '18'; a['sex'] = 'Male'; console.log(getObjLength(a)); //2 var b = { 'age': 30, 'sex': 'male' }; console.log(getObjLength(b)); //2
getObjLength(null) //0 因為typeof null 也是object
擴展:Object.getOwnPropertyNames
var arr = ["a", "b", "c"]; console.log(Object.getOwnPropertyNames(arr)) // ["0", "1", "2", "length"] Object.getOwnPropertyNames(arr).length //4
再擴展定義二維數組
var images = []; //先聲明一維bai for (var i = 0; i < 2; i++) { //一維長度為2 images[i] = new Array(); //在聲明二維 for (var j = 0; j < 2; j++) { //二維長度為2 images[i][j] = i.toString() + j; } }
獲取二維數組長度,不管值是不是undefind,則
images.length
images[0].length