variable utilizar pasar insertar funciones datos como javascript object window-object

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); })();