Javascript 在不引发错误的情况下访问数组中的值
我对发展的反应相对较新。我有一个简短的问题。如果我有这样一个物体:Javascript 在不引发错误的情况下访问数组中的值,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,我对发展的反应相对较新。我有一个简短的问题。如果我有这样一个物体: var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"}; 我知道我可以通过说出person['firstName']来获得John的价值。但如果我们不知道名字会在那里呢。如果存在错误,我们如何尝试访问它而不抛出错误 我知道我们可以使用try和excepts,但我计划拥有20-30
var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
我知道我可以通过说出person['firstName']来获得John的价值。但如果我们不知道名字会在那里呢。如果存在错误,我们如何尝试访问它而不抛出错误
我知道我们可以使用try和excepts,但我计划拥有20-30个这样的对象,所以我认为拥有那么多try和excepts结构是不明智的。有更简单的方法吗?如果您试图访问对象的不存在属性,JavaScript不会抛出错误;它返回未定义的
如果我有您示例中的对象person
,并且我尝试访问person.middleName
或person.favoriteCesee
,它们都将返回未定义的
您可以在浏览器的开发人员控制台中轻松测试这一点。只需键入const a={};a、 乳酪代码>
现在,如果我尝试进一步访问,例如,middleInitial=person.middleName.substr(0,1)
或middleInitial=person.middleName[0]
,则会抛出一个错误,因为我正在尝试对未定义的
执行操作
如果您确实需要确保属性具有值,则必须执行以下操作:
if(person.firstName){…}
如果您只是想要回退,可以使用|
或??
:
// will set firstName to 'No first name!' if person.firstName is ANY falsy value
// (null, undefined, an empty string, NaN, false, 0)
const firstName = person.firstName || 'No first name!';
如果希望安全地遍历嵌套对象,可以使用JavaScript运算符(在其他语言中通常称为安全导航运算符):
您可以使用可选的链接:
将其与[]
符号一起使用如下:
obj?.["name"]?.["anything"]
请注意,这是一项ES6功能(或更高功能,不确定),因此在没有“编译器”的情况下使用是不安全的(如果使用react,则是安全的)访问不存在的属性不会引发错误。您的问题不清楚。检查值的第一个选项存在于条件基础中,例如if(person['firstName']){}如果有值,它将返回true或false。第二,如果将其赋值给变量,可以使用三元运算符var fname=person['firstName']?人['firstName']:'';对于不存在的字段,Javascript将始终返回未定义的。
// If person.dog is undefined, dogName will be set to undefined,
// and JavaScript will not attempt to access down to person.dog.name
const dogName = person.dog?.name;
const obj = {
name: "foo",
job: {
name: "doo",
company: "boo",
}
}
obj.name //foo
obj?.name //foo
obj.notExists //undefined
obj.notExists.somethingElse //ERROR
obj?.notExists?.somethingElse //undefined
obj?.notExists?.somethingElse?.map() //will not execute map, or any other method, if property does not exists
obj?.["name"]?.["anything"]