Değişkenleri tanımlanamamış ya da bir argüman olaraq tanımlanamamış mı?

Cavanşmaların dəyərləri undefinednull bir az qarışıq oldum.

if (!testvar) həqiqətən nə edir? undefinednull və ya yalnız undefined ?

Bir dəyişən müəyyən edildikdən sonra, onu müəyyənləşdirməmiş ola bilərəm (buna görə də dəyişən silmək)?

Parametr kimi undefined bilərəm? Məsələn:

 function test(var1, var2, var3) { } test("value1", undefined, "value2"); 
244
AJ tərəfindən verilmişdir . 10 fevral 2010-02-10 12:20 '10 at 12:20 2010-02-10 12:20
@ 10 cavab

Javascript tərəfindən müəyyən edilməmiş və null bir az qarışıq oldum.

null ilə qarışdırmayın. Bir qayda olaraq, bu, "qeyri-obyektiv", "nil" və ya "yox" olan obyektlərdən olan dillərdə yazı dilinin digər konsepsiyaları ilə eyni şəkildə davranır və davranır.

Digər tərəfdən, undefined , bir qəribə javascript quirk. Bu, qrupdan kənar dəyərləri, əsasən ikinci saniyəni əks etdirən, lakin fərqli olmayan nüvəni əks etdirən bir təkbirdir. Görünür:

  • Variant bəyanat siyahılarında arqumentlərin siyahısını daha az arqumentlərlə bir funksiyanı çağırdığınızda, qeyri-çıxış dəlilləri undefined olaraq təyin olunur. Bunun məsələnini kontrol edə bilərsiniz:

     function dosomething(arg1, arg2) { if (arg2===undefined) arg2= DEFAULT_VALUE_FOR_ARG2; ... } 

    Bu üsulla, dosomething(1)dosomething(1, undefined) arasında fərq demək mümkün deyil; arg2 həm də eyni dəyəri olacaq. Farkı demək lazımdırsa, arguments.length baxa bilərsiniz, amma bu kimi isteğe bağlı arqumentlər etmək çox vaxt oxunmur.

  • Əgər funksiyanı return value; yoxdursa return value; , undefined . Bir qayda olaraq, belə bir qaytarma nəticəsində istifadə etmək lazım deyil.

  • Bir blokda bəyannaməni istifadə edərək bir dəyişən elan etdikdə, hələ bir dəyər təyin etmədikdə, o undefined . Yenə də ona etibar etməməlisiniz.

  • Spooky typeof operator, onun typeof cəhd etsəniz, adətən, bir səhv atmaq əvəzinə, typeof sadə bir dəyişən olduğunda 'undefined' typeof qaytarır. (Bununla yanaşı parantezdə sadə bir dəyişən əlavə edə bilərsiniz, lakin qeyri-mövcud dəyişənləri əks etdirən tam ifadə deyil.) Bunun üçün çox deyil.

  • Bu mübahisəli məsələdir. Var olmayan bir obyektin obyektinə daxil olduqda, hər hansı digər dildə olduğu kimi dərhal bir səhv almırsınız. Bunun əvəzinə, bir obyektin undefined . (Və sonra bu undefined obyekti skriptdə daha sonra istifadə etməyə çalışdığınızda, bu, qəribə bir şəkildə gedir ki, JavaScript-dən dərhal bu səhvi qaldırdığından daha çox izləmək çətindir.)

    Tez-tez bu xüsusiyyətlərin mövcudluğunu yoxlamaq üçün istifadə olunur:

     if (o.prop!==undefined) // or often as truthiness test, if (o.prop) ...do something... 

    Ancaq hər hansı bir dəyər kimi undefined :

     o.prop= undefined; 

    əmlakın etibarlı olub-olmadığını müəyyənləşdirməyəcəkdir. Netscape'in orijinal JavaScript versiyasında olmayan operatorda istifadə etmək daha yaxşıdır, lakin hər yerdə mövcuddur:

     if ('prop' in o) ... 

Beləliklə, undefined hər kəsə çaşdırıcı bir JavaScript-lərdir. JS-nin daha zərif bir mexanizmi undefined isteğe bağlı funksiya argümanlarına əlavə olaraq, undefined edilməməlidir. Heç vaxt dilin bir hissəsi olmadı; null (2) və (3) üçün yaxşı işləyərdi və (4) yalnız JavaScriptin başında istisna olmadığı üçün mövcud olan bir səhv olardı.

if (!testvar) həqiqətən nə edir? Belirsiz və null yoxsa ya da yalnız müəyyənləşdirilmirmi?

Belə bir etibarlılıq testi false , undefined , null , 0 , NaN və boş xətləri üçün yoxlanılır. Amma bu vəziyyətdə, bəli, həqiqətən undefined , bu narahatdır. IMO, daha aydın olmalıdır və if (testvar!==undefined) .

Değişkeni tanımladıktan sonra, onu geri tanımlayamıyorum (bu nedenle değişkenin silinmesi).

Siz undefined bilməzsiniz, ancaq dəyişən silməyəcək. Yalnız delete object.property həqiqətən şeyi silməkdədir.

delete həqiqətən, xüsusiyyətləri deyil, hər bir dəyişən deyil. Brauzerlər birbaşa delete variable ilə getməyə icazə verəcəklər, lakin bu yaxşı bir fikir deyil və ciddi ECMAScript Beshth Edition rejimində işləməyəcəkdir. Əgər zibil toplaya biləcəyiniz bir şeylə əlaqə qurarsanız, variable= null demək daha çox olur.

Parametr kimi qeyri-müəyyənləşdirilə bilərəm?

Bəli

420
10 февр. Cavab verilir 10 fevral. 2010-02-10 13:53 '10 at 13:53 2010-02-10 13:53

Siz dəyişə bilməyəcəksiniz (olmalı?) Bir şeyi tanımlanmayan kimi müəyyənləşdirin, çünki dəyişən artıq müəyyən edilməyəcək - sadəcə bir şey üçün müəyyənləşdirilmişdir.

Siz bilmirsiniz (olmamalıdır?). null dəyərdən keçmək istəyirsinizsə, yerinə null istifadə edin.

if(!testvar) bəyanatında, boolean true / false dəyərləri yoxlanılırsa, bu, testvar false testvar yoxlayır. undefined nullundefined true və ya false olaraq qiymətləndirilməməlidir, lakin JavaScript undefined edilməyincə, false olaraq null dəyərini qiymətləndirir.

border=0

Düzgün şəkildə yoxlanılmamış və ya null yoxlamaq üçün aşağıdakı əmrləri istifadə edin:

 if(typeof(testvar) === "undefined") { ... } if(testvar === null) { ... } 
15
10 февр. Tatu Ulmanen tərəfindən 10 Fevralda cavab verildi. 2010-02-10 12:24 '10 at 12:24 2010-02-10 12:24

Əsas fərqi undefinednull fərqli anlayışları təmsil edir.

null varsa, qəsdən qiyməti null dəyərinə təyin etdiyinizi və ya həddən artıq bir səhv istifadə etmədiyiniz halda dəyər hələ təyin olmağınızı təyin edə bilməyəcəksiniz:

 var a; a == null; // This is true a == undefined; // This is true; a === undefined; // This is true; 

Lakin, qəsdən dəyərin undefinedundefined dəyərləri ayırd etməyə imkan verən bir səhvsiz undefined sıx bərabərlik təyin undefined :

 var b = null; b == null; // This is true b == undefined; // This is true; b === undefined; // This is false; 

Buradakı linkə diqqət yetirmək əvəzinə itaətsiz bir şəkildə, "Ümumi olaraq, müəyyənləşdirilməyən JavaScript-nin hər kəsə qarışığı olan bir qarışıqlıq" deyənlərə güvənməyin. Qarışıq olduğunuz üçün bu, bir qarışıqlıq demək deyil.

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

Bu davranış JavaScript-də də tətbiq edilmir və mantıksal nəticənin true , false , naməlum ( null ), dəyərsiz ( undefined ) və ya bir şeyin yanlış getdiyi ( error ) ola biləcəyi ümumi anlayışı tamamlayır.

http://en.wikipedia.org/wiki/Undefined_value

10
05 окт. Todd Oct 05'a verdiyi cavabı verdi 2014-10-05 06:37 '14 saat 06:37 2014-10-05 06:37

Null dəyərləri yoxlamaq üçün ən yaxşı üsuldur

 if ( testVar !== null ) { // do action here } 

və undefined üçün

 if ( testVar !== undefined ) { // do action here } 

Siz qeyri-müəyyənləşdirilmiş istifadə edərək əvəzsiz təyin edə bilərsiniz.

 testVar = undefined; //typeof(testVar) will be equal to undefined. 
7
10 февр. Cavab 10 fevralda rahul verildi. 2010-02-10 12:24 '10 at 12:24 2010-02-10 12:24

İlk sualınıza cavab vermək üçün, ( ! ) Operator, onun mantıksal bir dəyərə qoyduğu bütün məcburiyyətə səbəb olacaq. Beləliklə, null , 0 , false , NaN"" (boş simli) səhv olaraq göstərilir.

5
10 февр. Skilldrick tərəfindən 10 Fevral cavab verildi 2010-02-10 12:23 '10 at 12:23 2010-02-10 12:23

Yox, siz təsəvvürsiz olaraq tanımlanmadığınız üçün edə bilərsiniz .

 console.log( undefined === window['undefined']  undefined === (function(){})()  window['undefined'] === (function(){})() ) //true 

sizin vəziyyətiniz:

 test("value1", undefined, "value2") 

Öz dəyişəninizi də qeyri-müəyyənləşdirə bilərsiniz:

 Object.defineProperty(this, 'u', {value : undefined}); console.log(u); //undefined 
3
18 апр. cavab user669677 18 apr tərəfindən verilir . 2014-04-18 16:59 '14 at 4:59 pm 2014-04-18 16:59

JavaScript, skript satırında tanımlanmayan bir dəyişən təyin etmək üçün:

Ubuntu 12.10 üzərindəki Java ilə gələn komanda xətti terminal js javascriptində dəyişkənliyi müəyyənləşdirməyin.

 el@defiant ~ $ js js> typeof boo "undefined" js> boo typein:2: ReferenceError: boo is not defined js> boo=5 5 js> typeof boo "number" js> delete(boo) true js> typeof boo "undefined" js> boo typein:7: ReferenceError: boo is not defined 

Javascript-də undefined bir dəyişən təyin etsəniz:

Bunu myjs.html saytına yerləşdirin:

 <html> <body> <script type="text/JavaScript"> document.write("aliens: " + aliens); document.write("typeof aliens: " + (typeof aliens)); var aliens = "scramble the nimitz"; document.write("found some aliens: " + (typeof aliens)); document.write("not sayings its aliens but... " + aliens); aliens = undefined; document.write("aliens deleted"); document.write("typeof aliens: " + (typeof aliens)); document.write("you sure they are gone? " + aliens); </script> </body> </html> 

O, yazır:

 aliens: undefined typeof aliens: undefined found some aliens: string not sayings its aliens but... scramble the nimitz aliens deleted typeof aliens: undefined you sure they are gone? undefined 

DİQQƏT! Bir dəyişən müəyyən edilmədikdə, dəyişən bir dəyişənə təyin edərsiniz. Gizli bir şəxs undefined = 'rm -rf /'; bir dəyişən təyin etmədiyiniz zaman bu dəyəri alırsınız.

Başlanğıcda müəyyən olmayan əcnəbilərin dəyərini necə göstərə bilərəm və hələ də işləməyinizə merak ola bilər. Bu, javascript qaldırılmasına bağlıdır: http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html

2
08 янв. Cavab Eric Leschinski Jan 08 tərəfindən verilir 2014-01-08 21:51 '14 at 21:51 2014-01-08 21:51

Aşağıdakıları cəhd edin:

 // found on UglifyJS variable = void 0; 
0
22 сент. Cavab Cqq Cqq 22 Sentyabr verilir. 2017-09-22 12:34 '17 də 12:34 'də 2017-09-22 12:34

Yalnız fun üçün, burada dəyişən "atanmamış" təyin etmək üçün kifayət qədər təhlükəsiz bir yoldur. Bunu etmək üçün, toqquşma birinin təsadüfi yaradılan simli eyni adı olan bir obyektin prototipinə əlavə etməsini tələb edəcəkdir. Əminəm ki, təsadüfi magistral generatorı yaxşılaşdırıla bilər, amma bu suallardan birini aldım: javascript təsadüfi strings / characters yaratmaq

Bu, yeni bir obyekt yaratmaq və təsadüfən yaradılan bir adla bir əmlaka daxil olmaq üçün çalışırıq. Bu, mövcud olmadığını və buna görə də müəyyən edilməmiş dəyərə sahib olacağını düşünür.

 function GenerateRandomString() { var text = ""; var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for (var i = 0; i < 50; i++) text += possible.charAt(Math.floor(Math.random() * possible.length)); return text; } var myVar = {}[GenerateRandomString()]; 
0
01 сент. cavab rdans verilir 01 Sep 2014-09-01 19:43 '14 at 19:43 2014-09-01 19:43

if (something)if (!something) bir hadisənin müəyyənləşdirildiyini və ya müəyyənləşdirilmədiyini yoxlamaq üçün istifadə edilir. Məsələn:

 if (document.getElementById) 

Tanımlayıcı bir boolean dəyərə çevrilir, belə ki, undefined false olaraq şərh edilir. Əlbəttə, digər dəyərlər də mövcuddur (məsələn, 0 və '), həm də false kimi şərh olunur, ancaq identifikatorun məqbul bir dəyərə malik olmaması və ya belə bir dəyəri qeyri-müəyyənləşdirdiyinizdən xoşbəxtlik duyur.

Javascript bir obyektin bir üzvünü silmək üçün istifadə edilə bilən delete ifadəsinə malikdir. Değişkenin kapsamına (yəni qlobal və ya olmasa) bağlı olaraq, onu tanımsızlaştırmak üçün silə bilərsiniz.

Belirlenmemiş bir literal olaraq istifadə edilə bilən heç bir undefined söz yoxdur. Bir funksiya çağırışında parametrləri qeyri-müəyyən etmək üçün parametrləri atmırsınız, ancaq bu yalnız daha kiçik parametr parametrləri göndərmək üçün istifadə oluna bilər, ortada bir parametr buraxa bilməzsiniz.

0
10 февр. Guffa tərəfindən 10 fevralda verilən cavab 2010-02-10 12:41 '10 at 12:41 PM 2010-02-10 12:41

tags ilə bağlı digər suallar və ya bir sual