-
Notifications
You must be signed in to change notification settings - Fork 62
/
Copy path47_void_operator.js
96 lines (71 loc) · 2.56 KB
/
47_void_operator.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/**
* JavaScript juga mengenal Void operator
*
* hanya saja di Javascript fungsinya hanya untuk meng-evaluasi suatu expression
* dan selalu me-return undefined
*/
void 0
void (0)
void "hello"
void (new Date())
void function test() { console.log('test') }
// semua diatas hasilnya undefined
/**
* Apa sih kalao gitu gunanya? ...dahulu kala sebelum JavaScript versi ES5,
*
* undefined bisa di overrride sesuka hati
*/
// javascript jaman old kode berikut ini valid
var undefined = 'new val';
console.log(undefined); // new val
// ini bisa masalah...karena kita banyak melakukan validasi dengan undefined dimana-mana
if (a == undefined) {}
if (x != undefined) {}
// bayangkan kalau undefined nya di override...jadi ngaco kan....
// sekarang di Era ES5 kesini...undefined sdh gak bisa di override lagi...
// jadi lebih aman, namun untuk kompatability...karena masih banyak orang pake browser jadul,
// maka kita mesti cari akan gimana caranya validasi dengan undefined dengan aman
// maka di pakailah operator void, karena ia selalu menghasilkan undefined
// syntax: void <anything>
void 0 == undefined; // true
void 23 == undefined; // true
void 'test' == undefined; // true
void(0) == undefined; // true
void function test() { console.log('test') }; // undefined
// nah dengan behaviour ini dan karena alasan kompatability, banyak orang masih validasi
// undefined dengan void
if (typeof a == void 0) {} // artinya cek apakah type dari a itu undefined
// contoh Library Unit Test Jasmine, pakai ini
// lihat file ini dibaris paling bawah
// https://github.com/codetrash/jasmine/blob/master/src/core/Spec.js
/**
* Void juga memaksa sebuah function di evalusasi sebagai function expression
* alih-alih sebagai function declaration
*/
function test() {
console.log('hai');
}();
// function diatas Error, karena function itu jenisnya declaration
// kita mesti ubah menjadi immediately-invoked-function
(function test() {
console.log('hai'); // hai
})();
// atau kita ubah ke function expression agar tdk Error, seperti ini
var test = function () {
console.log('hai'); // hai
}();
// cara lain adalah dengan menambahkan void operator
void function test() {
console.log('hai'); // hai
}();
// hanya saja perlu di-ingat...Void selalu menghasilkan undefined, maka function diatas
// tidka bisa dipanggil
// seperti ini
test(); // Error not defined
void function test() {
console.log(232)
}
test(); // Error: test is not defined
// kita juga sering lihat penggunaan void operator ini untuk url
<a href="javascript:void(0);">link</a>
// ini agar link itu tidak menuju kemana-mana