var test = "test123"
var test123 ={
"key" + test: 123
}
Este código no funciona. ¿Qué está mal con "clave" + prueba?¿Utiliza una cadena concatenada (dinámica) como clave de objeto de JavaScript?
var test = "test123"
var test123 ={
"key" + test: 123
}
Este código no funciona. ¿Qué está mal con "clave" + prueba?¿Utiliza una cadena concatenada (dinámica) como clave de objeto de JavaScript?
Porque "key" + test
es una expresión y no un identificador ni un literal de cadena ni un número literal, que son las únicas cosas permitidas como la clave en un literal de objeto.
usted tiene que utilizar la notación []
después de crear el objeto de una clave tan dinámico:
var test123 = {};
test123["key" + test] = 123;
Un identificador es básicamente el mismo subconjunto de caracteres que se puede llamar una variable (letras, números, _
y $
; no puede comenzar con un número), y un literal de cadena es cualquier cadena incluida con '
o "
.
Así, los únicos tipos de teclas que puede utilizar en un objeto literal son:
{
a0: true, // valid identifier
$$_: true, // same
123: true, // valid numeric literal
012: true, // same (octal)
0xf: true, // same (hex)
"@": true, // not allowed as an identifier
'0a': true // same
}
Referencia: http://es5.github.com/#x11.1.5.
PropertyName:
IdentifierName
StringLiteral
NumericLiteral
Además, también se permiten números en el objeto literal, como '0' o' 5e10' (pero no '-10' porque' -' no es parte del número literal pero el operador unario '-'). –
@Felix Kling: De hecho lo son, gracias. – pimvdb
Puede pero no con notación literal (pre ES6).
var test123 = {};
test123["foo" + "bar"] = 'baz';
test123.foobar === 'baz'; // true
Gracias por la respuesta simple, eso es justo lo que estaba buscando :) –
Su código es equivalente a test123.("key" + test) = 123
mejor que puede ayudar a entender por qué está mal.
Necesita la notación ["name"]
para poder acceder a los campos por su nombre en una cadena. Otras anotaciones (la suya y .
una) requieren identificadores.
--HTML--
<div id="name1"></div>
<div id="name2"></div>
<div id="name3"></div>
--JS--
function getJsonData(){
var hr = new XMLHttpRequest();
hr.open("GET", "bookJson.json", true);
hr.setRequestHeader("Content-type", "application/json", true);
hr.onreadystatechange = function() {
if(hr.readyState == 4 && hr.status == 200) {
var data = JSON.parse(hr.responseText);
for(var i=0;i<3;i++){
var a = "p"+(i+1)+"H";
$("#name"+(i+1)).html(data[objName][a]);
}
}
}
hr.send(null);
}
---JSON--- save JSON file name as bookJson.json
{ "objName":
{
"p1H":"content1",
"p2H":"content2",
"p3H":"content3",
}
}
-----------------------------------
json object key name p1H,p2H,p3H ...
We want to dynamically get this keys in javacript instead of **data[objName].p1H**. you can get dynamical key like **data[objName]["p1H"]**
Proporcione una explicación de su respuesta para ayudar a otros usuarios del sitio. Las respuestas de solo código no son muy útiles y tienden a marcarse como de baja calidad y potencialmente eliminadas. – Tristan
Gracias por su sugerencia, proporcioné una explicación de mi respuesta ... –
Javascript proporciona dos maneras de definir una propiedad de un objeto:
En esta situación, el propertyName no se puede editar, y no se puede calcular.no se puede hacer lo siguiente:
object.('property'+'Name')
como se puede ver
object = {propertyName:value};
object = {'propertyName':value};
son iguales
que puede hacer:
var a = "propertyName";
object[a] = value;
y esta vez usted tiene que utilizar una cadena
object[propertyName] = value;//error
object["propertyName"] = value;//correct
object = {'propertyName':value};//correct
object = {propertyName:value};//correct
Con ES6, puede definir claves dinámicas dentro de un objeto literal:
const test = "test123"
const test123 = { ["key" + test]: 123 };
Desde un ligero ángulo diferente: http://stackoverflow.com/questions/2241875/how-to-create-objec t-property-from-variable-value-in-javascript –