Какой синтаксис 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]
.
`Если все вышеперечисленные шаги завершаются с ошибкой, верните нуль.