node.js Array.length问题

array.length总是返回0 ….它返回0甚至一些项目添加到数组中…

function validate () { error = new Array(); if(req.body.category_id==""){ error['category_id'] = "Please select category"; } if(req.body.text==""){ error['text'] = "Enter the word"; } if(!(req.body.email!="" && req.body.email.test(/@/))){ error['email'] = "Invalid email id"; } if((req.session.number1+req.session.number2)!=req.body.captcha){ error['captcha'] = "Captcha verification failed"; } console.log(error.length); console.log(error['category_id']); if(error.length){ return false; }else{ return true; } } result of the console.log //0 //Please select category 

Javascript没有关联数组,使它的对象如下所示:

 //function to get size of object Object.prototype.size = function(obj) { var size = 0, key; for (key in obj) { if (obj.hasOwnProperty(key)) size++; } return size; }; var error = {}; //object if(req.body.category_id==""){ error['category_id'] = "Please select category"; } ... //rest of your code if( Object.size(error) ){ //check if we have error return false; }else{ return true; } //check the size of object console.log( Object.size(error) ); console.log(error['category_id']); 

Array.length只能计算键值为数字的值。 你使用string作为键,所以你的长度总是0.虽然合法,(因为数组是对象),这是混乱,不适合数组。

正如@Sudhirbuild议的那样,使用“对象”或“哈希”:{}符号。 更清楚了。 (虽然我不同意他用Object.prototype修改)

 var error = function(){}; error.prototype.test=[1,2,3]; //1,2,3 only example console.log(new error().test.length); 

使用JavaScript.prototype

但是使用这个函数创build的对象将在其原型链中拥有这个属性(因为error prototype property指向具有test属性定义的对象。