2014-06-16 3 views
0

Просто столкнулся с этим при отправке ответов и не понял, почему это происходит.Сетчатая цепочка 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/

+0

@cookiemonster Да, вы правы, просто понял, что из себя, но решил не удалять вопрос, как другие могут столкнуться с той же проблемой. :) – Cristy

+2

Потому что 's' в' s.lastIndexOf («X») 'относится к немодифицированным' s', а не 's.slice (1)'. Метод '.slice()' не изменяет оригинал. EDIT: ... извините, моя оригинальная формулировка была неправильной. –

ответ

2

Это потому, что вы удалили один первый символ из 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 
+0

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

Смежные вопросы