JavaScript с цепочкой фрагментов

#javascript #chaining

#javascript #связывание

Вопрос:

Просто столкнулся с этим при публикации ответов и не понял, почему это происходит.

Вот код:

 var s = "aaaaaX..";

var a = s.slice(1);
    a = a.slice( 0, a.lastIndexOf("X") );    

var b = s.slice(1).slice( 0, s.lastIndexOf("X") );    

var c = s.slice(1).slice( 0, s.lastIndexOf("X") - 1);

console.log(c);
  

Почему a не равно b ?
Почему -1 нужно добавлять так, чтобы c == a ?

Демонстрация: http://jsfiddle.net/mb974 /

Комментарии:

1. @cookiemonster Да, вы правы, просто понял это сам, но решил не удалять вопрос, поскольку другие могут столкнуться с той же проблемой. 🙂

2. Потому s что в s.lastIndexOf("X") относится к неизмененному s , а не к s.slice(1) . .slice() Метод не изменяет оригинал. РЕДАКТИРОВАТЬ: … извините, моя первоначальная формулировка была неправильной.

Ответ №1:

Это потому, что вы удалили один первый символ из s и присвоили его a переменной. Таким образом, индекс ниже на 1, чем индекс в строке, где вы не удалили первый символ.

Следующий пример будет работать:

 var a = s.slice(1);
    a = a.slice( 0, s.lastIndexOf("X") );    

var b = s.slice(1).slice( 0, s.lastIndexOf("X") ); 

// a == b
  

Комментарии:

1. Я считаю, что OP хотел aaaa вместо aaaaX , но только предположение.