Javascript 如何从变量打印对象表示法
我有一个关于使用带有对象符号的变量的问题。假设我有以下代码:Javascript 如何从变量打印对象表示法,javascript,variables,object,printing,Javascript,Variables,Object,Printing,我有一个关于使用带有对象符号的变量的问题。假设我有以下代码: let anObject = { name: 'Joaquin', age: 27, occupation: 'software developer', interests: ['walking', 'Arduino', 'working'] } let print = 'interests[0]'; console.log(anObject.interests[0]); //prints the re
let anObject = {
name: 'Joaquin',
age: 27,
occupation: 'software developer',
interests: ['walking', 'Arduino', 'working']
}
let print = 'interests[0]';
console.log(anObject.interests[0]); //prints the result
console.log(anObject.print); //prints undefined
如果我记录anObject.interests[0]
它将打印预期结果。但是当我将兴趣[0]
存储在一个变量中并再次打印它时,它不会
我们如何克服这个问题,为什么不打印预期结果?这不是JavaScript对象访问的工作方式
anObject.print
正在anObject
对象上查找print
属性。它与
print
变量无关
wat JavaScript本机唯一支持使用字符串进行对象访问的方法是使用单个属性键,如:
console.log(anObject['interests'][0]);
没有将打印密钥附加到对象。您正在为与对象无关的变量指定一个简单字符串
一个可能的解决办法是:
let print = anObject.interests[0]
console.log(print)
我不知道您在做什么,请详细说明,以便我可以提供其他帮助。您不能仅使用本机JavaScript来完成此操作。如果属性字符串只包含一个prop,而不是
prop[0]
,则它唯一有效。而读取道具不能通过点符号来完成。您必须使用:
obj[propString]
lib lodash有一个函数
。.get()
,如果您需要它,它可以执行此操作 以下是一些示例,以更好地了解正在发生的事情以及如何使其工作:
让一个对象={
姓名:“华金”,
年龄:27岁,
职业:"软件开发者",,
兴趣:[“行走”、“工作”、“工作”],
“兴趣[0]”:“你好!”
}
//果然
console.log(anObject.interests[0])//打印“行走”
//在这里,您尝试访问名为“兴趣[0]”的属性
let print='interests[0]';
console.log(一个对象[print])//“你好!”
//可以使用eval并传递整个表达式进行求值(不推荐)
log(eval('anObject.'+'interests[1]');
//使用Lodash的更好解决方案
log(u.get(一个对象,'interests[1]')代码>
每当在javascript对象中访问属性时,它都被字符串化。Javascript将anObject.print作为不存在的对象中的属性进行计算,因此打印未定义。要获得所需的结果,请进行以下校正
let anObject = {
name: 'Joaquin',
age: 27,
occupation: 'software developer',
interests: ['walking', 'Arduino', 'working']
}
let print = 'interests';
console.log(anObject.interests[0]); //prints the result
console.log(anObject[print][0]); //prints the result i.e. walking
在javascript中,我们可以通过以下方式访问:
-点符号
-方括号
但只有第二种情况允许动态访问属性,但不能直接使用indexinterests[0]
指定键。必须传递返回数组对象的键,然后才能访问要获取的特定索引:
让一个对象={
姓名:“华金”,
年龄:27岁,
职业:"软件开发者",,
兴趣:[“行走”、“Arduino”、“工作”]
}
让打印=‘兴趣’;
设i=0;
让print2='age'
console.log(anObject.interests[0])//打印结果
console.log(对象[print]);//打印数组对象
console.log(对象[print][i]);//打印数组对象的第一个值
log(一个对象[print2])
当然,eval
“有效”,但千万不要建议将其作为有效的解决方案。而且,将库用于对象访问这样的基本功能并不“更好”。不推荐添加。根据OP的问题,这可能是唯一的解决方案,但不是唯一的解决方案。为这些字符串编写一个合适的解析器相对来说很简单。您想说什么?问题是如何基于类似于'interests[0]'
的字符串访问属性。而不是如何直接访问该属性。对我来说,编写“这些字符串的解析器”也不是“相对简单的”。print是一个字符串“interest[0]”,它不检索变量。尝试使用不带引号的兴趣[0]。@MosèRaguzzini:未捕获引用错误:兴趣未定义
显然:一个对象。兴趣[0]
let anObject = {
name: 'Joaquin',
age: 27,
occupation: 'software developer',
interests: ['walking', 'Arduino', 'working']
}
let print = 'interests';
console.log(anObject.interests[0]); //prints the result
console.log(anObject[print][0]); //prints the result i.e. walking