Niyə sıfır obyektdir və sıfır və undefined arasındakı fərq nədir?

Niyə javascript bir object sayılır?

Çeklər

 if ( object == null ) Do something 

eyni

 if ( !object ) Do something 

?

Həmçinin:

nullundefined arasındakı fərq nədir?

792
29 апр. rahul Apr 29 2009-04-29 08:47 '09 da saat 08:47 'da 2009-04-29 08:47
@ 20 cavab
 (name is undefined) 

Siz: name nədir? (*)
JavaScript: name ? Bir name nədir? Nə danışdığınızı bilmirəm. Daha əvvəl heç bir name yazmadın. Yanında (müştəri) başqa bir scripting dilini görürsünüz?

 name = null; 

Siz: name nədir?
JavaScript: Bilmirəm.

Qısacası; bir şeyin anlayışının heç bir undefined yoxdur; onun heç bir növü yoxdur və bu sahədə əvvəllər heç vaxt qeyd edilməmişdir; Bir şey var olduğu bilinməkdə null , ancaq bu dəyərin nə olduğu bilinmir.

Xatırladaq ki, null konstruktiv olaraq false və ya "" eyni deyil, hətta döküm növləridən sonra bərabər olduqda belə, yəni,

 name = false; 

Siz: name nədir?
JavaScript: Boolean yanlış.

 name = ''; 

Siz: name nədir?
JavaScript: Boş simli


*: Bu məzmunda name heç bir zaman təyin olunmayan bir dəyişən deməkdir. Bu dəyişən hər hansı bir dəyişkən ola bilməz. Ancaq adı demək olar ki, hər hansı bir HTML forması elementinin mülkiyyətidir. İrəli gedib id idarəsindən çox əvvəl müəyyən oldu. Bu faydalıdır, çünki identifikatorlar unikal olmalıdır, ancaq adlar olmamalıdır.

1411
29 апр. Cavab 29 Martda Rob tərəfindən verilir. 2009-04-29 16:31 '09 at 16:31 'da 2009-04-29 16:31

Fərq bu snippetdə ümumiləşdirilə bilər:

 alert(typeof(null)); // object alert(typeof(undefined)); // undefined alert(null !== undefined) //true alert(null == undefined) //true 

Yoxlayın

object == null if ( !object ) fərqlidir.

border=0

Sonuncu bərabərdir ! Boolean(object) ! Boolean(object) unary operator kimi ! avtomatik olaraq doğru operandı məntiqi bir şəkildə çevirir.

Boolean(null) yanlış olduğundan, !false === true .

Belə ki, əgər obyektiniz null deyil , yalan və ya 0 və ya "" deyilsə , çek aşağıdakı səbəblərdən baş verəcəkdir:

 alert(Boolean(null)) //false alert(Boolean(0)) //false alert(Boolean("")) //false 
134
29 апр. 29 martda kentaromiura tərəfindən verilən cavab. 2009-04-29 09:44 '09 at 09:44 'da 2009-04-29 09:44

null bir obyekt deyil , ibtidai dəyərdir. Məsələn, bunun üçün xassələri əlavə edə bilməzsiniz. Bəzən insanlar səhvən bu obyektin olduğunu typeof null , çünki typeof null "object" qaytarır. Amma bu, əslində bir səhvdir (ECMAScript 6-da müəyyən edilə bilər).

nullundefined arasındakı fərq aşağıdakı kimidir:

  • undefined : JavaScript istifadə olunur və "dəyər yoxdur" deməkdir. Başsızsız değişkenler, eksik parametreler ve bilinmeyen değişkenler bu değere sahiptir.

     > var noValueYet; > console.log(noValueYet); undefined > function foo(x) { console.log(x) } > foo() undefined > var obj = {}; > console.log(obj.unknownProperty) undefined 

    Bununla belə, bilinməyən dəyişənlərə giriş istisna təşkil edir:

     > unknownVariable ReferenceError: unknownVariable is not defined 
  • null : məsələn, proqramçılar tərəfindən "heç bir dəyər" təyin etmək üçün istifadə olunur. funksiyası üçün parametr kimi.

Bir dəyişənin araşdırılması:

 console.log(typeof unknownVariable === "undefined"); // true var foo; console.log(typeof foo === "undefined"); // true console.log(foo === undefined); // true var bar = null; console.log(bar === null); // true 

Bir qayda olaraq, hər zaman === və heç vaxt == JavaScript-də istifadə etməlisiniz (== gözlənilməz nəticələrə gətirə biləcək hər cür dönüşümləri yerinə yetirir). x == null yoxlama bir qeydiyyatdandır, çünki hər ikisi də nullundefined üçün işləyir:

 > null == null true > undefined == null true 

Bir değişkenin bir değer olup olmadığını kontrol etmenin alışılagelmiş yolu, boolean'a dönüştürmek ve doğru olub olmadığını kontrol etmektir. Bu çevrilməsi bir if operator və bir boolean operator tərəfindən həyata keçirilir! ("Xeyr").

 function foo(param) { if (param) { // ... } } function foo(param) { if (! param) param = "abc"; } function foo(param) { // || returns first operand that can't be converted to false param = param || "abc"; } 

Bu yanaşmanın mənfi cəhəti, aşağıda göstərilən bütün dəyərlərin false qiymətləndirilməsidir, buna görə diqqətli olmalısınız (məsələn, yuxarıdakı çeklər undefined0 fərqlənə bilməz).

  • undefined , null
  • Boolean: false
  • Rəqəmlər: +0 , -0 , NaN
  • Strings: ""

Boolean funksiyasını bir funksiya olaraq istifadə edərək (adətən bu, new istifadə olunacaq olan konstruktur) booleanın dönüşümünü test edə bilərsiniz:

 > Boolean(null) false > Boolean("") false > Boolean(3-3) false > Boolean({}) true > Boolean([]) true 
106
01 нояб. Axel Rauschmayer tərəfindən verilmiş cavab Noyabr 01. 2011-11-01 18:06 '11 'də 18:06' də 2011-11-01 18:06

Sıfır və undefined arasındakı fərq nədir?

Mülkiyyət təsvir edilmədikdə, müəyyən edilməmişdir. null bir obyektdir. Onun növü bir obyektdir. null "dəyərsiz" mənasını verən xüsusi bir dəyərdir. undefined bir obyekt deyil, bu tip müəyyənləşdirilmir.

Bir dəyişən elan edə bilərsiz, onu null olaraq təyin edə bilərsiniz və davranış eynidır, buna görə "null" un "undefined" ilə müqayisə edildiyini görürsünüz. Hatta undefined sıfır və ya əksinə bir dəyişən müqayisə edə bilərsiniz və vəziyyət doğru olacaq:

  undefined == null null == undefined 

Daha ətraflı məlumat üçün, sıfır və undefined arasında javascript fərqinə baxın.

və yeni redaktə bəli ilə

 if (object == null) does mean the same if(!object) 

Test edildikdə, obyektin yalan olduğu təqdirdə, hər ikisi də test edildikdə yalnız səhvdir , əgər səhv olarsa, lakin doğru deyildir

Buradasın: Javascript gotcha

23
29 апр. Cavab TStamper Apr 29 2009-04-29 08:52 '09 saat 08:52 'da 2009-04-29 08:52

Sualın birinci hissəsi:

Niyə javascript bir obyekt sayılır?

Onlar düzəltməyəcək bir JavaScript dizayn hatasıdır. O, obyektin növü deyil, null tip olmalıdır və ya heç olmasa. Bu, real obyektlərin aşkar ediləcəyi və səhvlərin qaynağı olduğunda əlavə yoxlama (bəzən unudulmuş) tələb edir.

Sualın ikinci hissəsi:

Çek yox mu?


if (object == null)
Do something

kimi

if (!object)
Do something

İki çek həmişə yanlışdır:

  • obyekt qeyri-müəyyən və ya null: hər ikisi doğru.

  • obyekt ibtidai və 0, "" və ya yanlışdır: əvvəl bayraq saxta, ikincisi də doğrudur.

Nesne primitiv deyilsə, new Number(0) , new String("") və ya new Boolean(false) real bir obyekt deyilsə, hər ikisi də səhvdir.

Beləliklə, əgər "obyekt" real obyekt kimi şərh olunarsa, hər iki çek həmişə eynidır. İlkaytlar aktiv olduqda, çeklər 0, "" yanlış və fərqlidir.

object==null kimi hallarda qeyri-dəqiq nəticələr səhv mənbəyi ola bilər. İstifadə edin == tövsiyə olunmur, === istifadə edin.

Sualın üçüncü hissəsi:

Həmçinin:

Sıfır və undefined arasındakı fərq nədir?

JavaScript-də bir fərq null bir növün obyektinə malikdir və undefined bir növü müəyyən edilməmişdir.

JavaScript-də, null==undefined doğrudur və növü nəzərə alınmırsa bərabər sayılır. Niyə qərara aldılar, amma 0, "" və yalanlar bərabər deyil, bilmirəm. Bu, özbaşına fikir kimi görünür.

JavaScript-də null===undefined doğru deyil, çünki növü === eyni olmalıdır.

Əslində, null və undefined eyni, çünki hər ikisi qeyri-mövcuddur. Bunun üçün 0 və "" və bəlkə boş konteynerlər []{} . Eyni bir çox növü səhvlər üçün bir resept deyil. Bir növ və ya heç bir şey. Mümkün qədər az istifadə etməyə çalışacağam.

'yanlış', 'doğru' və '!' Bu, if(!x)if(x) kifayət qədər olsa, sadələşdirilə biləcək qurdlar paketidir, həqiqətə və yalana ehtiyac yoxdur.

Bəyan edilmiş var x tipi dəyər müəyyən edilmədikdə müəyyən edilmir, ancaq x heç elan edilməmiş kimi eyni olmalıdır. Səhv başqa bir qayda boş bir konteynerdir. Buna görə də, bəyan etmək və onu birlikdə müəyyən etmək yaxşıdır, məsələn, var x=1 .

Dairələrlə dolu insanlar, bütün bu fərqli növləri anlamağa çalışırlar, lakin bütün bunlar kompleks müxtəlif paltarlarda eynidır. Həqiqət

 undefined===undeclared===null===0===""===[]==={}===nothing 

Bəlkə hər kəs istisnalar atmalıdır.

19
15 июля '11 в 1:15 2011-07-15 01:15 Cavab Anon tərəfindən 15 iyul 2011-ci il saat 11: 00-da 01: 15-də verilir
 var x = null; 

x null kimi müəyyən edilir

y müəyyən deyil; // onu tanımlamadığım üçün

 if (!x) 

null səhv qiymətləndirildi

9
29 апр. Cavab Chad Grant Apr 29 2009-04-29 08:56 '09 da 08:56 'da 2009-04-29 08:56

Javascript-də bir çox müxtəlif sıfır çekləri müqayisə:

http://jsfiddle.net/aaronhoffman/DdRHB/5/

 // Variables to test var myNull = null; var myObject = {}; var myStringEmpty = ""; var myStringWhiteSpace = " "; var myStringHello = "hello"; var myIntZero = 0; var myIntOne = 1; var myBoolTrue = true; var myBoolFalse = false; var myUndefined; ...trim... 

http://aaron-hoffman.blogspot.com/2013/04/javascript-null-checking-undefined-and.html

2019

7
29 апр. Cavab Aaron Hoffman tərəfindən 29 apreldə verilir 2013-04-29 18:23 '13 at 18:23 2013-04-29 18:23

Null və undefined dəyərini anlamaq üçün bir yol onların meydana gəldiyini anlamaqdır.

Aşağıdakı hallarda null qaytarma dəyərini gözləyin:

  • DOM sorgu metodları

     console.log(window.document.getElementById("nonExistentElement")); //Prints: null 
  • Ajax Tələbindən JSON Cavablar

 { name: "Bob", address: null } 
  • RegEx.exec .

  • Bir dəyişiklik halında olan yeni funksionallıq. Aşağıdakı null qaytarır:

 var proto = Object.getPrototypeOf(Object.getPrototypeOf({})); // But this returns undefined: Object.getOwnPropertyDescriptor({}, "a"); 

Qeyri-mövcud olmayan digər hallar simvol ilə müəyyən edilmir (@Axel tərəfindən qeyd olunduğu kimi). Aşağıdakı barmaq izlərinin hər biri "qeyri-müəyyəndir":

  var uninitalised; console.log(uninitalised); var obj = {}; console.log(obj.nonExistent); function missingParam(missing){ console.log(missing); } missingParam(); var arr = []; console.log(arr.pop()); 

Əlbəttə, siz varialised = null yazmağa qərar verərsən; ya da üsuldan özünüzə null qayıdın, onda başqa hallarda sıfırınız var. Ancaq bu olduqca aydın olmalıdır.

Üçüncü hal, dəyişənə daxil olmaq istədiyiniz zaman, ancaq bəyan edilmiş olub-olmadığını bilmir. Bu halda istinad növü səhvlərindən qaçmaq üçün TypeOf istifadə edin:

 if(typeof unknown !== "undefined"){ //use unknown } 

Ajax ilə məşğul olduqda DOM-un idarə olunduğunda və ya bəzi ECMAScript 5 funksiyaları istifadə edərkən null dəyərini qısaca yoxlayın. Bütün digər hallarda ciddi bərabərlik üçün müəyyən edilməməlidir:

 if(value === undefined){ // stuff } 
7
07 мая '12 в 13:06 2012-05-07 13:06 Cavab Noel Abrahams tərəfindən mayın 07-də ​​saat 12: 00-da verilib. 2012-05-07 13:06

null və undefined dəyərlərin bərabərliyi üçün yalançıdır (null == undefined): hər ikisi də boolean yalana minimuma endirilir. Onlar eyni obyekt deyil (null! == undefined).

qeyri-müəyyən bir qlobal obyektin (brauzerlərdə "pəncərə") bir mülkidir, lakin obyektin özü deyil, ibtidai tipdir. Bu, təkrar bəyanatsız başa gələn təkrarlanmayan dəyişənlər və funksiyalar üçün u mənim dəyərdir.

Null bir obyektin nümunəsidir. null, toplama obyektlərinə səhv edilmədən yanlış dəyəri verən boş nəticəni göstərmək üçün qaytarılan DOM metodları üçün istifadə olunur.

6
29 апр. cavab Anonymous 29 apr tərəfindən verilir . 2009-04-29 08:58 '09 saat 08:58 'da 2009-04-29 08:58

null bir obyektdir. Onun növü NULL. undefined bir obyekt deyil; onun növü açıqlanmır.

4
29 апр. Cavab 29 aprelda Vikas tərəfindən verilir. 2009-04-29 08:51 '09 da saat 08:51 'da 2009-04-29 08:51

Bəzi qeydlər:

boş və undefined iki fərqli dəyərlərdir. Onlardan biri ad üçün məna olmadığını, ikincisi isə adın olmamasıdır.


if( o ) aşağıda göstərildiyi kimi if( o ) , if( o )if :

Parantezdəki ifadə o, qiymətləndirilir, sonra isə tipə atırsa, ifadənin məcburi dəyəri parantezdə - bizim vəziyyətimizdə.

JavaScript-də saxta saxtakarlıqlar (saxta dəyərlərə salınacaq): '', null, undefined, 0 və false.

4
30 апр. Apr 30-da Laurent Villeneuve tərəfindən verilmiş cavab 2009-04-30 10:55 '09 at 10:55 'da 2009-04-30 10:55

Cavab əlavə etmək üçün " Bu səhifədəki javascript təsvirindən undefinednull arasında fərq nədir?

undefined bir sistem səviyyəsini, ya da dəyərin yanlış olmamasını və proqram səviyyəsini, normal və ya gözlənilən dəyərsizliyi təmsil etmək üçün null olduğunu düşünə bilərsiniz. Bir dəyişənə və ya əmlaka bu dəyərlərdən birini təyin etmək və ya bu dəyərlərdən bir funksiyaya keçmək lazımdırsa, null demək olar ki, həmişə doğru seçimdir.

4
07 окт. Cavab verilir 太極 者 無極 而 生 07 Oct. 2012-10-07 17:47 '12 at 17:47 2012-10-07 17:47

Aşağıdakı funksiya fərqin nə üçün işləyə biləcəyini göstərir:

 function test() { var myObj = {}; console.log(myObj.myProperty); myObj.myProperty = null; console.log(myObj.myProperty); } 

Zəng etsəniz

 test(); 

Siz almaq

undefined

sıfır

İlk console.log(...) , myObj hələ müəyyən myObj zaman myProperty dən myObj çalışır, buna görə də "undefined" qaytarır. Sıfır dəyəri verildikdən sonra ikinci console.log(...) açıq şəkildə "sıfır" qaytarır, çünki myProperty var, lakin dəyəri null təyin edilir.

Bu fərqi sorgulayabilmek üçün JavaScript nullundefined : Başqa dillərdə null kimi uzun müddətdə, undefined obyekt bir obyekt ola bilməz, çünki heç bir nümunə yoxdur (hətta null nümunə deyil).

1
08 мая '14 в 16:00 2014-05-08 16:00 cavab istifadəçi tərəfindən verilir 3615347 May 8, '14 at 4:00 pm 2014-05-08 16:00

Null haqqında başqa bir əyləncəli şey, müəyyən edilməmişlə müqayisədə, artırıla bilər.

1
10 февр. Tim Scollick tərəfindən 10 Fevralda cavab verildi 2016-02-10 18:45 '16 saat 18:45 'da 2016-02-10 18:45

Məsələn, window.someWeirdProperty müəyyən edilməmişdir

"window.someWeirdProperty === null" yanlış olaraq qiymətləndirilir və

"window.someWeirdProperty === undefined" doğru.

Bundan əlavə, checkif if (!o) if (o == null) yoxlamasına uyğun deyil.

1
29 апр. Piotr Findeisen tərəfindən verilən cavabı Apr 29 2009-04-29 08:55 '09 saat 08:55 'da 2009-04-29 08:55

Nicholas K. Zakas tərəfindən Object Oriented Javascript əsaslarından

Niyə nüvəli nüvəli niyə bir obyekt? (Əslində bu, TC39 tərəfindən hazırlanmış və dəstəkləyən bir komitə tərəfindən səhv olaraq tanınmışdır. "Null" bir obyektin null göstəricisidir, bu isə "obyekt" məntiqi bir qaytarma dəyərini təşkil edir, lakin hələ də qarışıqdır).

Zakas, Nicholas K. (2014-02-07). Nesne yönümlü JavaScript prinsipləri (Kindle locations 226-227). Nişasta mətbuatı yoxdur. Kindle nəşr.

Budur dedi:

 var game = null; //typeof(game) is "object" game.score = 100;//null is not an object, what the heck!? game instanceof Object; //false, so it not an instance but it type is object //let make this primitive variable an object; game = {}; typeof(game);//it is an object game instanceof Object; //true, yay!!! game.score = 100; 

Tanımsız vəziyyət:

 var score; //at this point 'score' is undefined typeof(score); //'undefined' var score.player = "felix"; //'undefined' is not an object score instanceof Object; //false, oh I already knew that. 
0
28 авг. cavab Felix G 28 aug verilir. 2014-08-28 22:49 '14 at 10:49 PM 2014-08-28 22:49

Javascript, null bir object növü deyil, bir primitave növüdür.

Fərq nədir? Undefined müəyyən edilməmiş bir göstərici aiddir. Null , null göstəriciyə aiddir, məsələn əl bir null dəyişən təyin edir

0
28 авг. Cavab AnonDCX 28 aug tərəfindən verilir . 2016-08-28 07:40 '16 'da 7:40' də 2016-08-28 07:40 'də
  • Undefined dəyişən elan edilmişdir deməkdir, lakin ona heç bir dəyəri verilmişdir və Null "dəyərsiz" (Null - tapşırıq operatoru) dəyəri təmsil edən bir dəyişənə təyin edilə bilər,

2.İndefined növü özüdür və Null bir obyektdir.

3. Javascript özü hər hansı bir tanınmayan dəyişənə undefined üçün başlaya bilər, lakin dəyişən null üçün heç vaxt təyin edə bilməz. Bu proqramlı şəkildə edilməlidir.

0
11 марта '16 в 15:27 2016-03-11 15:27 cavab 11 mart '16 'da 15:27 2016-03-11 15:27' a_unknown_spiritə verilir

"Sıfır" haqqında düşünməyə ən yaxşı yoldur, sahənin "heç bir dəyər" olmadığını göstərdiyi məlumat bazalarında oxşar konsepsiyanın necə istifadə edildiyini xatırlamaqdır.

  • Bəli, elementin dəyəri məlumdur; o "müəyyən". Bu başlanıb.
  • Element dəyəri: "dəyər yoxdur".

Daha asanlıqla ayıklanan proqramları yazmaq üçün çox faydalı bir üsuldur. Dəyişən 'undefined' səhv nəticəsində ola bilər ... (necə bilirsiniz?) ... lakin dəyişən "null" dəyəri varsa, bilirsiniz ki, "kimsə bu proqramda bir yerdə" null " Ona görə də dəyişən bir dəyərdən xilas olmaq lazım olduğunda, "silmək" ... onu "null" olaraq təyin edəcəyik. Köhnə dəyər yetim qalacaq və çöp yaxın zamanda toplanacaq, yeni dəyər: "dəyər yoxdur". Hər iki halda, dəyişkən dövlət şübhəsizdir: "Bu, əlbəttə ki, qəsdən, bu şəkildə var."

0
06 янв. Cavab Mike Robinson Jan 06 tərəfindən verilir 2016-01-06 22:47 '16 saat 10:47 'da 2016-01-06 22:47

Buna baxın:

  <script> function f(a){ alert(typeof(a)); if (a==null) alert('null'); a?alert(true):alert(false); } </script> //return: <button onclick="f()">nothing</button> //undefined null false <button onclick="f(null)">null</button> //object null false <button onclick="f('')">empty</button> //string false <button onclick="f(0)">zero</button> //number false <button onclick="f(1)">int</button> //number true <button onclick="f('x')">str</button> //string true 
0
15 июля '17 в 14:43 2017-07-15 14:43 cavab ZPKSoft 15 iyul '14 saat 14:43 'də verilir 2017-07-15 14:43

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