Pertanyaan Mengapa nol objek dan apa perbedaan antara nol dan tidak terdefinisi?


Kenapa null dianggap sebagai object di JavaScript?

Apakah memeriksa

if ( object == null )
      Do something

sama seperti

if ( !object )
      Do something

?

Dan juga:

Apa perbedaan antara null dan undefined?


819
2018-04-29 05:47


asal


Jawaban:


(name is undefined)

Kamu: apa yang name? (*)
JavaScript:  name? Apa itu name? Aku tidak tahu apa yang kamu bicarakan. Anda belum pernah menyebutkan apapun name sebelum. Apakah Anda melihat bahasa scripting lain di sisi (client-)?

name = null;

Kamu: apa yang name?
JavaScript: Aku tidak tahu.

Pendeknya; undefined adalah di mana tidak ada gagasan tentang hal itu ada; tidak memiliki tipe, dan tidak pernah direferensikan sebelumnya dalam ruang lingkup itu; null adalah tempat benda itu diketahui ada, tetapi tidak diketahui berapa nilainya.

Satu hal yang perlu diingat adalah itu null tidak, secara konseptual, sama seperti false atau "" atau seperti itu, bahkan jika mereka menyamakan setelah pengecoran jenis, yaitu

name = false;

Kamu: apa yang name?
JavaScript: Boolean salah.

name = '';

Kamu: apa yang name?
JavaScript: String kosong


*: name dalam konteks ini dimaksudkan sebagai variabel yang belum pernah didefinisikan. Bisa jadi variabel apa pun yang tidak terdefinisi. Namun, nama adalah properti dari hampir semua elemen bentuk HTML. Ini berjalan jalan, jalan kembali dan dilembagakan dengan baik sebelum id. Ini berguna karena id harus unik tetapi nama tidak harus.


1439
2018-04-29 13:31



Perbedaannya dapat dirangkum ke dalam potongan ini:

alert(typeof(null));      // object
alert(typeof(undefined)); // undefined

alert(null !== undefined) //true
alert(null == undefined)  //true

Memeriksa

object == null berbeda untuk diperiksa if ( !object ).

Yang terakhir sama dengan ! Boolean(object), karena unary ! operator secara otomatis mentransmisikan operan kanan ke Boolean.

Sejak Boolean(null) sama dengan itu !false === true.

Jadi, jika objek Anda tidak nol, tapi  Salah atau 0 atau "", cek akan berlalu karena:

alert(Boolean(null)) //false
alert(Boolean(0))    //false
alert(Boolean(""))   //false

137
2018-04-29 06:44



null aku s bukan obyek, ini adalah sebuah nilai primitif. Misalnya, Anda tidak dapat menambahkan properti ke dalamnya. Terkadang orang salah menganggap bahwa itu adalah objek, karena typeof null kembali "object". Tapi itu sebenarnya bug (yang mungkin bahkan diperbaiki dalam ECMAScript 6).

Perbedaan antara null dan undefined adalah sebagai berikut:

  • undefined: digunakan oleh JavaScript dan berarti "tidak bernilai". Variabel yang tidak diinisialisasi, parameter yang hilang dan variabel yang tidak diketahui memiliki nilai tersebut.

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

    Mengakses variabel yang tidak diketahui, menghasilkan pengecualian:

    > unknownVariable
    ReferenceError: unknownVariable is not defined
    
  • null: digunakan oleh pemrogram untuk menunjukkan "tidak bernilai", mis. sebagai parameter untuk suatu fungsi.

Memeriksa variabel:

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

Sebagai aturan umum, Anda harus selalu menggunakan === dan never == in JavaScript (== performs semua jenis konversi yang dapat menghasilkan hasil yang tidak diharapkan). Ceknya x == null adalah kasus tepi, karena berfungsi untuk keduanya null dan undefined:

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

Cara umum untuk memeriksa apakah suatu variabel memiliki nilai adalah dengan mengubahnya menjadi boolean dan melihat apakah itu benar true. Konversi itu dilakukan oleh if pernyataan dan operator boolean! ("tidak").

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";
}

Kelemahan dari pendekatan ini: Semua nilai berikut dievaluasi menjadi false, jadi Anda harus berhati-hati (misalnya, pemeriksaan di atas tidak dapat membedakan undefined dan 0).

  • undefined, null
  • Booleans: false
  • Angka: +0, -0, NaN
  • String: ""

Anda dapat menguji konversi ke boolean dengan menggunakan Boolean sebagai fungsi (biasanya itu adalah konstruktor, untuk digunakan bersama new):

> Boolean(null)
false
> Boolean("")
false
> Boolean(3-3)
false
> Boolean({})
true
> Boolean([])
true

113
2017-11-01 15:06



Apa perbedaan antara nol dan tidak terdefinisi ??

Sebuah properti ketika tidak memiliki definisi, tidak terdefinisi. null adalah objek. Jenisnya adalah objek. null adalah nilai khusus yang berarti "tidak ada nilai. tidak terdefinisi bukan objek, itu jenis tidak terdefinisi.

Anda dapat mendeklarasikan variabel, setel ke null, dan perilaku identik kecuali bahwa Anda akan melihat "null" dicetak versus "tidak terdefinisi". Anda bahkan dapat membandingkan variabel yang tidak terdefinisi menjadi null atau sebaliknya, dan kondisinya akan benar:

 undefined == null
 null == undefined

Mengacu pada Perbedaan JavaScript antara nol dan tidak terdefinisi untuk lebih detail.

dan dengan yang baru sunting  iya nih

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

saat menguji apakah objek salah, keduanya hanya memenuhi ketentuan saat menguji jika Salah, tetapi tidak saat benar

Cek di sini: Javascript gotcha


23
2018-04-29 05:52



Bagian pertama dari pertanyaan:

Mengapa null dianggap sebagai objek dalam JavaScript?

Ini adalah kesalahan desain JavaScript yang tidak dapat diperbaiki sekarang. Seharusnya jenis nol, bukan objek tipe, atau tidak memilikinya sama sekali. Ini memerlukan pemeriksaan tambahan (kadang-kadang terlupakan) ketika mendeteksi objek nyata dan merupakan sumber bug.

Bagian kedua dari pertanyaan:

Apakah memeriksa


if (object == null) 
Do something 

  sama seperti

if (!object) 
Do something 





Kedua cek selalu salah, kecuali untuk:

  • objek tidak terdefinisi atau null: keduanya benar.

  • objek adalah primitif, dan 0, "", atau salah: periksa dulu salah, benar kedua.

Jika objek itu bukan primitif, tetapi Objek nyata, seperti new Number(0), new String(""), atau new Boolean(false), maka kedua cek itu salah.

Jadi jika 'objek' diartikan sebagai Obyek nyata maka kedua cek selalu sama. Jika primitif diizinkan, maka cek berbeda untuk 0, "", dan salah.

Dalam kasus-kasus seperti object==null, hasil yang tidak jelas bisa menjadi sumber bug. Penggunaan == tidak dianjurkan, gunakan === sebagai gantinya.

Bagian ketiga dari pertanyaan:

Dan juga:

  Apa perbedaan antara nol dan tidak terdefinisi?

Dalam JavaScript, satu perbedaan adalah bahwa nol adalah tipe objek dan tidak terdefinisi adalah tipe tidak terdefinisi.

Di JavaScript, null==undefined adalah benar, dan dianggap sama jika jenisnya diabaikan. Mengapa mereka memutuskan itu, tapi 0, "" dan salah tidak sama, saya tidak tahu. Tampaknya menjadi opini yang sewenang-wenang.

Di JavaScript, null===undefined tidak benar karena jenisnya harus sama ===.

Kenyataannya, nol dan tidak terdefinisi adalah identik, karena keduanya sama-sama tidak ada. Jadi lakukan 0, dan "" dalam hal ini juga, dan mungkin wadah kosong [] dan {}. Begitu banyak jenis yang sama tidak ada resep untuk bug. Satu jenis atau tidak sama sekali lebih baik. Saya akan mencoba menggunakan sesedikit mungkin.

'palsu', 'benar', dan '!' adalah tas cacing lain yang dapat disederhanakan, misalnya, if(!x) dan if(x) sendiri sudah cukup, Anda tidak perlu benar dan salah.

A dideklarasikan var x adalah tipe tidak terdefinisi jika tidak ada nilai yang diberikan, tetapi seharusnya sama jika x tidak pernah dinyatakan sama sekali. Sumber bug lain adalah wadah kosong apa-apa. Jadi yang terbaik adalah menyatakan dan mendefinisikannya bersama, seperti var x=1.

Orang-orang berputar-putar dalam lingkaran mencoba untuk mencari tahu semua jenis tidak ada apa-apa ini, tetapi itu semua sama saja dalam pakaian yang rumit dan berbeda. Kenyataannya adalah

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

Dan mungkin semua harus membuang pengecualian.


18
2017-07-14 22:15



var x = null;

x didefinisikan sebagai null

y tidak didefinisikan; // karena saya tidak mendefinisikannya

if (!x)

null dievaluasi sebagai false


10
2018-04-29 05:56



Satu cara untuk memahami nol dan tidak terdefinisi adalah memahami di mana masing-masing terjadi.

Mengharapkan nilai kembali null dalam situasi berikut:

  • Metode yang menanyakan DOM

    console.log(window.document.getElementById("nonExistentElement"));
    //Prints: null
    
  • Respons JSON diterima dari permintaan Ajax


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

  • Fungsionalitas baru yang berada dalam keadaan fluks. Berikut ini mengembalikan null:


        var proto = Object.getPrototypeOf(Object.getPrototypeOf({}));

       // But this returns undefined:

        Object.getOwnPropertyDescriptor({}, "a");

Semua kasus non-eksistensi lainnya ditandai oleh tidak terdefinisi (seperti dicatat oleh @Axel). Setiap cetakan berikut "tidak terdefinisi":

    var uninitalised;
    console.log(uninitalised);

    var obj = {};
    console.log(obj.nonExistent);

    function missingParam(missing){
        console.log(missing);
    }

    missingParam();

    var arr = [];
    console.log(arr.pop());        

Tentu saja jika Anda memutuskan untuk menulis var unitialised = null; atau mengembalikan null dari metode sendiri maka Anda memiliki nol yang terjadi dalam situasi lain. Tapi itu seharusnya cukup jelas.

Kasus ketiga adalah ketika Anda ingin mengakses variabel tetapi Anda bahkan tidak tahu apakah itu telah dideklarasikan. Untuk itu gunakan typeof untuk menghindari kesalahan referensi:

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

Secara ringkas, periksa nol ketika Anda memanipulasi DOM, berurusan dengan Ajax, atau menggunakan fitur ECMAScript 5 tertentu. Untuk semua kasus lain, aman untuk memeriksa tidak terdefinisi dengan kesetaraan yang ketat:

if(value === undefined){
  // stuff
}

7
2018-05-07 10:06



Perbandingan banyak pemeriksaan null dalam JavaScript:

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

JavaScript Null Check Comparison Chart


7
2018-04-29 15:23



null dan undefined keduanya salah untuk persamaan nilai (null == undefined): keduanya runtuh ke boolean false. Mereka bukan objek yang sama (null! == tidak terdefinisi).

tidak terdefinisi adalah properti dari objek global ("window" di browser), tetapi merupakan tipe primitif dan bukan objek itu sendiri. Ini adalah nilai default untuk variabel terinisialisasi dan fungsi yang berakhir tanpa pernyataan kembali.

null adalah turunan dari Object. null digunakan untuk metode DOM yang mengembalikan objek koleksi untuk menunjukkan hasil kosong, yang memberikan nilai palsu tanpa menunjukkan kesalahan.


6
2018-04-29 05:58