function getNoun(number, one, two, five) {
let n = Math.abs(number);
n %= 100;
if (n >= 5 && n <= 20) {
return five;
}
n %= 10;
if (n === 1) {
return one;
}
if (n >= 2 && n <= 4) {
return two;
}
return five;
}
alert("4 " + getNoun(4, 'слон', 'слона', 'слонов'));
Google советует любой из трех вариантов:
ничего не делать;
настроить rel="canonical" со всех страниц пагинации, включая первую, на страницу со всеми товарами — pageall;
использовать атрибуты next, prev, чтобы показать связь между страницами пагинации (было актуально до марта 2019 года).
SEO-специалисты практикуют и другие методы:
закрывают от сканирования с помощью размещения либо запрещают к индексированию в файле robots.txt (при этом robots не является директивой).
на всех страницах пагинации указывают rel="canonical" на первую (основную) страницу.
Мое мнение это canonical на 1 страницу
Ведь при генерации этого файла для подписи я использую абсолютно произвольные данные
<meta name="format-detection" content="telephone=no">
<meta name="format-detection" content="telephone=no">
<meta name="format-detection" content="date=no">
<meta name="format-detection" content="address=no">
<meta name="format-detection" content="email=no">
const
, то всегда let
. Потому как let
используется в уникальном scope
. А вообще неплохо рассказано тут (в новой редакции).var
:{
var value = 1;
}
console.log(value); // 1
let
(const
):{
let value = 1;
}
console.log(value); // ReferenceError: value is not defined
if
.function dispatch<T>(key: DispatchKey<T>, value: DispatchValue<T>): void;
function dispatch<T>(keys: DispatchKey<T>[], iterator: (key: DispatchKey<T>) => DispatchValue<T>): void;
function dispatch<T>(
keyOrKeys: DispatchKey<T> | DispatchKey<T>[],
valueOrIterator: DispatchValue<T> | ((key: DispatchKey<T>) => DispatchValue<T>)
): void {
if (Array.isArray(keyOrKeys) && typeof valueOrIterator === 'function') {
setState((prev) => {
const updated = keyOrKeys.map((key) => valueOrIterator(key));
console.log(updated);
return prev;
});
} else {
setState((prev) => ({
...prev,
[keyOrKeys]: valueOrIterator,
}));
}
}