Estou tentando alertar um valor retornado de uma função e recebo o seguinte no alerta:
[object Object]
Aqui está o código JavaScript:
<script type="text/javascript">
$(function ()
{
var $main = $('#main'),
$1 = $('#1'),
$2 = $('#2');
$2.hide(); // hide div#2 when the page is loaded
$main.click(function ()
{
$1.toggle();
$2.toggle();
});
$('#senddvd').click(function ()
{
alert('hello');
var a=whichIsVisible();
alert(whichIsVisible());
});
function whichIsVisible()
{
if (!$1.is(':hidden')) return $1;
if (!$2.is(':hidden')) return $2;
}
});
</script>
whichIsVisible
é a função que estou tentando verificar.
javascript
jquery
Prady
fonte
fonte
Respostas:
A conversão padrão de um objeto em string é
"[object Object]"
.Como você está lidando com objetos jQuery, você pode querer fazer
para imprimir o ID do elemento.
Conforme mencionado nos comentários, você deve usar as ferramentas incluídas em navegadores como Firefox ou Chrome para introspectar objetos fazendo em
console.log(whichIsVisible())
vez dealert
.Nota lateral : IDs não devem começar com dígitos.
fonte
Como outros observaram, esta é a serialização padrão de um objeto. Mas por que é
[object Object]
e não justo[object]
?Isso ocorre porque existem diferentes tipos de objetos em Javascript!
stringify(function (){})
->[object Function]
stringify([])
->[object Array]
stringify(/x/)
->[object RegExp]
stringify(new Date)
->[object Date]
stringify({})
->[object Object]
Isso ocorre porque a função construtora é chamada
Object
(com "O" maiúsculo), e o termo "objeto" (com "o" minúsculo) se refere à natureza estrutural da coisa.Normalmente, quando você está falando sobre "objetos" em Javascript, você realmente quer dizer " Objetos ", e não os outros tipos.
onde
stringify
deve ficar assim:fonte
thingy
JSON.stringify
, alguém pode ter uma impressão errada.Object.prototype.toString.call(undefined)
dá[object Undefined]
?[object Object]
é a representação toString padrão de um objeto em javascript.Se você quiser saber as propriedades do seu objeto, basta falar sobre ele assim:
Em seu caso específico, você está obtendo um objeto jQuery. Tente fazer isso:
Isso deve alertar o id do elemento visível.
fonte
É o valor retornado pela
toString()
função desse objeto .Eu entendo o que você está tentando fazer, porque respondi à sua pergunta ontem sobre como determinar qual div é visível. :)
A
whichIsVisible()
função retorna um objeto jQuery real, porque pensei que seria mais útil programaticamente . Se quiser usar essa função para fins de depuração, você pode simplesmente fazer algo assim:Dito isso, você realmente deve usar um depurador adequado em vez de
alert()
tentar depurar um problema. Se você estiver usando o Firefox, o Firebug é excelente. Se você estiver usando o IE8, Safari ou Chrome, eles têm depuradores integrados.fonte
Você pode ver o valor dentro de [objeto Object] como este
Tente assim
referência
https://off.tokyo/blog/react-native-object-object/
fonte
Fundamentos
Você pode não saber, mas, em JavaScript, sempre que interagimos com strings, números ou primitivos booleanos, entramos em um mundo oculto de sombras de objetos e coerção.
string, número, booleano, nulo, indefinido e símbolo.
Em JavaScript existem 7 tipos primitivos:
undefined
,null
,boolean
,string
,number
,bigint
esymbol
. Tudo o mais é um objeto. Os tipos de primitivasboolean
,string
enumber
pode ser enrolada por objeto os seus homólogos. Esses objetos são instâncias doBoolean
,String
eNumber
construtores, respectivamente.Se os primitivos não têm propriedades, por que
"this is a string".length
retorna um valor?Porque JavaScript irá coagir prontamente entre primitivos e objetos. Neste caso, o valor da string é forçado a um objeto string para acessar o comprimento da propriedade. O objeto de corda é usado apenas por uma fração de segundo após o qual é sacrificado aos Deuses da coleta de lixo - mas no espírito dos programas de descoberta de TV, vamos prender a criatura evasiva e preservá-la para análise posterior ...
Para demonstrar isso, considere o exemplo a seguir, no qual estamos adicionando uma nova propriedade ao protótipo do construtor String.
Desta forma, as primitivas têm acesso a todas as propriedades (incluindo métodos) definidas por seus respectivos construtores de objetos.
Assim, vimos que os tipos primitivos irão forçar apropriadamente a sua contraparte do Objeto quando necessário.
Análise do
toString()
métodoConsidere o seguinte código
Conforme discutido acima, o que realmente está acontecendo é que, quando chamamos o
toString()
método em um tipo primitivo, ele precisa ser coagido em sua contraparte de objeto antes de poder invocar o método.ou seja,
myNumber.toString()
é equivalente aNumber.prototype.toString.call(myNumber)
e similar para outros tipos primitivos.Mas e se em vez de o tipo primitivo ser passado para o
toString()
método de sua contraparte de função de construtor de Object correspondente, forçarmos o tipo primitivo a ser passado como parâmetro para otoString()
método de construtor de função de Object (Object.prototype.toString.call(x)
)?Olhe mais de perto em Object.prototype.toString ()
De acordo com a documentação , quando o método toString é chamado, as seguintes etapas são executadas:
Entenda isso com o exemplo a seguir
Referências: https://es5.github.io/x15.2.html#x15.2.4.2 https://es5.github.io/x9.html#x9.9 https://javascriptweblog.wordpress.com/ 27/09/2010 / the-secret-life-of-javascript-primitives /
fonte
[object Object]
é a representação de string padrão de um JavaScriptObject
. É o que você obterá se executar este código:Você pode alterar a representação padrão substituindo o
toString
método da seguinte maneira:fonte
[object Object]
veio o barbante.Você tem um objeto javascript
$1
e$2
são objetos jquery, talvez usadosalert($1.text());
para obter texto oualert($1.attr('id');
etc ...você tem que tratar
$1
e$2
gostar de objetos jQuery.fonte
Você está tentando retornar um objeto. Como não existe uma boa maneira de representar um objeto como uma string, o
.toString()
valor do objeto é automaticamente definido como"[object Object]"
.fonte