在MDN网站上处理此示例时,解释了过滤方法:
var arr = [
{ id: 15 },
{ id: -1 },
{ id: 0 },
{ id: 3 },
{ id: 12.2 },
{ },
{ id: null },
{ id: NaN },
{ id: 'undefined' }
];
var invalidEntries = 0;
function isNumber(obj) {
return obj!== undefined && typeof(obj) === 'number' && !isNaN(obj);
}
function filterByID(item) {
if (isNumber(item.id)) {
return true;
}
invalidEntries++;
return false;
}
var arrByID = arr.filter(filterByID);
console.log('Filtered Array\n', arrByID);
// Filtered Array
// [{ id: 15 }, { id: -1 }, { id: 0 }, { id: 3 }, { id: 12.2 }]
console.log('Number of Invalid Entries = ', invalidEntries);
// Number of Invalid Entries = 4
这会在FireBug中获得输出,如预期的那样:
Filtered array
[Object { id=15}, Object { id=-1}, Object { id=0}, Object { id=3}, Object { id=12.2}]
Number of Invalid Entries: 4
但我最初,不好意思但有意地键入了第一个console.log();声明如下:
console.log('Filtered array\n' + arrById);
并得到了这个FireBug输出:
Filtered array
[object Object],[object Object],[object Object],[object Object],[object Object]
Number of Invalid Entries: 4
为什么输出不同?
答案 0 :(得分:4)
使用obj上的<?php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class SecurityController extends Controller
{
/**
* @Route("/login", name="login")
*/
public function loginAction(Request $request)
{
$authenticationUtils = $this->get('security.authentication_utils');
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', array(
'last_username' => $lastUsername,
'error' => $error,
));
}
}
调用+
方法进行同步,因此返回字符串'object'而不是返回使用toString
返回的obj属性(name:value)通过console.log()输出连接。
答案 1 :(得分:1)
拿这个简单的对象:
var obj = {
test: 5,
another: 'hello'
}
如果你这样做console.log(obj)
,你要求firebug做的就是记录你的对象。它知道如何以一种很好的方式处理对象,向您显示所有属性和值。
但是,如果你这样做console.log(obj.toString())
,你会要求javascript将你的对象转换为字符串,然后再询问firebug如何显示它。作为一个字符串,firebug将只是按原样显示它。所以真正的问题是,为什么javascript会将对象转换为类似[object Object] ...
的字符串?。您可以看到解释here
在您的问题中,通过使用+
,您强制将对象转换为字符串,以便它可以与'Filtered array\n'
位连接。
如果你想做你在问题中所做的事情,但仍然有一些有用的输出,你可以尝试JSON.stringify()
。例如:console.log('Filtered array\n' + JSON.stringify(arrById));