Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays_Reactjs - Fatal编程技术网

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"]