почему в приведенном ниже коде я не могу напечатать инструкцию возврата с точечной нотацией в javascript - PullRequest
0 голосов
/ 03 мая 2020

Я изучаю javascript, и я столкнулся с этой проблемой, в которой у меня есть функция, которая принимает объект и свойство, и мне нужно с помощью функции object.hasOwnProperty проверить, что объект, переданный в функцию, имеет свойство или нет, и если оно имеет свойство, которое возвращает его значение, в противном случае возвращается «Not Found».

Это созданная мной функция:

function checkObj(obj, checkProp) {
  if(obj.hasOwnProperty(checkProp)){
    return obj.checkProp;  
  }else{
    return "Not Found";
  }  
}

вход для функции:

checkObj({gift: "pony", pet: "kitten", bed: "sleigh"}, "gift")

так что я обнаружил, что после нескольких часов попыток и, наконец, просмотра видео решения это то, что обозначение в скобках выполнит код решения работы

function checkObj(obj, checkProp) {
  if(obj.hasOwnProperty(checkProp)){
    return obj[checkProp];  
  }else{
    return "Not Found";
  }  
}

Так может кто-нибудь, пожалуйста, пролить немного Узнайте, почему точечная запись не может решить задачу?

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

В Javascript оператор точки используется для доступа к свойствам объектов. Он принимает объект в качестве первого параметра и имя свойства в качестве второго оператора. Примечание: он принимает имя свойства в качестве второго параметра - дальнейшая замена или выполнение кода для второго параметра не производится.

Если вы используете obj.checkProperty, вы получаете доступ к свойству с именем checkProperty объекта хранится в obj. Этот объект не имеет свойства с таким именем в вашем примере, поэтому это не удастся.

То, чего вы хотите достичь, это вызвать свойство с именем , хранящимся в переменная checkProperty. Это должно быть сделано с использованием скобочной записи, поскольку здесь выполняется дальнейшее выполнение кода - обратите внимание на разницу между obj["checkProperty"] (что эквивалентно obj.checkProperty) и obj[checkProperty].

0 голосов
/ 03 мая 2020

Он не работает с точечной нотацией, поскольку obj.checkProp пытается прочитать свойство с именем checkProp из объекта.

...