isDefined

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

isDefined

Δημοσίευση από cherouvim » 16 Μαρ 2007 14:44

Θέλω να ξέρω εάν ένα variable ή function είναι δηλωμένο.

Κάνω το εξής:

Κώδικας: Επιλογή όλων

if (typeof(foo)!='undefined') {
και δουλεύει μια χαρά (IE/FF).

Κάνω extract method:

Κώδικας: Επιλογή όλων

function isDefined(obj) {
    return typeof(obj)!='undefined';
}
και ο client κώδικας γίνεται:

Κώδικας: Επιλογή όλων

if (isDefined(foo)) {
αλλά δε δουλεύει. Μου λέει foo is not defined.

Καμία ιδέα;

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

isDefined

Δημοσίευση από skeftomilos » 16 Μαρ 2007 15:20

Κάτι τέτοιο;

Κώδικας: Επιλογή όλων

function isDefined(varName) {
  return !!this[varName]
}

alert(isDefined('isDefined'))
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

isDefined

Δημοσίευση από cherouvim » 16 Μαρ 2007 16:09

Καλό!

Χωρίς να πρέπει να περάσω το όνομα του variable ώς string; Γίνεται;

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

isDefined

Δημοσίευση από skeftomilos » 16 Μαρ 2007 17:26

Δε νομίζω. Ο JS interpreter πρέπει να αποδόσει κάποια τιμή στην παράμετρο obj. Υποθέτω πως θα μπορούσε να περάσει null η undefined, αλλά απ' ό,τι φαίνεται προτιμά το run-time error.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

isDefined

Δημοσίευση από cpulse » 18 Μαρ 2007 15:36

Κώδικας: Επιλογή όλων

function isDefined(varName) {
  return !!this[varName]
}
Νομίζω αυτός ο τρόπος θα έβγαζε false στην περίπτωση που το varName υπάρχει, είναι boolean και τυχαίνει να έχει τιμή false.

Καλύτερο δεν είναι έτσι;

Κώδικας: Επιλογή όλων

function isDefined(varName) {
  return this[varName] !== undefined
}
:think:

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

isDefined

Δημοσίευση από cherouvim » 18 Μαρ 2007 16:31

Thanks.

@cpulse: Ενδιαφέρον αυτό που λες. Πάντως το κάνω σε ονόματα μεγάλων αντικειμένων όπως Calendar και FCKeditor, έτσι ώστε να εφαρμόσω δυναμικά τις συμπεριφορές, σε περίπτωση που αυτά είναι διαθέσιμα (από <script> δηλώσεις στο <head> της σελίδας μου).

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

isDefined

Δημοσίευση από cpulse » 18 Μαρ 2007 17:01

Κάθησα να δω κι εγώ τι άλλα castings προς boolean βγάζουν false..
είναι το boolean false, int 0, float 0.0, string ''

αλλά φαντάζομαι οτι αν το θές μόνο για objects τότε δεν υπάρχει πρόβλημα

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

isDefined

Δημοσίευση από skeftomilos » 19 Μαρ 2007 15:13

cpulse έγραψε:Καλύτερο δεν είναι έτσι;

Κώδικας: Επιλογή όλων

function isDefined&#40;varName&#41; &#123;
  return this&#91;varName&#93; !== undefined
&#125;
Είναι πιο σωστό γενικά, αλλά ο IE5 δεν αναγνωρίζει το keyword undefined και θα βγάλει σφάλμα. Οπότε το καλύτερο μάλλον είναι:

Κώδικας: Επιλογή όλων

function isDefined&#40;varName&#41; &#123;
  return typeof this&#91;varName&#93; != 'undefined'
&#125;
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες