Προς το περιεχόμενο

Σύγκριση strings στη Javascript


Lanike71

Προτεινόμενες αναρτήσεις

Καλησπέρα, δεν το βάζω στο web development καθώς είναι μια απλή ερώτηση περί js.

Δοκίμασα να συγκρίνω 2 strings τα οποία περιέχουν το χαρακτήρα & και ενώ φαινομενικά είναι ίδια, η σύγκριση βγάζει σφάλμα.

Για να επαληθεύσω, έβαλα το χαρακτήρα μέσα σε άλλα strings και όντως αυτό έφταιγε.

Κάποια λύση;

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η σύγκριση γινόταν ανάμεσα σε 2 strings 'Α & Β'.

Δοκίμασα και πάλι με διαψεύδει, το βγάζει true. Η μόνη διαφορά είναι ότι το ένα string το παίρνω από innerHTML ενός table και το συγκρίνω με το άλλο...Υπάρχει περίπτωση να έχει κάποιες διαφορές και να βγαίνει false;

Αισθάνομαι πολυ χαζός.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

6 λεπτά πριν, Lanike71 είπε

Η σύγκριση γινόταν ανάμεσα σε 2 strings 'Α & Β'.

Δοκίμασα και πάλι με διαψεύδει, το βγάζει true. Η μόνη διαφορά είναι ότι το ένα string το παίρνω από innerHTML ενός table και το συγκρίνω με το άλλο...Υπάρχει περίπτωση να έχει κάποιες διαφορές και να βγαίνει false;

Αισθάνομαι πολυ χαζός.

Μπορείς να κάνεις copy-paste εδώ τις 2 τιμές της σύγκρισης που βγάζουν το false;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Moderators

Μήπως το ένα έχει ελληνικούς χαρακτήρες και το άλλο λατινικούς; Βέβαια χωρίς τις τιμές που σου δημιουργούν πρόβλημα μόνο να μαντέψουμε μπορούμε.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η πλάκα είναι ότι μιλάμε για το ίδιο string, που περνάει από διάφορες φάσεις.

Διαβάζεται από csv, αποθηκεύεται σε array και μετά μπαίνει σε html table.

Όταν φτάνει να γίνει η σύγκριση μεταξύ των 2, δηλ. του αποθηκευμένου στο array και του innerHTML, εκεί χτυπάει.

Και το κάνει μόνο σε αυτά που έχουν μέσα το χαρακτήρα &. Ίσως το κάνει και σε άλλα, απλά δεν το ξέρω ακόμα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

εφτιαξα ενα html αρχειο με τον εξης κωδικα μεσα

 

<script>
if('we&'==='we&') console.log('einai');
</script>

μια χαρα παιζει. βγαζει einai.

φτιαξε μια λοοπα με το str.charCodeAt() Και δες και τις δυο μεταβλητες αν ειναι ιδιες at runtime.
 

Επεξ/σία από papmel
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μπορείς να μας βάλεις λίγο τον κώδικα ?

Αν χρησιμοποιείς objects τότε το == καλά κάνει και επιστρέφει false γιατί μπορεί να έχουν την ίδια τιμή αλλά είναι διαφορετικά objects

Χρησιμοποίησε το String.valueOf για να τα συγκρίνεις ή βάλε μας τον κώδικα να δούμε τι μπορεί να πάει στραβά

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Χρησιμοποίησα το String.valueOf και όντως δούλεψε...Περίεργο.

Επίσης ψάχνοντας, δούλεψε το innerText σωστά και αυτό θα χρησιμοποιήσω.

Μάλλον πρέπει να δω και τη διαφορά innerHTML με innerText.

Ευχαριστώ όσους ασχολήθηκαν.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

11 λεπτά πριν, Lanike71 είπε

Χρησιμοποίησα το String.valueOf και όντως δούλεψε...Περίεργο.

Επίσης ψάχνοντας, δούλεψε το innerText σωστά και αυτό θα χρησιμοποιήσω.

Μάλλον πρέπει να δω και τη διαφορά innerHTML με innerText.

Ευχαριστώ όσους ασχολήθηκαν.

Να πώ την αλήθεια javascript δεν ξέρω , αλλά ξέρω Java

Όταν κάνεις == τότε ουσιαστικά κοιτάς αν ένα object είναι ίδιο με ένα άλλο.

Τα 2 Strings που έχεις εσύ μπορεί να έχουν ίδια τιμή αλλά δεν είναι ίδιο το instance του Object για αυτό και δεν περνάει η ισότητα. Αυτός επίσης είναι και ο λόγος που παίζει με το valueOf γιατί απλά ελέγχεις αν είναι ίδιες οι τιμές των Objects και όχι τα ίδια τα Objects.

Αν δεν φτιάχνεις εσύ ο ίδιος τα objects τότε πρέπει να δείς τι γίνεται απο πίσω (π.χ. όπως λές αν η innerHTML σου φτιάχνει νέο Object για κάθε λεκτικό , οπότε αν π.χ. έχεις 2 textfields σε εσένα τελικά καταλήγουν 2 αντικείμενα που έχουν μέσα τους το ίδιο λεκτικό αλλά σαν instances είναι διαφορετικά)

Ξαναλέω δεν ξέρω αν ισχύουν τα παραπάνω σε javascript αλλά πολύ πιθανό να είναι ίδια με την Java οπότε αυτό είναι το πρόβλημα σου

Δες και αυτά που διαβάζω και εγώ τώρα έτσι για να πάρεις μία γεύση

https://developer.mozilla.org/en-US/docs/Web/API/DOMString

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#String_primitives_and_String_objects

  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Γιατί όμως σε όλα τα υπόλοιπα περνούσε η ισότητα;

Το μόνο που έγραφα ήταν

if(myArray[i] === table.rows[i].cells[3].innerHTML)
   doThat();

και έτρωγε κόλλημα μόνο σε αυτό.

Τελικά δούλεψε όπως είπα με

table.rows[i].cells[3].innerText

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...