Может кто-нибудь объяснить простым языком, что происходит в определенной части моего кода для объектов? - PullRequest
0 голосов
/ 21 ноября 2018

хотя это очень простой код, я хотел бы получить полное представление о том, что происходит в моем состоянии:

let getFreqOn = function(string){

    //set a variable for object

    let object = {}

    for (let key = 0; key < string.length; key++){

        // if (object.hasOwnProperty(string[key])) {

        // if (object[string[key]]) {

        // if (object[string[key]] !== undefined) {  

        if (string[key] in object) { 

            object[string[key]]++
        }
        else{
            object[string[key]] = 1
        }
    }
    return object
}

Моей главной заботой было бы первое условие, я понимаю, что это такоеони делают, но я не могу выразить простым языком, как это работает.Например, если (строка [ключ] в объекте) в основном говорит мне, что если определенное свойство находится в пустом объекте, который я определил, тогда я установлю его, тогда оно будет установлено как свойство и увеличено.Но я пытаюсь обернуть голову тем, что объект пуст, так как же свойство может быть в объекте?

Надеясь, что кто-то может прояснить мне условия, которые я также прокомментировал.Извините за вопрос нуб.

1 Ответ

0 голосов
/ 21 ноября 2018

Сначала оператор in возвращает логический результат.Он проверяет, присутствует ли строка слева в качестве имени свойства в объекте справа.

Таким образом

if (string[key] in object)

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

Таким образом, тест if равен false, поэтому выполняется часть else.Там код все еще ссылается на object[string[key]], но это простое назначение.Присвоение свойству объекта работает независимо от того, существует ли уже имя свойства;когда это не так, новое свойство объекта создается неявно.

Ключевое различие заключается в двух разных операторах из двух частей if - else:

  object[string[key]]++; // only works when property exists

  object[string[key]] = 1; // works always
...