javascript - utilizar - El uso de la variable "nombre" no funciona con un objeto JS
pasar variable laravel a javascript (3)
window.name
se utiliza para establecer el nombre de la ventana, y dado que el nombre de la ventana solo puede ser una cadena, todo lo que establezca en window.name
se convierte en una cadena. Y las cadenas, como valores primitivos, no pueden tener propiedades. La solución es usar un nombre de variable diferente o un alcance diferente.
Alternativamente, puede usar window.name
como desee si tiene este código primero. No lo recomiendo en absoluto, sino como una prueba de concepto:
(function () {
var _name;
window.__defineGetter__(''name'', function () {
return _name;
});
window.__defineSetter__(''name'', function (v) {
_name = v;
});
})();
Además, debe usar {}
en lugar de new Object
. Además de ser más conciso, también es más eficiente y más explícito.
El comportamiento se puede ver en este pequeño fragmento (ejecutarlo como un script global):
var name = {};
name.FirstName = ''Tom'';
alert(name.FirstName);
La alerta undefined
en Chrome pero funciona en IE y Firefox. También tengo un valor extraño cuando lo hago
alert(name);
window.name tiene un propósito especial, y se supone que es una cadena. Chrome parece convertirlo explícitamente en una cadena, por lo que var name = {};
en realidad termina dando el name
variable global (es decir, window.name
) un valor de "[object Object]"
. Como es una primitiva, las propiedades ( name.FirstName
) no se " name.FirstName
".
Para evitar este problema, no use el name
como una variable global.
Su variable de name
es en realidad window.name
, porque las variables de nivel superior declaradas con var
se adjuntan al objeto global.
La especificación HTML5 requiere que window.name
sea un DOMString
. Esto significa que el valor de window.name
solo puede ser una secuencia de caracteres , no un objeto.
En Chrome, un intento de usar window.name
para almacenar algo excepto una cadena primitiva forzará el valor a una cadena primitiva. Por ejemplo:
window.name = {};
window.name === "[object Object]"; // true
Puede evitar este problema utilizando una variable de name
que no se encuentre en el ámbito de nivel superior:
(function() {
var name = {};
// this `name` is not `window.name`
// because we''re not in the top-level scope
console.log(name);
})();