Bagaimana membedakan antara nilai “4” dengan nilai 4 dalam javascript

Dengan cuplikan JavaScript ini ...

var a;
var b = null;
var c = undefined;
var d = 4;
var e = 'five';

var f = a || b || c || d || e;

alert(f); // 4

Dapatkah seseorang tolong jelaskan kepada saya apa yang disebut teknik ini (tebakan terbaik saya ada pada judul pertanyaan ini!)? Dan bagaimana/mengapa itu bekerja dengan tepat?

Pemahaman saya adalah bahwa variabel f akan diberi nilai terdekat (dari kiri ke kanan) dari variabel pertama yang memiliki nilai yang tidak nol atau tidak terdefinisi, tetapi saya belum berhasil menemukan banyak bahan referensi tentang teknik ini dan telah melihatnya banyak digunakan.

Juga, apakah teknik ini khusus untuk JavaScript? Saya tahu melakukan sesuatu yang serupa di PHP akan menghasilkan f memiliki nilai boolean yang benar, daripada nilai d itu sendiri.

Lihat evaluasi hubung singkat untuk penjelasannya. Ini adalah cara umum untuk menerapkan operator ini; itu tidak unik untuk JavaScript.

Ini dibuat untuk menetapkan nilai default, dalam hal ini nilai y, jika variabel x adalah falsy.

Operator boolean dalam JavaScript dapat mengembalikan operan, dan tidak selalu menghasilkan boolean seperti dalam bahasa lain.

Logical OR operator (||) mengembalikan nilai operan kedua, jika yang pertama salah, jika tidak, nilai operan pertama dikembalikan.

Sebagai contoh:

"foo" || "bar"; // returns "foo"
false || "bar"; // returns "bar"

Falsy nilai adalah mereka yang memaksa ke false ketika digunakan dalam konteks boolean, dan mereka adalah 0, null, undefined, string kosong, NaN dan tentu saja false.

Javacript menggunakan evaluasi hubung singkat untuk operator logis || dan &&. Namun, ini berbeda dengan bahasa lain karena mengembalikan hasil dari nilai terakhir yang menghentikan eksekusi, alih-alih nilai true, atau false.

Nilai-nilai berikut dianggap salah dalam JavaScript.

  • false
  • batal
  • "" (string kosong)
  • Nan
  • undefined

Mengabaikan operator didahulukan aturan, dan menjaga hal-hal sederhana, contoh berikut menunjukkan nilai mana yang menghentikan evaluasi, dan akan dikembalikan sebagai hasilnya.

false || null || "" || 0 || NaN || "Hello" || undefined // "Hello"

5 nilai pertama hingga NaN adalah falsy sehingga semuanya dievaluasi dari kiri ke kanan, hingga memenuhi nilai kebenaran pertama - "Hello" yang membuat seluruh ekspresi benar, sehingga apa pun yang lebih jauh tidak akan dievaluasi, dan "Hello" akan dikembalikan sebagai hasilnya ekspresi. Demikian pula, dalam hal ini:

1 && [] && {} && true && "World" && null && 2010 // null

5 nilai pertama semuanya benar dan dievaluasi sampai memenuhi nilai falsy pertama (null) yang membuat ekspresi salah, jadi 2010 tidak dievaluasi lagi, dan null akan dikembalikan sebagai hasil dari ekspresi.

Contoh yang Anda berikan adalah memanfaatkan properti JavaScript ini untuk melakukan tugas. Ini dapat digunakan di mana saja di mana Anda perlu mendapatkan nilai true atau falsy pertama di antara seperangkat nilai. Kode di bawah ini akan menetapkan nilai "Hello" ke b karena akan membuatnya lebih mudah untuk menetapkan nilai default, daripada melakukan pemeriksaan if-else.

var a = false;
var b = a || "Hello";

Anda dapat menyebut contoh di bawah ini sebagai eksploitasi fitur ini, dan saya percaya ini membuat kode lebih sulit dibaca.

var messages = 0;
var newMessagesText = "You have " + messages + " messages.";
var noNewMessagesText = "Sorry, you have no new messages.";
alert((messages && newMessagesText) || noNewMessagesText);

Di dalam lansiran, kami memeriksa apakah messages salah, dan jika ya, maka evaluasi dan kembalikan noNewMessagesText, jika tidak, evaluasi dan kembalikan newMessagesText. Karena itu salah dalam contoh ini, kami berhenti di noNewMessagesText dan mengingatkan "Sorry, you have no new messages.".

Variabel Javascript tidak diketik, sehingga f dapat diberi nilai integer meskipun telah ditetapkan melalui operator boolean.

f diberi nilai terdekat yaitu tidak setara dengan false. Jadi 0, false, null, undefined, semuanya dilewati:

alert(null || undefined || false || '' || 0 || 4 || 'bar'); // alerts '4'

Tidak ada keajaiban untuk itu. Ekspresi Boolean seperti a || b || c || d malas dievaluasi. Interpeter mencari nilai a, itu tidak terdefinisi sehingga salah sehingga bergerak, kemudian ia melihat b yang nol, yang masih memberikan hasil yang salah sehingga terus bergerak, kemudian ia melihat c - cerita yang sama. Akhirnya ia melihat d dan mengatakan 'ya, ini bukan nol, jadi saya mendapatkan hasil saya' dan menetapkannya ke variabel akhir.

Trik ini akan bekerja dalam semua bahasa dinamis yang melakukan evaluasi hubung singkat ekspresi boolean. Dalam bahasa statis itu tidak akan dikompilasi (ketik kesalahan). Dalam bahasa yang ingin mengevaluasi ekspresi boolean, itu akan mengembalikan nilai logis (yaitu benar dalam kasus ini).

Pertanyaan ini sudah menerima beberapa jawaban bagus.

Singkatnya, teknik ini memanfaatkan fitur bagaimana bahasa dikompilasi. Artinya, JavaScript "sirkuit pendek" evaluasi operator Boolean dan akan mengembalikan nilai yang terkait dengan nilai variabel non-false pertama atau apa pun yang berisi variabel terakhir. Lihat penjelasan Anurag tentang nilai-nilai yang akan dinilai salah.

Menggunakan teknik ini bukan praktik yang baik karena beberapa alasan; namun.

  1. Keterbacaan Kode: Ini menggunakan operator Boolean, dan jika perilaku bagaimana kompilasi ini tidak dipahami, maka hasil yang diharapkan akan menjadi nilai Boolean.
  2. Stabilitas: Ini menggunakan fitur bagaimana bahasa dikompilasi yang tidak konsisten di beberapa bahasa, dan karena ini adalah sesuatu yang berpotensi ditargetkan untuk perubahan di masa depan.
  3. Fitur yang Didokumentasikan: Ada alternatif yang ada yang memenuhi kebutuhan ini dan konsisten di lebih banyak bahasa. Ini akan menjadi operator ternary:

    ()? nilai 1: Nilai 2.

Menggunakan operator ternary memang membutuhkan pengetikan yang lebih sedikit, tetapi ia dengan jelas membedakan antara ekspresi Boolean yang dievaluasi dan nilai yang diberikan. Selain itu dapat dirantai, sehingga jenis tugas default yang dilakukan di atas dapat diciptakan kembali.

var a;
var b = null;
var c = undefined;
var d = 4;
var e = 'five';

var f =  ( a ) ? a : 
                ( b ) ? b :
                       ( c ) ? c :
                              ( d ) ? d :
                                      e;

alert(f); // 4

Pengembalian output nilai true pertama.

Jika semuanya false, kembalikan nilai false terakhir.

Contoh:-

  null || undefined || false || 0 || 'Apple'  // Return Apple

Ini mengatur variabel baru (z) menjadi nilai x jika "benar" (bukan nol, objek/array/fungsi yang valid/apa pun itu) atau y jika tidak. Ini adalah cara yang relatif umum untuk memberikan nilai default jika x tidak ada.

Misalnya, jika Anda memiliki fungsi yang mengambil parameter panggilan balik opsional, Anda bisa memberikan panggilan balik default yang tidak melakukan apa-apa:

function doSomething(data, callback) {
    callback = callback || function() {};
    // do stuff with data
    callback(); // callback will always exist
}

Ini disebut operator hubung singkat.

Evaluasi hubung singkat mengatakan, argumen kedua dieksekusi atau dievaluasi hanya jika argumen pertama tidak cukup untuk menentukan nilai ekspresi. ketika argumen pertama dari fungsi OR (||) dievaluasi menjadi true, nilai keseluruhan harus benar.

Ini juga dapat digunakan untuk menetapkan nilai default untuk argumen fungsi.`

function theSameOldFoo(name){ 
  name = name || 'Bar' ;
  console.log("My best friend's name is " + name);
}
theSameOldFoo();  // My best friend's name is Bar
theSameOldFoo('Bhaskar');  // My best friend's name is Bhaskar`

Ini berarti bahwa jika x diset, nilai untuk z akan menjadi x, jika tidak jika y diatur maka nilainya akan ditetapkan sebagai nilai z.

itu sama dengan

if(x)
  z = x;
else
  z = y;

Itu dimungkinkan karena operator logis dalam JavaScript tidak mengembalikan nilai boolean tetapi nilai elemen terakhir yang diperlukan untuk menyelesaikan operasi (dalam kalimat OR akan menjadi nilai non-salah pertama, dalam kalimat DAN itu akan menjadi yang terakhir). Jika operasi gagal, maka false dikembalikan.

Ini akan mengevaluasi X dan, jika X bukan nol, string kosong, atau 0 (false false), maka akan menetapkannya ke z. Jika X adalah null, string kosong, atau 0 (false false), maka itu akan menetapkan y ke z.

var x = '';
var y = 'bob';
var z = x || y;
alert(z);

Akan menampilkan 'bob';

Menurut Blog Bill Higgins ; Javascript logical OR idiom assignment (Feb. 2007), perilaku ini berlaku pada v1.2 (setidaknya)

Dia juga menyarankan penggunaan lain untuk itu (dikutip): " normalisasi ringan perbedaan lintas-browser "

// determine upon which element a Javascript event (e) occurred
var target = /*w3c*/ e.target || /*IE*/ e.srcElement;

Bagaimana operator === Membandingkan dua nilai?

Operator === mampu membandingkan nilai dan tipe datanya secara bersamaan. Hasil perbandingan akan bernilai TRUE jika misal kedua nilai yang dibandingkan bernilai sama serta mempunyai tipe data yang sama. Berikut contoh kode Javascript-nya.

Apa perbedaan antara == dan ===?

== Berfungsi untuk membandingkan 2 variabel atau lebih tanda memperhatika jenis nilainya. === berfungsi untuk membandingkan 2 variabel atau lebih dengan memperhatikan jenis nilainya.

Apa Perbedaan == dua simbol sama dengan dengan === tiga simbol sama dengan?

Apa perbedaan == (dua simbol samadengan) dengan === (tiga simbol samadengan)? Perbandingan dengan menggunakan simbol == hanya akan membandingkan nilai saja. Sedangkan yang menggunakan === akan membandingkan dengan tipe data juga.

Bagaimana cara penggunaan variabel pada javascript?

Ada beberapa aturan penulisan variabel dalam Javascript:.
Penamaan variabel tidak boleh menggunakan angka di depannya. contoh: ... .
Penamaan variabel boleh menggunakan awal underscore. ... .
Penamaan variabel dianjurkan menggunakan camelCase apabila tediri dari dua suku kata. ... .
Penamaan variabel dianjurkan menggunakan bahasa inggris..