Какой синтаксис JavaScript?

Я новичок в JavaScript. Следующий код относится к некоторой производственной кодовой базе. RegDefinition передается в форме JSON. Но я не совсем уверен в синтаксисе тела метода. В особенности части || и [].

function getCookieValue(regDefinition) {
    return (document.cookie.match(regDefiniation.regEx) || [])[regDefiniation.index] || null;
}

Ответ 1

Похоже, кто-то приложил много усилий, чтобы сделать это очень трудным для чтения.

Если я правильно ее интерпретирую, он делает что-то вроде этого:

  • вызов метода совпадения.
  • он возвращает массив совпадений или ничего (null, undefined?). Если он ничего не возвращает, по умолчанию используется пустой массив.
  • Из массива получите элемент с индексом 'regDefiniation.index'.
  • Если этот элемент не существует (что может быть в случае совпадений и всегда будет иметь место для пустого массива по умолчанию), верните null.

Ответ 2

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

(foo || [])[bar]; // or similarly (foo || {})[bar]

вместо

foo[bar]

Рассмотрим случай, когда RegExp не удалось,

var foo = null, bar = 0;

Теперь без каких-либо особых вы получите ошибку, и код остановится

foo[bar]; // TypeError: Cannot read property '0' of null

Однако скобки или версия будут отличаться

(foo || [])[bar]; // undefined (note, no error)

Это связано с тем, что результат (null || []) равен [], и теперь вы можете спокойно прочитать его свойство

Ответ 3

document.cookie - это строка, содержащая файлы cookie, связанные с текущей страницей. Функциональный вызов document.cookie.match(regDefiniation.regEx) выполняет поиск этой строки с помощью регулярного выражения, чтобы получить список подстрок, которые соответствуют.

Если ничто в строке cookie не соответствует регулярному выражению, вызов match возвращает null, поэтому || [] должен заменить этот null пустым массивом. Это гарантирует, что выражение (document.cookie.match(regDefiniation.regEx) || []) всегда возвращает массив.

[regDefiniation.index] просто извлекает элемент из этого массива. Но если запрошенный индекс не существует в массиве - например, если массив пуст, потому что регулярное выражение ничего не соответствует в строке cookie - результат будет undefined, поэтому || null изменяет результат до null в этом случае.

Ответ 4

Итак, чтобы понять это, отпустите в этом примере

var myValue = someValue || otherValue

Итак, если someValue можно преобразовать в true, тогда myValue будет содержать someValue, иначе он будет содержать otherValue

// Values that evaluate to false:
false
"" // An empty string.
NaN // JavaScript "not-a-number" variable.
null
undefined // Be careful -- undefined can be redefined!
0 // The number zero.

Все остальное вернет true

Итак, чтобы понять ваш код, разрешите его сломать

var myCookie = document.cookie.match(regDefiniation.regEx) || []

Итак, если document.cookie.match(regDefiniation.regEx) возвращает true, то возвращает его else, возвращая пустой массив. То же самое для другой части тоже. Для получения дополнительной информации о логических операторах в JavaScript, пожалуйста, следуйте следующей ссылке

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators

Ответ 5

Здесь шаг за шагом:

document.cookie возвращает строку, и к ней применяется метод match (встроенный). Если параметр находится в regDefiniation.regEx, то сделайте это else return [] (т.е. Array) После этого, что бы ни было возвращено вышеуказанным шагом, примените индексирование к этому с помощью [regDefiniation.index].

`Если все вышеперечисленные шаги завершаются с ошибкой, верните нуль.