Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从变量打印对象表示法_Javascript_Variables_Object_Printing - Fatal编程技术网

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中,我们可以通过以下方式访问: -点符号 -方括号

但只有第二种情况允许动态访问属性,但不能直接使用index
interests[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