Mengapa kata kunci ini tidak ditentukan dalam javascript?

Sebagian besar bahasa modern seperti Ruby, Python, atau Java memiliki satu nilai nol (

javascript

typeof undefined === 'undefined'; // => true

5 atau

javascript

typeof undefined === 'undefined'; // => true

6), yang tampaknya merupakan pendekatan yang masuk akal

Tetapi JavaScript berbeda

javascript

typeof undefined === 'undefined'; // => true

6, tetapi juga

javascript

typeof undefined === 'undefined'; // => true

8, mewakili nilai kosong dalam JavaScript. Jadi apa perbedaan yang tepat di antara mereka?

Jawaban singkatnya adalah bahwa juru bahasa JavaScript mengembalikan

javascript

typeof undefined === 'undefined'; // => true

8 saat mengakses properti variabel atau objek yang belum diinisialisasi. Sebagai contoh

javascript

let company;

company; // => undefined

let person = { name: 'John Smith' };

person.age; // => undefined

Di sisi lain,

javascript

typeof undefined === 'undefined'; // => true

_6 mewakili referensi objek yang hilang. JavaScript tidak menginisialisasi variabel atau properti objek dengan

javascript

typeof undefined === 'undefined'; // => true

6

Beberapa metode asli seperti

javascript

let nothing;

typeof nothing === 'undefined'; // => true

2 dapat mengembalikan

javascript

typeof undefined === 'undefined'; // => true

6 untuk menunjukkan objek yang hilang. Lihatlah sampelnya

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

Karena JavaScript permisif, pengembang tergoda untuk mengakses nilai yang tidak diinisialisasi. Saya bersalah atas praktik buruk seperti itu juga

Seringkali tindakan berisiko tersebut menghasilkan

javascript

typeof undefined === 'undefined'; // => true

8 kesalahan terkait

  • javascript

    let nothing;

    typeof nothing === 'undefined'; // => true

    _5
  • javascript

    let nothing;

    typeof nothing === 'undefined'; // => true

    _6
  • dan kesalahan jenis yang sama

Pengembang JavaScript dapat memahami ironi lelucon ini

javascript

function undefined() {

// problem solved

}

Untuk mengurangi kesalahan tersebut, Anda harus memahami kasus ketika

javascript

typeof undefined === 'undefined'; // => true

8 dihasilkan. Mari jelajahi

javascript

typeof undefined === 'undefined'; // => true

_8 dan pengaruhnya terhadap keamanan kode

Daftar isi

1. Apa yang tidak terdefinisi

JavaScript memiliki 6 tipe primitif

  • Boolean.

    javascript

    let nothing;

    typeof nothing === 'undefined'; // => true

    _9 atau

    javascript

    let myVariable;

    myVariable; // => undefined

    0
  • Nomor.

    javascript

    let myVariable;

    myVariable; // => undefined

    1,

    javascript

    let myVariable;

    myVariable; // => undefined

    2,

    javascript

    let myVariable;

    myVariable; // => undefined

    3
  • Rangkaian.

    javascript

    let myVariable;

    myVariable; // => undefined

    _4
  • Simbol.

    javascript

    let myVariable;

    myVariable; // => undefined

    _5 (mulai ES2015)
  • Batal.

    javascript

    typeof undefined === 'undefined'; // => true

    _6
  • Belum diartikan.

    javascript

    typeof undefined === 'undefined'; // => true

    _8

Dan jenis objek yang terpisah.

javascript

let myVariable;

myVariable; // => undefined

8,

javascript

let myVariable;

myVariable; // => undefined

9

Dari 6 tipe primitif

javascript

typeof undefined === 'undefined'; // => true

_8 adalah nilai khusus dengan tipenya sendiri Tidak terdefinisi. Berdasarkan

Nilai primitif nilai tidak terdefinisi digunakan ketika variabel belum diberi nilai

Standar dengan jelas mendefinisikan bahwa Anda akan menerima

javascript

typeof undefined === 'undefined'; // => true

8 saat mengakses variabel yang tidak diinisialisasi, properti objek yang tidak ada, elemen array yang tidak ada, dan sejenisnya

Beberapa contoh

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

Contoh di atas menunjukkan bahwa mengakses

  • variabel yang tidak diinisialisasi

    javascript

    function isPalindrome(word) {

    const length = word.length;

    const half = Math.floor(length / 2);

    for (let index = 0; index < half; index++) {

    if (word[index] !== word[length - index - 1]) {

    return false;

    }

    }

    return true;

    }

    isPalindrome('madam'); // => true

    isPalindrome('hello'); // => false

    2
  • properti objek yang tidak ada

    javascript

    function isPalindrome(word) {

    const length = word.length;

    const half = Math.floor(length / 2);

    for (let index = 0; index < half; index++) {

    if (word[index] !== word[length - index - 1]) {

    return false;

    }

    }

    return true;

    }

    isPalindrome('madam'); // => true

    isPalindrome('hello'); // => false

    3
  • atau elemen larik yang tidak ada

    javascript

    function isPalindrome(word) {

    const length = word.length;

    const half = Math.floor(length / 2);

    for (let index = 0; index < half; index++) {

    if (word[index] !== word[length - index - 1]) {

    return false;

    }

    }

    return true;

    }

    isPalindrome('madam'); // => true

    isPalindrome('hello'); // => false

    4

dievaluasi menjadi

javascript

typeof undefined === 'undefined'; // => true

8

Spesifikasi ECMAScript menentukan jenis nilai

javascript

typeof undefined === 'undefined'; // => true

8

Jenis yang tidak terdefinisi adalah jenis yang nilai tunggalnya adalah nilai

javascript

typeof undefined === 'undefined'; // => true

8

Dalam pengertian ini, operator

javascript

function isPalindrome(word) {

const length = word.length;

const half = Math.floor(length / 2);

for (let index = 0; index < half; index++) {

if (word[index] !== word[length - index - 1]) {

return false;

}

}

return true;

}

isPalindrome('madam'); // => true

isPalindrome('hello'); // => false

_8 mengembalikan string

javascript

function isPalindrome(word) {

const length = word.length;

const half = Math.floor(length / 2);

for (let index = 0; index < half; index++) {

if (word[index] !== word[length - index - 1]) {

return false;

}

}

return true;

}

isPalindrome('madam'); // => true

isPalindrome('hello'); // => false

9 untuk nilai

javascript

typeof undefined === 'undefined'; // => true

8

javascript

typeof undefined === 'undefined'; // => true

Tentu saja

javascript

function isPalindrome(word) {

const length = word.length;

const half = Math.floor(length / 2);

for (let index = 0; index < half; index++) {

if (word[index] !== word[length - index - 1]) {

return false;

}

}

return true;

}

isPalindrome('madam'); // => true

isPalindrome('hello'); // => false

8 berfungsi dengan baik untuk memverifikasi apakah suatu variabel berisi nilai

javascript

typeof undefined === 'undefined'; // => true

8

javascript

let nothing;

typeof nothing === 'undefined'; // => true

_

2. Skenario yang membuat tidak terdefinisi

2. 1 Variabel yang tidak diinisialisasi

Variabel yang dideklarasikan tetapi belum ditetapkan dengan nilai (tidak diinisialisasi) secara default adalah

javascript

typeof undefined === 'undefined'; // => true

8

Polos dan sederhana

javascript

let myVariable;

myVariable; // => undefined

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

_4 dideklarasikan dan belum diberi nilai. Mengakses variabel mengevaluasi ke

javascript

typeof undefined === 'undefined'; // => true

8

Pendekatan yang efisien untuk memecahkan masalah variabel yang tidak diinisialisasi adalah bila memungkinkan dengan menetapkan nilai awal. Semakin sedikit variabel yang ada dalam keadaan tidak diinisialisasi, semakin baik

Idealnya, Anda akan menetapkan nilai segera setelah deklarasi

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

6. Tapi itu tidak selalu memungkinkan

Kiat 1. Pilih

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

7, jika tidak, gunakan

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

8, tetapi ucapkan selamat tinggal pada

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

9

Menurut pendapat saya, salah satu fitur terbaik ECMAScript 2015 adalah cara baru untuk mendeklarasikan variabel menggunakan

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

7 dan

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

8. Ini adalah langkah maju yang besar

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

7 dan

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

8 adalah cakupan blok (berlawanan dengan cakupan fungsi yang lebih lama

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

9) dan ada di baris deklarasi sampai

Saya merekomendasikan variabel

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

_7 ketika nilainya tidak akan berubah. Itu menciptakan ikatan yang tidak dapat diubah

Salah satu fitur bagus dari

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

_7 adalah Anda harus menetapkan nilai awal ke variabel

javascript

function bigFunction() {

// code...

myVariable; // => Throws 'ReferenceError: myVariable is not defined'

// code...

let myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

7. Variabel tidak terpapar ke keadaan yang tidak diinisialisasi dan mengakses

javascript

typeof undefined === 'undefined'; // => true

8 tidak mungkin

Mari kita periksa fungsi yang memverifikasi apakah suatu kata adalah palindrom

javascript

function isPalindrome(word) {

const length = word.length;

const half = Math.floor(length / 2);

for (let index = 0; index < half; index++) {

if (word[index] !== word[length - index - 1]) {

return false;

}

}

return true;

}

isPalindrome('madam'); // => true

isPalindrome('hello'); // => false

javascript

function bigFunction() {

// code...

myVariable; // => Throws 'ReferenceError: myVariable is not defined'

// code...

let myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

9 dan

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

00 variabel ditugaskan dengan nilai sekali. Tampaknya masuk akal untuk mendeklarasikannya sebagai

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

7 karena variabel ini tidak akan berubah

Gunakan deklarasi

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

_8 untuk variabel yang nilainya dapat berubah. Kapan pun memungkinkan, tetapkan nilai awal segera, mis. g.

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_03

Bagaimana dengan sekolah lama

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

_9?

Mengapa kata kunci ini tidak ditentukan dalam javascript?

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

_9 masalah deklarasi berada dalam lingkup fungsi. Anda dapat mendeklarasikan variabel

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

_9 di suatu tempat di akhir cakupan fungsi, tetapi tetap saja, Anda dapat mengaksesnya sebelum deklarasi. dan Anda akan mendapatkan

javascript

typeof undefined === 'undefined'; // => true

_8

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

_4 dapat diakses dan berisi

javascript

typeof undefined === 'undefined'; // => true

8 bahkan sebelum baris deklarasi.

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_10

Sebaliknya, variabel

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

_7 atau

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

8 tidak dapat diakses sebelum baris deklarasi — variabel berada di sebelum deklarasi. Dan itu bagus karena Anda memiliki lebih sedikit kesempatan untuk mengakses

javascript

typeof undefined === 'undefined'; // => true

8

Contoh di atas diperbarui dengan

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

_8 (bukan

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

9) melempar

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

16 karena variabel di zona mati temporal tidak dapat diakses

javascript

function bigFunction() {

// code...

myVariable; // => Throws 'ReferenceError: myVariable is not defined'

// code...

let myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

Mendorong penggunaan

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

_7 untuk pengikatan yang tidak dapat diubah atau

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

8 memastikan praktik yang mengurangi munculnya variabel yang tidak diinisialisasi

Kiat 2. Meningkatkan kohesi

Kohesi mencirikan sejauh mana elemen-elemen modul (ruang nama, kelas, metode, blok kode) dimiliki bersama. Kohesi bisa tinggi atau rendah

Modul kohesi tinggi lebih disukai karena elemen-elemen dari modul semacam itu hanya berfokus pada satu tugas. Itu membuat modul

  • Fokus dan dapat dimengerti. lebih mudah untuk memahami apa modul tidak
  • Dapat dipertahankan dan lebih mudah untuk di-refactor. perubahan modul mempengaruhi lebih sedikit modul
  • Dapat digunakan kembali. difokuskan pada satu tugas, itu membuat modul lebih mudah untuk digunakan kembali
  • Dapat diuji. Anda akan lebih mudah menguji modul yang berfokus pada satu tugas

Mengapa kata kunci ini tidak ditentukan dalam javascript?

Kohesi tinggi disertai kopling longgar adalah karakteristik dari sistem yang dirancang dengan baik

Blok kode dapat dianggap sebagai modul kecil. Untuk mendapatkan manfaat dari kohesi tinggi, pertahankan variabel sedekat mungkin dengan blok kode yang menggunakannya

Misalnya, jika variabel hanya ada untuk membentuk logika cakupan blok, maka deklarasikan dan buat variabel hidup hanya di dalam blok itu (menggunakan deklarasi

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

7 atau

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

8). Jangan paparkan variabel ini ke lingkup blok luar, karena blok luar seharusnya tidak peduli dengan variabel ini

Salah satu contoh klasik dari perpanjangan umur variabel yang tidak perlu adalah penggunaan

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

21 siklus di dalam suatu fungsi

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_0

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_22,

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

23 dan

javascript

function bigFunction() {

// code...

myVariable; // => Throws 'ReferenceError: myVariable is not defined'

// code...

let myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

9 variabel dideklarasikan di awal badan fungsi. Namun, mereka hanya digunakan menjelang akhir. Apa masalahnya dengan pendekatan ini?

Antara deklarasi di atas dan penggunaan dalam pernyataan

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

21 variabel

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

22,

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

23 tidak diinisialisasi dan diekspos ke

javascript

typeof undefined === 'undefined'; // => true

8. Mereka memiliki siklus hidup yang sangat panjang di seluruh cakupan fungsi

Pendekatan yang lebih baik adalah memindahkan variabel-variabel ini sedekat mungkin ke tempat penggunaannya

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_1

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_22 dan

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

23 variabel hanya ada dalam lingkup blok pernyataan

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

21. Mereka tidak memiliki arti di luar ________10______21

javascript

function bigFunction() {

// code...

myVariable; // => Throws 'ReferenceError: myVariable is not defined'

// code...

let myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

9 variabel dideklarasikan dekat dengan sumber penggunaannya juga

Mengapa versi modifikasi lebih baik dari versi awal?

  • Variabel tidak terpapar ke keadaan tidak diinisialisasi, sehingga Anda tidak berisiko mengakses

    javascript

    typeof undefined === 'undefined'; // => true

    8
  • Memindahkan variabel sedekat mungkin ke tempat penggunaannya meningkatkan keterbacaan kode
  • Potongan kode kohesif yang tinggi lebih mudah untuk direfaktorisasi dan diekstraksi menjadi fungsi terpisah, jika perlu

2. 2 Mengakses properti yang tidak ada

Saat mengakses properti objek yang tidak ada, JavaScript mengembalikan

javascript

typeof undefined === 'undefined'; // => true

8

Mari kita tunjukkan itu dalam sebuah contoh

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_2

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_36 adalah objek dengan properti tunggal

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

37. Mengakses properti yang tidak ada

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_38 menggunakan pengakses properti

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

39 dievaluasi menjadi

javascript

typeof undefined === 'undefined'; // => true

8

Mengakses properti yang tidak ada tidak menimbulkan kesalahan. Masalah muncul saat mencoba mendapatkan data dari properti yang tidak ada, yang merupakan jebakan

javascript

typeof undefined === 'undefined'; // => true

8 yang paling umum, tercermin dalam pesan kesalahan terkenal

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

42

Mari sedikit memodifikasi cuplikan kode sebelumnya untuk mengilustrasikan lemparan

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

43

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_3

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_36 tidak memiliki properti

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

38, jadi

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

39 dievaluasi menjadi

javascript

typeof undefined === 'undefined'; // => true

8

Akibatnya, mengakses item pertama dari nilai

javascript

typeof undefined === 'undefined'; // => true

8 menggunakan ekspresi

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

49 melempar

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

43

Sifat permisif JavaScript yang memungkinkan mengakses properti yang tidak ada adalah sumber nondeterminisme. properti dapat diatur atau tidak. Cara yang baik untuk melewati masalah ini adalah membatasi objek untuk selalu menentukan properti yang dimilikinya

Sayangnya, seringkali Anda tidak memiliki kendali atas objek tersebut. Objek tersebut mungkin memiliki kumpulan properti yang berbeda dalam berbagai skenario. Jadi, Anda harus menangani semua skenario ini secara manual

Mari terapkan fungsi

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

51 yang menambahkan di awal dan/atau di akhir array elemen baru.

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_52 parameter menerima objek dengan properti

  • javascript

    let array = null;

    array; // => null

    let movie = { name: 'Starship Troopers', musicBy: null };

    movie.musicBy; // => null

    'abc'.match(/[0-9]/); // => null

    _53. elemen disisipkan di awal

    javascript

    let array = null;

    array; // => null

    let movie = { name: 'Starship Troopers', musicBy: null };

    movie.musicBy; // => null

    'abc'.match(/[0-9]/); // => null

    _54
  • javascript

    let array = null;

    array; // => null

    let movie = { name: 'Starship Troopers', musicBy: null };

    movie.musicBy; // => null

    'abc'.match(/[0-9]/); // => null

    _55. elemen disisipkan di akhir

    javascript

    let array = null;

    array; // => null

    let movie = { name: 'Starship Troopers', musicBy: null };

    movie.musicBy; // => null

    'abc'.match(/[0-9]/); // => null

    _54

Fungsi mengembalikan instance array baru, tanpa mengubah array asli

Versi pertama

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_57, agak naif, mungkin terlihat seperti ini

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_4

Karena

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_52 objek dapat menghilangkan

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

53 atau

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

55 properti, wajib untuk memverifikasi apakah properti ini ada di

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

52

Pengakses properti mengevaluasi ke

javascript

typeof undefined === 'undefined'; // => true

8 jika properti tidak ada. Godaan pertama untuk memeriksa apakah ada properti

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_53 atau

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

55 adalah memverifikasinya terhadap

javascript

typeof undefined === 'undefined'; // => true

8. Ini dilakukan dalam persyaratan

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_66 dan

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

67

Tidak terlalu cepat. Pendekatan ini memiliki kelemahan.

javascript

typeof undefined === 'undefined'; // => true

8, serta

javascript

let myVariable;

myVariable; // => undefined

0,

javascript

typeof undefined === 'undefined'; // => true

6,

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

71,

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

72 dan

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

73 adalah nilai palsu

Dalam implementasi

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_57 saat ini, fungsi tidak mengizinkan untuk memasukkan elemen palsu

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_5

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_71 dan

javascript

let myVariable;

myVariable; // => undefined

0 salah. Karena

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_66 dan

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

67 sebenarnya dibandingkan dengan falsy, elemen ini tidak dimasukkan ke dalam array. Fungsi mengembalikan array awal

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_79 tanpa modifikasi, bukan

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

80 yang diharapkan

Tips berikut menjelaskan cara mengecek keberadaan properti dengan benar

Kiat 3. Periksa keberadaan properti

Untungnya, JavaScript menawarkan banyak cara untuk menentukan apakah objek tersebut memiliki properti tertentu

  • javascript

    let array = null;

    array; // => null

    let movie = { name: 'Starship Troopers', musicBy: null };

    movie.musicBy; // => null

    'abc'.match(/[0-9]/); // => null

    _81. bandingkan dengan

    javascript

    typeof undefined === 'undefined'; // => true

    _8 secara langsung
  • javascript

    let array = null;

    array; // => null

    let movie = { name: 'Starship Troopers', musicBy: null };

    movie.musicBy; // => null

    'abc'.match(/[0-9]/); // => null

    _83. memverifikasi jenis nilai properti
  • javascript

    let array = null;

    array; // => null

    let movie = { name: 'Starship Troopers', musicBy: null };

    movie.musicBy; // => null

    'abc'.match(/[0-9]/); // => null

    _84. verifikasi apakah objek memiliki properti sendiri
  • javascript

    let array = null;

    array; // => null

    let movie = { name: 'Starship Troopers', musicBy: null };

    movie.musicBy; // => null

    'abc'.match(/[0-9]/); // => null

    _85. verifikasi apakah objek memiliki properti sendiri atau diwariskan

Rekomendasi saya adalah menggunakan

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_86 operator. Ini memiliki sintaks yang pendek dan manis.

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_86 kehadiran operator menyarankan maksud yang jelas untuk memeriksa apakah suatu objek memiliki properti tertentu, tanpa mengakses nilai properti yang sebenarnya

Mengapa kata kunci ini tidak ditentukan dalam javascript?

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_84 adalah solusi yang bagus juga. Ini sedikit lebih lama dari

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

86 operator dan memverifikasi hanya di properti objek itu sendiri

Mari tingkatkan fungsi

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_51 menggunakan operator

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

86

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_6

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_92 (dan

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

93) adalah

javascript

let nothing;

typeof nothing === 'undefined'; // => true

9 apakah properti yang sesuai ada,

javascript

let myVariable;

myVariable; // => undefined

0 jika tidak

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_86 operator memperbaiki masalah dengan memasukkan elemen palsu

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

71 dan

javascript

let myVariable;

myVariable; // => undefined

0. Sekarang, menambahkan elemen ini di awal dan akhir

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

79 menghasilkan hasil yang diharapkan

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

80

Kiat 4. Destrukturisasi untuk mengakses properti objek

Saat mengakses properti objek, terkadang perlu menetapkan nilai default jika properti tidak ada

Anda dapat menggunakan

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_86 disertai dengan operator ternary untuk melakukannya

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_7

Sintaks operator ternary menjadi menakutkan ketika jumlah properti yang diperiksa bertambah. Untuk setiap properti, Anda harus membuat baris kode baru untuk menangani default, menambah tembok jelek dari operator ternary yang mirip

Untuk menggunakan pendekatan yang lebih elegan, mari kenali fitur ES2015 hebat yang disebut penghancuran objek

Penghancuran objek memungkinkan ekstraksi sebaris dari nilai properti objek secara langsung ke dalam variabel dan menyetel nilai default jika properti tidak ada. Sintaks yang nyaman untuk menghindari berurusan langsung dengan

javascript

typeof undefined === 'undefined'; // => true

8

Memang, ekstraksi properti sekarang tepat

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_8

Untuk melihat hal-hal dalam tindakan, mari kita definisikan fungsi berguna yang membungkus string dalam tanda kutip

javascript

function undefined() {

// problem solved

}

_03 menerima argumen pertama sebagai string yang akan dibungkus. Argumen kedua

javascript

function undefined() {

// problem solved

}

_04 adalah objek dengan properti

  • javascript

    function undefined() {

    // problem solved

    }

    _05. kutipan char, e. g.

    javascript

    function undefined() {

    // problem solved

    }

    _06 (kutip tunggal) atau

    javascript

    function undefined() {

    // problem solved

    }

    07 (kutip ganda). Default ke

    javascript

    function undefined() {

    // problem solved

    }

    _07
  • javascript

    function undefined() {

    // problem solved

    }

    _09. nilai boolean untuk melewati kutipan jika string sudah dikutip. Default ke

    javascript

    let nothing;

    typeof nothing === 'undefined'; // => true

    _9

Menerapkan manfaat dari penghancuran objek, mari terapkan

javascript

function undefined() {

// problem solved

}

11

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

_9

javascript

function undefined() {

// problem solved

}

_12 penugasan destrukturisasi dalam satu baris mengekstrak properti

javascript

function undefined() {

// problem solved

}

05 dan

javascript

function undefined() {

// problem solved

}

09 dari objek

javascript

function undefined() {

// problem solved

}

04
Jika beberapa properti tidak ada di objek

javascript

function undefined() {

// problem solved

}

_04, tugas penghancuran menetapkan nilai default.

javascript

function undefined() {

// problem solved

}

_17 untuk

javascript

function undefined() {

// problem solved

}

05 dan

javascript

let myVariable;

myVariable; // => undefined

0 untuk

javascript

function undefined() {

// problem solved

}

09

Untungnya, fungsinya masih memiliki ruang untuk perbaikan

Mari pindahkan tugas penghancuran ke bagian parameter. Dan atur nilai default (objek kosong

javascript

function undefined() {

// problem solved

}

21) untuk parameter

javascript

function undefined() {

// problem solved

}

04, untuk melewati argumen kedua saat pengaturan default sudah cukup

javascript

function undefined() {

// problem solved

}

_0

Tugas penghancuran menggantikan parameter

javascript

function undefined() {

// problem solved

}

04 dalam tanda tangan fungsi. aku suka itu.

javascript

function undefined() {

// problem solved

}

_11 menjadi satu baris lebih pendek

javascript

function undefined() {

// problem solved

}

_25 di sisi kanan tugas penghancuran memastikan bahwa objek kosong digunakan jika argumen kedua tidak ditentukan sama sekali

javascript

function undefined() {

// problem solved

}

26

Penghancuran objek adalah fitur canggih yang menangani ekstraksi properti dari objek secara efisien. Saya suka kemungkinan untuk menentukan nilai default yang akan dikembalikan ketika properti yang diakses tidak ada. Akibatnya, Anda menghindari

javascript

typeof undefined === 'undefined'; // => true

_8 dan kerumitan di sekitarnya

Kiat 5. Isi objek dengan properti default

Jika tidak perlu membuat variabel untuk setiap properti, seperti yang dilakukan tugas penghancuran, objek yang melewatkan beberapa properti dapat diisi dengan nilai default

ES2015

javascript

function undefined() {

// problem solved

}

_28 menyalin nilai dari semua properti yang dapat dihitung sendiri dari satu atau lebih objek sumber ke objek target. Fungsi mengembalikan objek target

Misalnya, Anda perlu mengakses properti dari objek

javascript

function undefined() {

// problem solved

}

29 yang tidak selalu berisi kumpulan properti lengkapnya

Untuk menghindari

javascript

typeof undefined === 'undefined'; // => true

_8 saat mengakses properti yang tidak ada dari

javascript

function undefined() {

// problem solved

}

29, mari lakukan beberapa penyesuaian

  • Tentukan objek

    javascript

    function undefined() {

    // problem solved

    }

    _32 yang menyimpan nilai properti default
  • Panggil

    javascript

    function undefined() {

    // problem solved

    }

    _33 untuk membuat objek baru

    javascript

    function undefined() {

    // problem solved

    }

    34. Objek baru menerima semua properti dari

    javascript

    function undefined() {

    // problem solved

    }

    29, tetapi yang hilang diambil dari

    javascript

    function undefined() {

    // problem solved

    }

    32

javascript

function undefined() {

// problem solved

}

_1

javascript

function undefined() {

// problem solved

}

_29 hanya berisi

javascript

function undefined() {

// problem solved

}

38 properti.

javascript

function undefined() {

// problem solved

}

_32 objek mendefinisikan nilai default untuk properti

javascript

function undefined() {

// problem solved

}

38 dan

javascript

function undefined() {

// problem solved

}

41

javascript

function undefined() {

// problem solved

}

_42 mengambil argumen pertama sebagai objek target

javascript

function undefined() {

// problem solved

}

43. Objek target menerima nilai properti

javascript

function undefined() {

// problem solved

}

_38 dari

javascript

function undefined() {

// problem solved

}

29 objek sumber. Dan nilai

javascript

function undefined() {

// problem solved

}

_41 properti dari

javascript

function undefined() {

// problem solved

}

32 objek sumber, karena

javascript

function undefined() {

// problem solved

}

29 tidak mengandung

javascript

function undefined() {

// problem solved

}

41

Urutan di mana objek sumber disebutkan memang penting. nanti properti objek sumber menimpa yang sebelumnya

Anda sekarang aman untuk mengakses properti apa pun dari objek

javascript

function undefined() {

// problem solved

}

34, termasuk

javascript

function undefined() {

// problem solved

}

51 yang awalnya tidak tersedia di

javascript

function undefined() {

// problem solved

}

29

Untungnya, ada alternatif yang lebih mudah untuk mengisi objek dengan properti default. Saya sarankan untuk menggunakan

Alih-alih

javascript

function undefined() {

// problem solved

}

_42 doa, gunakan sintaks penyebaran objek untuk menyalin ke objek target semua properti yang dimiliki dan dapat dihitung dari objek sumber

javascript

function undefined() {

// problem solved

}

_2

Penginisialisasi objek menyebarkan properti dari

javascript

function undefined() {

// problem solved

}

32 dan

javascript

function undefined() {

// problem solved

}

29 objek sumber. Urutan di mana objek sumber ditentukan adalah penting. nanti properti objek sumber menimpa yang sebelumnya

Mengisi objek yang tidak lengkap dengan nilai properti default adalah strategi yang efisien untuk membuat kode Anda aman dan tahan lama. Apa pun situasinya, objek selalu berisi kumpulan properti lengkap. dan

javascript

typeof undefined === 'undefined'; // => true

_8 tidak dapat dibuat

Tip bonus. penggabungan nullish

Operator mengevaluasi ke nilai default ketika operannya adalah

javascript

typeof undefined === 'undefined'; // => true

8 atau

javascript

typeof undefined === 'undefined'; // => true

6

javascript

function undefined() {

// problem solved

}

_3

Operator penggabungan Nullish nyaman untuk mengakses properti objek sambil memiliki nilai default saat properti ini adalah

javascript

typeof undefined === 'undefined'; // => true

8 atau

javascript

typeof undefined === 'undefined'; // => true

6

javascript

function undefined() {

// problem solved

}

_4

javascript

function undefined() {

// problem solved

}

_61 objek tidak memiliki properti

javascript

function undefined() {

// problem solved

}

41, sehingga

javascript

function undefined() {

// problem solved

}

63 pengakses properti adalah

javascript

typeof undefined === 'undefined'; // => true

8.

javascript

function undefined() {

// problem solved

}

_65 dievaluasi ke nilai default

javascript

function undefined() {

// problem solved

}

66

javascript

function undefined() {

// problem solved

}

_67 adalah

javascript

function undefined() {

// problem solved

}

68, jadi operator penggabungan nullish mengevaluasi ke nilai properti

javascript

function undefined() {

// problem solved

}

68

2. 3 Parameter fungsi

Parameter fungsi secara implisit default ke

javascript

typeof undefined === 'undefined'; // => true

8

Biasanya sebuah fungsi yang didefinisikan dengan sejumlah parameter tertentu harus dipanggil dengan jumlah argumen yang sama. Saat itulah parameter mendapatkan nilai yang Anda harapkan

javascript

function undefined() {

// problem solved

}

_5

Ketika

javascript

function undefined() {

// problem solved

}

_71, parameter

javascript

function undefined() {

// problem solved

}

72 dan

javascript

function undefined() {

// problem solved

}

73 menerima

javascript

function undefined() {

// problem solved

}

74 dan masing-masing

javascript

function undefined() {

// problem solved

}

75 nilai. Perkalian dihitung seperti yang diharapkan.

javascript

function undefined() {

// problem solved

}

_76

Apa yang terjadi jika Anda menghilangkan argumen tentang doa?

Mari kita ubah sedikit contoh sebelumnya dengan memanggil fungsi hanya dengan satu argumen

javascript

function undefined() {

// problem solved

}

_6

Doa

javascript

function undefined() {

// problem solved

}

_78 dilakukan dengan satu argumen. sebagai hasilnya

javascript

function undefined() {

// problem solved

}

72 parameter adalah

javascript

function undefined() {

// problem solved

}

74, tetapi parameter

javascript

function undefined() {

// problem solved

}

73 adalah

javascript

typeof undefined === 'undefined'; // => true

8

Kiat 6. Gunakan nilai parameter default

Kadang-kadang suatu fungsi tidak memerlukan set lengkap argumen pada pemanggilan. Anda dapat menyetel default untuk parameter yang tidak memiliki nilai

Mengingat contoh sebelumnya, mari kita lakukan perbaikan. Jika parameter

javascript

function undefined() {

// problem solved

}

_73 adalah

javascript

typeof undefined === 'undefined'; // => true

8, biarkan default ke

javascript

function undefined() {

// problem solved

}

85

javascript

function undefined() {

// problem solved

}

_7

Fungsi dipanggil dengan satu argumen

javascript

function undefined() {

// problem solved

}

78. Awalnya, parameter

javascript

function undefined() {

// problem solved

}

_72 adalah

javascript

function undefined() {

// problem solved

}

85 dan

javascript

function undefined() {

// problem solved

}

73 adalah

javascript

typeof undefined === 'undefined'; // => true

8
Pernyataan bersyarat memverifikasi apakah

javascript

function undefined() {

// problem solved

}

73 adalah

javascript

typeof undefined === 'undefined'; // => true

8. Jika itu terjadi, penetapan

javascript

function undefined() {

// problem solved

}

_93 menetapkan nilai default

Meskipun cara yang disediakan untuk menetapkan nilai default berfungsi, saya tidak menyarankan membandingkan langsung dengan

javascript

typeof undefined === 'undefined'; // => true

8. Ini bertele-tele dan terlihat seperti peretasan

Pendekatan yang lebih baik adalah menggunakan fitur ES2015. Singkat, ekspresif, dan tidak ada perbandingan langsung dengan

javascript

typeof undefined === 'undefined'; // => true

8

Menambahkan nilai default ke parameter

javascript

function undefined() {

// problem solved

}

_93 terlihat lebih baik

javascript

function undefined() {

// problem solved

}

_8

javascript

function undefined() {

// problem solved

}

_93 dalam tanda tangan fungsi memastikan bahwa jika

javascript

function undefined() {

// problem solved

}

73 adalah

javascript

typeof undefined === 'undefined'; // => true

8, parameter default ke

javascript

function undefined() {

// problem solved

}

85

Fitur parameter default ES2015 bersifat intuitif dan ekspresif. Selalu gunakan untuk menetapkan nilai default untuk parameter opsional

2. 4 Nilai pengembalian fungsi

Secara implisit, tanpa pernyataan

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

_01, fungsi JavaScript mengembalikan

javascript

typeof undefined === 'undefined'; // => true

8

Fungsi yang tidak memiliki pernyataan

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

_01 secara implisit mengembalikan

javascript

typeof undefined === 'undefined'; // => true

8

javascript

function undefined() {

// problem solved

}

_9

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

05 fungsi tidak mengembalikan hasil perhitungan apa pun. Hasil pemanggilan fungsi adalah

javascript

typeof undefined === 'undefined'; // => true

8

Situasi yang sama terjadi ketika ada pernyataan

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

_01, tetapi tanpa ekspresi di dekatnya

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

0

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

08 pernyataan dieksekusi, tetapi tidak mengembalikan ekspresi apa pun. Hasil doa juga

javascript

typeof undefined === 'undefined'; // => true

8

Tentu saja, menunjukkan dekat

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

_01 ekspresi yang dikembalikan berfungsi seperti yang diharapkan

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

1

Sekarang pemanggilan fungsi dievaluasi menjadi

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

11, yaitu

javascript

function undefined() {

// problem solved

}

85 kuadrat

Kiat 7. Jangan percaya penyisipan titik koma otomatis

Daftar pernyataan berikut dalam JavaScript harus diakhiri dengan titik koma (

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

13)

  • pernyataan kosong
  • javascript

    function bigFunction() {

    // code...

    myVariable; // => undefined

    // code...

    var myVariable = 'Initial value';

    // code...

    myVariable; // => 'Initial value'

    }

    bigFunction();

    8,

    javascript

    function bigFunction() {

    // code...

    myVariable; // => undefined

    // code...

    var myVariable = 'Initial value';

    // code...

    myVariable; // => 'Initial value'

    }

    bigFunction();

    7,

    javascript

    function bigFunction() {

    // code...

    myVariable; // => undefined

    // code...

    var myVariable = 'Initial value';

    // code...

    myVariable; // => 'Initial value'

    }

    bigFunction();

    9,

    javascript

    let number;

    number; // => undefined

    let movie = { name: 'Interstellar' };

    movie.year; // => undefined

    let movies = ['Interstellar', 'Alexander'];

    movies[3]; // => undefined

    17,

    javascript

    let number;

    number; // => undefined

    let movie = { name: 'Interstellar' };

    movie.year; // => undefined

    let movies = ['Interstellar', 'Alexander'];

    movies[3]; // => undefined

    18 deklarasi
  • pernyataan ekspresi
  • javascript

    let number;

    number; // => undefined

    let movie = { name: 'Interstellar' };

    movie.year; // => undefined

    let movies = ['Interstellar', 'Alexander'];

    movies[3]; // => undefined

    19 pernyataan
  • javascript

    let number;

    number; // => undefined

    let movie = { name: 'Interstellar' };

    movie.year; // => undefined

    let movies = ['Interstellar', 'Alexander'];

    movies[3]; // => undefined

    20 pernyataan,

    javascript

    let number;

    number; // => undefined

    let movie = { name: 'Interstellar' };

    movie.year; // => undefined

    let movies = ['Interstellar', 'Alexander'];

    movies[3]; // => undefined

    21 pernyataan
  • javascript

    let number;

    number; // => undefined

    let movie = { name: 'Interstellar' };

    movie.year; // => undefined

    let movies = ['Interstellar', 'Alexander'];

    movies[3]; // => undefined

    22 pernyataan
  • javascript

    let number;

    number; // => undefined

    let movie = { name: 'Interstellar' };

    movie.year; // => undefined

    let movies = ['Interstellar', 'Alexander'];

    movies[3]; // => undefined

    _01 pernyataan

Jika Anda menggunakan salah satu pernyataan di atas, pastikan untuk menandai titik koma di bagian akhir

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

2

Di akhir pernyataan

javascript

function bigFunction() {

// code...

myVariable; // => undefined

// code...

var myVariable = 'Initial value';

// code...

myVariable; // => 'Initial value'

}

bigFunction();

8 dan pernyataan

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

01, sebuah titik koma wajib ditulis

Apa yang terjadi jika Anda tidak ingin menandai titik koma ini?

Dibantu oleh ASI, Anda dapat menghapus titik koma dari contoh sebelumnya

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

3

Teks di atas adalah kode JavaScript yang valid. Titik koma yang hilang dimasukkan secara otomatis untuk Anda

Sekilas memang terlihat cukup menjanjikan. Mekanisme ASI memungkinkan Anda melewati titik koma yang tidak perlu. Anda dapat membuat kode JavaScript lebih kecil dan lebih mudah dibaca

Ada satu jebakan kecil tapi menyebalkan yang dibuat oleh ASI. Ketika baris baru berada di antara

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

_01 dan ekspresi yang dikembalikan

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

27, ASI secara otomatis menyisipkan titik koma sebelum baris baru

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

28

Apa artinya di dalam fungsi memiliki

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

08 pernyataan? . Jika Anda tidak mengetahui secara detail mekanisme ASI, ________0______8 tiba-tiba kembali menyesatkan

Sebagai contoh, mari pelajari nilai yang dikembalikan dari

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

32 doa

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

4

Antara pernyataan

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

_01 dan ekspresi literal array ada baris baru. JavaScript secara otomatis menyisipkan titik koma setelah

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

01, menafsirkan kode sebagai berikut

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

5

Pernyataan

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

_08 membuat fungsi

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

32 mengembalikan

javascript

typeof undefined === 'undefined'; // => true

8 alih-alih array yang diharapkan

Masalahnya diselesaikan dengan menghapus baris baru antara

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

01 dan array literal

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

6

Rekomendasi saya adalah untuk mempelajari bagaimana tepatnya Penyisipan Titik Koma Otomatis bekerja untuk menghindari situasi seperti itu

Tentu saja, jangan pernah menempatkan baris baru antara

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

01 dan ekspresi yang dikembalikan

2. 5 batal operator

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

40 mengevaluasi ekspresi dan mengembalikan

javascript

typeof undefined === 'undefined'; // => true

8 terlepas dari hasil evaluasi

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

7

dari

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

_42 operator adalah untuk menekan evaluasi ekspresi ke

javascript

typeof undefined === 'undefined'; // => true

8, mengandalkan beberapa efek samping dari evaluasi

3. tidak terdefinisi dalam array

Anda mendapatkan

javascript

typeof undefined === 'undefined'; // => true

_8 saat mengakses elemen array dengan indeks di luar batas

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

8

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

45 array memiliki 3 elemen, sehingga indeks yang valid adalah

javascript

let array = null;

array; // => null

let movie = { name: 'Starship Troopers', musicBy: null };

movie.musicBy; // => null

'abc'.match(/[0-9]/); // => null

71,

javascript

let myVariable;

myVariable; // => undefined

1, dan

javascript

function undefined() {

// problem solved

}

85

Karena tidak ada elemen array pada indeks

javascript

function undefined() {

// problem solved

}

74 dan

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

50, pengakses

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

51 dan

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

52 adalah

javascript

typeof undefined === 'undefined'; // => true

8

Dalam JavaScript, Anda mungkin menemukan apa yang disebut array jarang. Ini adalah array yang memiliki celah, mis. e. pada beberapa indeks, tidak ada elemen yang didefinisikan

Ketika celah (alias slot kosong) diakses di dalam array jarang, Anda juga mendapatkan

javascript

typeof undefined === 'undefined'; // => true

8

Contoh berikut menghasilkan larik renggang dan mencoba mengakses slot kosongnya

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

_9

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

55 dibuat dengan memanggil konstruktor

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

56 dengan argumen numerik pertama. Ini memiliki 3 slot kosong

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

57 dibuat dengan array literal dengan elemen kedua yang hilang

Di salah satu array jarang ini yang mengakses slot kosong bernilai

javascript

typeof undefined === 'undefined'; // => true

8

Saat bekerja dengan array, untuk menghindari

javascript

typeof undefined === 'undefined'; // => true

8, pastikan untuk menggunakan indeks array yang valid dan mencegah pembuatan array jarang

4. Perbedaan antara tidak terdefinisi dan nol

Apa perbedaan utama antara

javascript

typeof undefined === 'undefined'; // => true

8 dan

javascript

typeof undefined === 'undefined'; // => true

6?

javascript

typeof undefined === 'undefined'; // => true

_8 mewakili nilai variabel yang belum diinisialisasi, sementara

javascript

typeof undefined === 'undefined'; // => true

6 mewakili ketidakhadiran objek yang disengaja

Mari jelajahi perbedaannya dalam beberapa contoh

Variabel

javascript

function isPalindrome(word) {

const length = word.length;

const half = Math.floor(length / 2);

for (let index = 0; index < half; index++) {

if (word[index] !== word[length - index - 1]) {

return false;

}

}

return true;

}

isPalindrome('madam'); // => true

isPalindrome('hello'); // => false

2 didefinisikan, namun tidak ditetapkan dengan nilai awal

javascript

typeof undefined === 'undefined'; // => true

0

javascript

function isPalindrome(word) {

const length = word.length;

const half = Math.floor(length / 2);

for (let index = 0; index < half; index++) {

if (word[index] !== word[length - index - 1]) {

return false;

}

}

return true;

}

isPalindrome('madam'); // => true

isPalindrome('hello'); // => false

2 variabel adalah

javascript

typeof undefined === 'undefined'; // => true

8, yang menunjukkan variabel yang tidak diinisialisasi

Konsep yang tidak diinisialisasi yang sama terjadi ketika properti objek yang tidak ada diakses

javascript

typeof undefined === 'undefined'; // => true

_1

Karena

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

_67 properti tidak ada di

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

68, JavaScript mengevaluasi

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

69 hingga

javascript

typeof undefined === 'undefined'; // => true

8

Di sisi lain, Anda tahu bahwa sebuah variabel mengharapkan sebuah objek. Tetapi untuk beberapa alasan, Anda tidak dapat membuat instance objek. Dalam kasus seperti itu

javascript

typeof undefined === 'undefined'; // => true

_6 adalah indikator yang berarti dari objek yang hilang

Misalnya,

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

_72 adalah fungsi yang mengkloning objek JavaScript biasa. Fungsi ini diharapkan untuk mengembalikan objek

javascript

typeof undefined === 'undefined'; // => true

_2

Namun

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

_72 mungkin dipanggil dengan argumen non-objek.

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

74 atau

javascript

typeof undefined === 'undefined'; // => true

6. Dalam kasus seperti itu, fungsi tidak dapat membuat tiruan, sehingga mengembalikan

javascript

typeof undefined === 'undefined'; // => true

6 — indikator objek yang hilang

javascript

function isPalindrome(word) {

const length = word.length;

const half = Math.floor(length / 2);

for (let index = 0; index < half; index++) {

if (word[index] !== word[length - index - 1]) {

return false;

}

}

return true;

}

isPalindrome('madam'); // => true

isPalindrome('hello'); // => false

8 operator membuat perbedaan antara

javascript

typeof undefined === 'undefined'; // => true

8 dan

javascript

typeof undefined === 'undefined'; // => true

6

javascript

typeof undefined === 'undefined'; // => true

_3

Juga

javascript

let number;

number; // => undefined

let movie = { name: 'Interstellar' };

movie.year; // => undefined

let movies = ['Interstellar', 'Alexander'];

movies[3]; // => undefined

_80 dengan benar membedakan

javascript

typeof undefined === 'undefined'; // => true

8 dari

javascript

typeof undefined === 'undefined'; // => true

6

javascript

typeof undefined === 'undefined'; // => true

_4

5. Kesimpulan

javascript

typeof undefined === 'undefined'; // => true

8 keberadaan adalah konsekuensi dari sifat permisif JavaScript yang memungkinkan penggunaan

  • variabel yang tidak diinisialisasi
  • properti atau metode objek yang tidak ada
  • indeks di luar batas untuk mengakses elemen array
  • hasil pemanggilan fungsi yang tidak mengembalikan apa pun

Membandingkan langsung dengan

javascript

typeof undefined === 'undefined'; // => true

_8 tidak aman karena Anda mengandalkan praktik yang diizinkan tetapi tidak dianjurkan yang disebutkan di atas

Strategi yang efisien adalah dengan mengurangi kemunculan

javascript

typeof undefined === 'undefined'; // => true

8 kata kunci dalam kode Anda dengan menerapkan kebiasaan baik seperti

  • mengurangi penggunaan variabel yang tidak diinisialisasi
  • membuat siklus hidup variabel pendek dan dekat dengan sumber penggunaannya
  • bila memungkinkan, tetapkan nilai awal ke variabel
  • dukung

    javascript

    function bigFunction() {

    // code...

    myVariable; // => undefined

    // code...

    var myVariable = 'Initial value';

    // code...

    myVariable; // => 'Initial value'

    }

    bigFunction();

    _7, jika tidak, gunakan

    javascript

    function bigFunction() {

    // code...

    myVariable; // => undefined

    // code...

    var myVariable = 'Initial value';

    // code...

    myVariable; // => 'Initial value'

    }

    bigFunction();

    8
  • gunakan nilai default untuk parameter fungsi yang tidak signifikan
  • verifikasi keberadaan properti atau isi objek yang tidak aman dengan properti default
  • hindari penggunaan array jarang

Apakah baik bahwa JavaScript memiliki

javascript

typeof undefined === 'undefined'; // => true

_8 dan

javascript

typeof undefined === 'undefined'; // => true

6 untuk mewakili nilai kosong?

Suka postingannya?

Sarankan Perbaikan

Posting berkualitas ke kotak masuk Anda

Saya secara teratur menerbitkan posting yang berisi

  • Konsep penting JavaScript dijelaskan dengan kata-kata sederhana
  • Ikhtisar fitur JavaScript baru
  • Cara menggunakan TypeScript dan mengetik
  • Desain perangkat lunak dan praktik pengkodean yang baik

Berlangganan buletin saya untuk mengirimkannya langsung ke kotak masuk Anda

Langganan

Bergabunglah dengan 6915 pelanggan lainnya

Mengapa kata kunci ini tidak ditentukan dalam javascript?

Mengapa kata kunci ini tidak ditentukan dalam javascript?

Tentang Dmitri Pavlutin

Penulis dan pelatih teknologi. Rutinitas harian saya terdiri dari (namun tidak terbatas) minum kopi, coding, menulis, coaching, mengatasi kebosanan 😉

Sekarang bekerja sebagai pengembang open source penuh waktu pada proyek Readapt - bertujuan untuk membuat web dapat diakses oleh semua orang

Mengapa ini tidak terdefinisi dalam JavaScript?

Properti undefined menunjukkan bahwa sebuah variabel belum diberi nilai, atau tidak dideklarasikan sama sekali .

Bagaimana cara mengatasi kesalahan yang tidak terdefinisi dalam JavaScript?

Kiat 1. Mendukung const , jika tidak gunakan let , tetapi ucapkan selamat tinggal pada var
Kiat 2. Meningkatkan kohesi
Kiat 3. Periksa keberadaan properti
Kiat 4. Destrukturisasi untuk mengakses properti objek
Kiat 5. Isi objek dengan properti default
Tip bonus. penggabungan nullish
Kiat 6. Gunakan nilai parameter default

Mengapa ini tidak ditentukan dalam mode ketat?

Dalam mode ketat, sekarang tidak terdefinisi. Ketika sebuah fungsi dipanggil dengan call atau apply , jika nilainya adalah nilai primitif, yang ini dimasukkan ke dalam sebuah objek (atau objek global untuk undefined . Dalam mode ketat, nilai diteruskan langsung tanpa konversi atau penggantian.

Apa kata kunci ini dalam JavaScript?

Dalam JavaScript, kata kunci this mengacu pada objek . Objek mana yang bergantung pada bagaimana ini dipanggil (digunakan atau dipanggil). Kata kunci this mengacu pada objek yang berbeda tergantung pada bagaimana kata kunci ini digunakan. Dalam metode objek, ini mengacu pada objek. Sendiri, ini mengacu pada objek global.