我正在使用NodeJS和Mongoose。我从数据库中获取了一组数组(让我们称之为results[][]
)。
我只想测试每个数组中包含的对象是否具有属性 game_id (随机正整数)。
我尝试过像往常一样的简单条件:
for (i = 0; i < results.length; i += 1) {
if(results[i][0].hasOwnProperty('game_id')) {
console.log('OK ?');
}
}
但我从未通过这个条件......这很奇怪,因为如果我转储对象,我会看到 game_id 属性。
所以我尝试了这个:
for (i = 0; i < results.length; i += 1) {
if(results[i][0].hasOwnProperty('game_id')) {
console.log('[' + i + '] Test 1: ' + results[i][0].game_id);
}
if(results[i][0].game_id) {
console.log('[' + i + '] Test 2: ' + results[i][0].game_id);
}
}
得到:
[0] Test 2: 123
[1] Test 2: 456
[2] Test 2: 789
[3] Test 2: 1011
我不明白......
当results[i][0].hasOwnProperty('game_id')
为真时,为什么results[i][0].game_id
会返回false?那里发生了什么?
答案 0 :(得分:1)
我认为发生这种情况的唯一方法是game_id
属性是否通过原型链进入。如果hasOwnProperty
不属于枚举的实际对象,则function CreateObject(){
}
CreateObject.prototype = {
game_id:123
};
var arr = [
new CreateObject(), new CreateObject()
];
for(var i = 0;i<arr.length;i++){
if(arr[i].hasOwnProperty('game_id')) {
console.log('[' + i + '] Test 1: ' + arr[i].game_id); // not logged
}
if(arr[i].game_id) {
console.log('[' + i + '] Test 2: ' + arr[i].game_id); // logged
}
}
将返回false,但它仍可能具有原型中的属性/值。
以下代码演示了这一点:
while (netInfo == null || !netInfo.isConnected()) {
new AlertDialog.Builder(this)
.setTitle("title")
.setMessage("message")
.setPositiveButton("Try Again", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
netInfo = cm.getActiveNetworkInfo();
System.out.println("cm: "+cm+ " netinfo: "+ netInfo);
}
})
.show();
}
&#13;