JS файл не позволяет мне иметь более двух переменных - PullRequest
0 голосов
/ 11 июля 2020

Я новичок ie в JS, и я пытаюсь создать собственное Chrome расширение с некоторым кодом без исходного кода, который я нашел на inte rnet. Я все еще учусь и играю, поэтому некоторые вещи для меня новы или неизвестны, и поэтому я столкнулся с этой маленькой ошибкой. Пытался создать расширение, которое изменяет шрифт в двух учетных записях Twitter , но , когда я пытаюсь добавить более двух учетных записей Twitter, Chrome сообщает об ошибке в одной из строк.

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

if (link && (link.href === "https://twitter.com/Handle1" ||
             link.href === "https://twitter.com/Handle2")) {

Если я добавлю один, два или более дескрипторов в этой части, Chrome не вернет никаких ошибок, и я знаю почему, и это здорово. Он также не возвращает его в этой части, если у меня есть только два дескриптора, как показано здесь:

if (tweet.dataset.clickToOpenTarget.indexOf("https://twitter.com/Handle1/") === 0 ||
    tweet.dataset.clickToOpenTarget.indexOf("https://twitter.com/Handle2/") === 0) {

Но он возвращает ошибку, когда я пытаюсь добавить другой дескриптор, как здесь:

if (tweet.dataset.clickToOpenTarget.indexOf("https://twitter.com/Handle1/") === 0 ||
    tweet.dataset.clickToOpenTarget.indexOf("https://twitter.com/Handle2/") === 0) ||
    tweet.dataset.clickToOpenTarget.indexOf("https://twitter.com/Handle3/") === 0) {

Chrome говорит, что это из-за «Неожиданного токена ||» но я не знаю почему. Если он принимает два дескриптора, а оператор - «ИЛИ», почему он не принимает три или более дескрипторов?

Ответы [ 2 ]

2 голосов
/ 11 июля 2020

синтаксическая ошибка, еще одна ) перед ||.

if (
  tweet.dataset.clickToOpenTarget.indexOf("https://twitter.com/Handle1/") ===
    0 ||
  tweet.dataset.clickToOpenTarget.indexOf("https://twitter.com/Handle2/") ===
    0 ||
  tweet.dataset.clickToOpenTarget.indexOf("https://twitter.com/Handle3/") === 0
) {
}

Фактически, ваш код можно упростить до приведенного ниже, что может помочь вам найти, где находится ошибка.

var clickToOpenTarget = tweet.dataset.clickToOpenTarget;
var hrefs = [
  "https://twitter.com/Handle1/",
  "https://twitter.com/Handle2/",
  "https://twitter.com/Handle3/",
];
var hasClickToOpenTarget = hrefs.some(function (href) {
  return clickToOpenTarget.indexOf(href) === 0;
});
if (clickToOpenTarget) {
  console.log("hello");
}

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

1 голос
/ 11 июля 2020

Если вы переформатируете проблемный сегмент c, он будет выглядеть так:

if (tweet.dataset.clickToOpenTarget.indexOf("https://twitter.com/Handle1/") === 0 ||
    tweet.dataset.clickToOpenTarget.indexOf("https://twitter.com/Handle2/") === 0) ||
    tweet.dataset.clickToOpenTarget.indexOf("https://twitter.com/Handle3/") === 0) {

Однако во второй строке вы можете увидеть, что есть дополнительный ), который сообщает JavaScript интерпретатор, что оператор if завершился, поэтому он выдает ошибку, когда видит неожиданное || сразу после оператора if.

Я предполагаю, что это была простая синтаксическая ошибка, когда вы пытались добавить другое предложение к вашему if-заявлению. Удаление этого лишнего ) устраняет проблему:

if (tweet.dataset.clickToOpenTarget.indexOf("https://twitter.com/Handle1/") === 0 ||
    tweet.dataset.clickToOpenTarget.indexOf("https://twitter.com/Handle2/") === 0 ||
    tweet.dataset.clickToOpenTarget.indexOf("https://twitter.com/Handle3/") === 0) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...