JavaScript-də null birləşdirən operator varmı?

Javascriptda sıfır birləşmə operatoru varmı?

Məsələn, C # -də bunu edə bilərəm:

 String someString = null; var whatIWant = someString ?? "Cookies!"; 

Javascript üçün hesablayacağım ən yaxşı təxminlər şərti operatoru istifadə edir:

 var someString = null; var whatIWant = someString ? someString : 'Cookies!'; 

Bəzi pis IMHO. Daha yaxşı edə bilərəmmi?

1077
24 янв. Daniel Schaffer tərəfindən təyin olunan Jan 24 2009-01-24 21:18 '09 at 21:18 'da 2009-01-24 21:18
@ 10 cavab

JavaScript C # null coalescing ( ?? ) operatoruna bərabər olaraq məntiqi OR ( || ) istifadə olunur:

 var whatIWant = someString || "Cookies!"; 

Davamın C # davranışına uyğun gəlməyəcəyi (aşağıda açıqlanmış) hallar var, lakin bu, JavaScript-də default / alternativ dəyərləri təyin etmək üçün ümumi, dəqiq bir üsuldur.


Təmizləmə

İlk operandın növündən asılı olmayaraq, onu boolean nəticələrə köçürsək, təyinat ikinci operanddan istifadə edəcəkdir. Bütün aşağıdakı hallardan çəkinin:

 alert(Boolean(null)); // false alert(Boolean(undefined)); // false alert(Boolean(0)); // false alert(Boolean("")); // false alert(Boolean("false")); // true -- gotcha! :) 

Bunun anlamı:

 var whatIWant = null || new ShinyObject(); // is a new shiny object var whatIWant = undefined || "well defined"; // is "well defined" var whatIWant = 0 || 42; // is 42 var whatIWant = "" || "a million bucks"; // is "a million bucks" var whatIWant = "false" || "no way"; // is "false" 
1722
24 янв. Cavab Ates Goral tərəfindən 24 yanvarda verildi 2009-01-24 21:25 '09 at 9:25 pm 2009-01-24 21:25
 function coalesce() { var len = arguments.length; for (var i=0; i<len; i++) { if (arguments[i] !== null  arguments[i] !== undefined) { return arguments[i]; } } return null; } var xyz = {}; xyz.val = coalesce(null, undefined, xyz.val, 5); // xyz.val now contains 5 
border=0

bu həll SQL koalisiyası funksiyası kimi işləyir, hər hansı bir arqument çəkir və heç bir dəyəri olmadıqda null qaytarır. C # kimi davranırmı? operator "", "yanlış" və "0" NULL deyil hesab olunur və buna görə də faktiki dəyərlər hesab olunur. Bir .net fonundan gəlsəniz, bu ən təbii həll olacaq.

61
08 марта '14 в 8:24 2014-03-08 08:24 cavab 8 mart 2014-cü il saat 8: 00-da Brent Larsen tərəfindən verilmişdir 2014-03-08 08:24

|| C # üçün əvəz kimi ?? Boş xəttləri və sıfırları udduğundan, vəziyyətinizdə kifayət qədər yaxşı deyil, həmişə öz funksiyasını yaza bilərsiniz:

  function $N(value, ifnull) { if (value === null || value === undefined) return ifnull; return value; } var whatIWant = $N(someString, 'Cookies!'); 
39
24 янв. Cavab 24 yanvarda verilir 2009-01-24 21:45 '09 at 09:45 PM 2009-01-24 21:45

Bəli, tezliklə olacaq. Burada təklificra vəziyyəti baxın .

Belə görünür:

 x ?? y 

bir nümunə

 const response = { settings: { nullValue: null, height: 400, animationDuration: 0, headerText: '', showSplashScreen: false } }; const undefinedValue = response.settings?.undefinedValue ?? 'some other default'; // result: 'some other default' const nullValue = response.settings?.nullValue ?? 'some other default'; // result: 'some other default' const headerText = response.settings?.headerText ?? 'Hello, world!'; // result: '' const animationDuration = response.settings?.animationDuration ?? 300; // result: 0 const showSplashScreen = response.settings?.showSplashScreen ?? true; // result: false 
15
07 мая '18 в 12:32 2018-05-07 12:32 Cavab verilir vaughan 07 May '18 da 12:32 2018-05-07 12:32

Heç kim NaN üçün potensialı xatırlatdı, mənim üçün də - sıfır dəyər. Beləliklə, mən iki faizini əlavə edəcəyimi düşündüm.

Bu kod üçün:

 var a, b = null, c = parseInt('Not a number'), d = 0, e = '', f = 1 ; 

Əgər operatoru || istifadə etməlisiniz İlk etibarsız dəyəri əldə edəcəksiniz:

 var result = a || b || c || d || e || f; // result === 1 

Burada göstərildiyi kimi , tipik birləşmə metodundan istifadə edərsən, mənasını verən c , NaN

 var result = coalesce(a,b,c,d,e,f); // result.toString() === 'NaN' 

Onların heç biri mənim üçün doğru deyil. Məntiqinizdən fərqli ola biləcək birləşmə məntiqinin öz dünyamda, müəyyənsiz, null və NaN hesab edirəm, çünki bunların hamısı null-ish. Beləliklə, d (sıfır) birləşmə metodundan qayıtsın.

Hər hansı bir beyin mənim kimi işləyir və NaN istisna olmaqla, bu üsul bunu edəcək:

 function coalesce() { var i, undefined, arg; for( i=0; i < arguments.length; i++ ) { arg = arguments[i]; if( arg !== null  arg !== undefined  (typeof arg !== 'number' || arg.toString() !== 'NaN') ) { return arg; } } return null; } 

Kodun mümkün qədər qısa müddətdə olmasını istəyənlər üçün bir az aydınlıq verməyin, bunu da @impinball tərəfindən təklif etdiyi kimi istifadə edə bilərsiniz. NaN NaN-yə bərabər olmamaqdan asılıdır. Burada bu haqda daha ətraflı oxuya bilərsiniz: NaN NaN-a niyə uyğun gəlmir?

 function coalesce() { var i, arg; for( i=0; i < arguments.length; i++ ) { arg = arguments[i]; if( arg != null  arg === arg ) { //arg === arg is false for NaN return arg; } } return null; } 
11
27 мая '15 в 0:07 2015-05-27 00:07 Kevin Nelsona 27 May '15 'də 0:07 2015-05-27 00:07 cavab verdi

Hal-hazırda heç bir dəstək yoxdur, lakin JS standartlaşdırma prosesi üzərində işləyir: https://github.com/tc39/proposal-optional-chining

6
17 июля '17 в 0:17 2017-07-17 00:17 cavab 17 iyul 17:17 tarixində 0:17 2017-07-17 00:17 tarixində Elmar Jansen tərəfindən verilmişdir

Javascript üçün null xüsusi tərifdən çəkinin. Javascript-də "dəyərsiz" iki təsəvvür var. 1. Null: bir dəyişən null olduqda, bu onun içindəki məlumatları ehtiva etməməsi deməkdir, lakin dəyişən artıq kodda müəyyənləşdirilir. məsələn:

 var myEmptyValue = 1; myEmptyValue = null; if ( myEmptyValue === null ) { window.alert('it is null'); } // alerts 

bu halda, dəyişəninizin növü bir obyektdir. test edin.

 window.alert(typeof myEmptyValue); // prints Object 
  1. Undefined: dəyişən əvvəlcədən kodda müəyyən edilmədikdə və gözlənildiyi kimi, heç bir dəyəri yoxdur. məsələn:

     if ( myUndefinedValue === undefined ) { window.alert('it is undefined'); } // alerts 

bu halda, dəyişəninizin növü 'undefined' olur.

Qeyd edək ki, növ çevirmə operatorunu (==) istifadə etsəniz, JavaScript bu null dəyərlərin hər ikisi üçün də eyni olacaq. Onları ayırmaq üçün həmişə ciddi müqayisə operatorunu (===) istifadə edin.

4
24 янв. Cavab verilən fəsil 24 yanvar 2009-01-24 21:35 '09 saat 09:35 'da 2009-01-24 21:35

Şərhinizi oxuduqdan sonra, @Ates Goral cavabı JavaScript-də C # -də çıxış etdiyiniz əməliyyatı yerinə yetirmək imkanı verir.

@ Cavab Gumbo null dəyərləri yoxlamaq üçün ən yaxşı yolu təmin edir; Bununla yanaşı == JavaScript == ilə müqayisədə == fərqini qeyd etmək vacibdir, xüsusilə undefined və / və ya null problemləri yoxlamaq üçün gəldikdə.

Buradakı iki cür fərqlə əlaqədar həqiqətən yaxşı bir məqalə var . Əsasən, == əvəzinə == istifadə edin, JavaScript siz müqayisə etdiyiniz dəyərləri birləşdirməyə çalışacaq və bu birləşmədən sonra müqayisənin nəticəsini geri qaytaracaqdır.

3
24 янв. Tom Jan 24- ye cavab verdi 2009-01-24 21:23 '09 saat 09:23 'da 2009-01-24 21:23

Bu sayt C # -dan JS-ə canlı bir dönüşüm təqdim edir və adətən bir anlayış və cavab almaq üçün kömək edir:

https://deck.net/af073126fca87f3d419a8943a19b87c2

0
03 дек. Cavab Justin Farrugia tərəfindən verilir 03 Dekabr. 2018-12-03 12:54 '18 at 12:54 2018-12-03 12:54

Burada elvisin həyata keçirilməsi. Yalnız kök obyekti və zənciri simliya keçin. Zəncirdə həmişə son qeyri-yalan maddəni qaytarır. Həm obyektlər, həm də diziler, üsullar və primitivlər ilə işləyir.

 elvis(myObject, 'categories.shirts[0].color'); 

İş nümunəsi:

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