Skip to content

Commit 7d08a94

Browse files
authored
Merge pull request #156 from javascript-tutorial/sync-d6e88647
Sync with upstream @ d6e8864
2 parents 4741b6b + acb3f79 commit 7d08a94

File tree

24 files changed

+467
-98
lines changed

24 files changed

+467
-98
lines changed

1-js/01-getting-started/1-intro/article.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# Pengenalan JavaScript
22

3+
<<<<<<< HEAD
34
Mari kita lihat apa yang spesial dari JavaScript, apa saja yang bisa kita buat menggunakan JavaScript, dan teknologi apa yang cocok dengan JavaScript.
5+
=======
6+
Let's see what's so special about JavaScript, what we can achieve with it, and what other technologies play well with it.
7+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
48
59
## Apa itu JavaScript?
610

@@ -129,6 +133,12 @@ Masih banyak lagi. Tentunya, jika kita menggunakan salah satu bahasa yang ditran
129133

130134
## Kesimpulan
131135

136+
<<<<<<< HEAD
132137
- JavaScript awalnya diciptakan sebagai bahasa khusus browser, namun sekarang banyak digunakan di lingkungan lain.
133138
- Sekarang, JavaScript mempunyai posisi unik sebagai bahasa browser paling banyak diadopsi dengan integrasi penuh dengan HTML/CSS.
134139
- Ada banyak bahasa yang "ditranspile" ke JavaScript dan menyediakan fitur tertentu. Disarankan untuk mempelajari mereka juga, minimal sebentar, setelah menguasai JavaScript.
140+
=======
141+
- JavaScript was initially created as a browser-only language, but it is now used in many other environments as well.
142+
- Today, JavaScript has a unique position as the most widely-adopted browser language with full integration in HTML/CSS.
143+
- There are many languages that get "transpiled" to JavaScript and provide certain features. It is recommended to take a look at them, at least briefly, after mastering JavaScript.
144+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d

1-js/02-first-steps/09-comparison/article.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,13 @@ algoritma untuk membandingkan dua string sederhana:
5757
4. Ulangi sampai string berakhir.
5858
5. Jika kedua string berakhir pada panjang yang sama, maka mereka sama. Sebaliknya, string lebih panjang yang lebih besar.
5959

60+
<<<<<<< HEAD
6061
Pada contoh di atas, pembandingan `'Z' > 'A'` menghasilkan pada langkah pertama sedangkan string `"Glow"` dan `"Glee"` dibandingkan karakter-demi-karakter:
62+
=======
63+
In the first example above, the comparison `'Z' > 'A'` gets to a result at the first step.
64+
65+
The second comparison `'Glow'` and `'Glee'` needs more steps as strings are compared character-by-character:
66+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
6167
6268
1. `G` sama dengan `G`.
6369
2. `l` sama dengan `l`.

1-js/02-first-steps/12-nullish-coalescing-operator/article.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@ Hasil dari `a ?? b` adalah:
1111
- jika `a` belum didefinisikan, maka `b`.
1212

1313

14+
<<<<<<< HEAD
1415
Dengan kata lain, `??` mengembalikan argumen pertama jika argumen tersebut telah didefinisikan. Sebaliknya, mengembalikan argumen kedua jika argumen pertama belum didefinisikan.
16+
=======
17+
In other words, `??` returns the first argument if it's not `null/undefined`. Otherwise, the second one.
18+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
1519
1620
Operator penggabung nullish bukanlah sesuatu yang benar-benar baru. Operator itu hanyalah sebuah sintaks yang bagus untuk mendapatkan nilai pertama yang telah "didefinisikan" dari dua nilai.
1721

@@ -39,7 +43,11 @@ let user = "John";
3943
alert(user ?? "Anonymous"); // John
4044
```
4145
46+
<<<<<<< HEAD
4247
Kita juga bisa menggunakan rentetan `??` untuk mendapatkan nilai yang telah didefinisikan dari sebuah daftar.
48+
=======
49+
We can also use a sequence of `??` to select the first value from a list that isn't `null/undefined`.
50+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
4351
4452
Katakan kita memiliki sebuah data _user_ didalam sebuah variabel `firstName`, `lastName`, atau `nickName`. Semuanya mungkin saya memiliki nilai _undefined_, jika _user_ nya tidak memasukan nilainya.
4553
@@ -77,11 +85,19 @@ alert(firstName || lastName || nickName || "Anonymous"); // Supercoder
7785
7886
Operator OR `||` sudah ada sejak awal mula dari Javascript, jadi sudah sejak lama pengembang menggunakan operator _or_ untuk kebutuhan seperti contoh diatas.
7987
88+
<<<<<<< HEAD
8089
Disisi yang lain, operator penggabung nullish `??` baru saja ditambahkan, dan alasan penambahannya adalah karena para pengembang kurang senang dengan `||`.
8190
8291
Perbedaan halus, tapi penting adalah:
8392
- `||` mengembalikan nilai *truthy* pertama.
8493
- `??` mengembalikan nilai *terdefinisi* pertama.
94+
=======
95+
On the other hand, the nullish coalescing operator `??` was added to JavaScript only recently, and the reason for that was that people weren't quite happy with `||`.
96+
97+
The important difference between them is that:
98+
- `||` returns the first *truthy* value.
99+
- `??` returns the first *defined* value.
100+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
85101
86102
Dengan kata lain, `||` tidak membedakan antara `false`, `0`, sebuah string kosong `""` dan `null/undefined`. Mereka dilihat sama oleh `||` -- nilai _falsy_. Jika salah satu nilai tersebut berada pada argumen pertama dari `||`, maka kita akan mendapatkan argumen kedua sebagai hasilnya.
87103
@@ -97,6 +113,7 @@ alert(height || 100); // 100
97113
alert(height ?? 100); // 0
98114
```
99115
116+
<<<<<<< HEAD
100117
Disini, kita memiliki _height_ nol.
101118
102119
- Bagian `height || 100` memeriksa `height` sebagai nilai yang _falsy_, dan ternyata benar.
@@ -105,6 +122,14 @@ Disini, kita memiliki _height_ nol.
105122
- jadi hasil dari `height` adalah "sebagaimana adanya", yang mana adalah `0`.
106123
107124
Jika kita asumsikan bahwa _height_ nol adalah nilai yang valid, maka nilainya tidak seharusnya diganti dengan nilai _default_, maka `??` melakukan hal yang benar.
125+
=======
126+
- The `height || 100` checks `height` for being a falsy value, and it really is.
127+
- so the result is the second argument, `100`.
128+
- The `height ?? 100` checks `height` for being `null/undefined`, and it's not,
129+
- so the result is `height` "as is", that is `0`.
130+
131+
If the zero height is a valid value, that shouldn't be replaced with the default, then `??` does just the right thing.
132+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
108133
109134
## Precedence/Hak lebih tinggi
110135
@@ -156,7 +181,11 @@ alert(x); // 2
156181
157182
## Ringkasan
158183
184+
<<<<<<< HEAD
159185
- operator penggabung nullish `??` menyediakan cara yang pendek untuk memilih nilai *defined* dari sebuah daftar.
186+
=======
187+
- The nullish coalescing operator `??` provides a short way to choose the first "defined" value from a list.
188+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
160189
161190
It's used to assign default values to variables:
162191
Operator nullish digunakan untuk memberikan nilai default kepada sebuah variabel:
@@ -166,5 +195,10 @@ alert(x); // 2
166195
height = height ?? 100;
167196
```
168197
198+
<<<<<<< HEAD
169199
- Operator `??` memiliki nilai *precedence* yang sangat rendah, dan sedikit lebih tinggi dari `?` dan `=`.
170200
- Dilarang untuk menggunakan operator `??` dengan `\\` atau `&&` tanpa kurung yang jelas.
201+
=======
202+
- The operator `??` has a very low precedence, only a bit higher than `?` and `=`, so consider adding parentheses when using it in an expression.
203+
- It's forbidden to use it with `||` or `&&` without explicit parentheses.
204+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d

1-js/02-first-steps/18-javascript-specials/article.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,11 @@ Penetapan
144144
: Ada penetapan simpel: `a = b` dan penetapan kombinasi seperti `a *= 2`.
145145

146146
Bitwise
147+
<<<<<<< HEAD
147148
: Operator bitwise bekerja dengan integer 32-bit di bit-level paling kecil: lihat [docs](mdn:/JavaScript/Reference/Operators/Bitwise_Operators) ketika mereka dibutuhkan.
149+
=======
150+
: Bitwise operators work with 32-bit integers at the lowest, bit-level: see the [docs](mdn:/JavaScript/Guide/Expressions_and_Operators#Bitwise) when they are needed.
151+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
148152
149153
Kondisional
150154
: Satu-satunya operator dengan tiga parameter: `cond ? resultA : resultB`. Jika `cond` truthy, mengembalikan `resultA`, jika tidak `resultB`.

1-js/04-object-basics/01-object/8-multiply-numeric/task.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,15 @@ nilai penting: 3
22

33
---
44

5+
<<<<<<< HEAD
56
# Kalikan properti numerik dengan 2
67

78
Buatlah sebuah fungsi `multiplyNumerik(obj)` yang mengkalikan seluruh properti numerik dari `obj` dengan `2`.
9+
=======
10+
# Multiply numeric property values by 2
11+
12+
Create a function `multiplyNumeric(obj)` that multiplies all numeric property values of `obj` by `2`.
13+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
814
915
Contoh:
1016

1-js/04-object-basics/02-object-copy/article.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,22 @@
1+
<<<<<<< HEAD
12
# Menyalin objek, referensi
23

34
Salah satu perbedaan dasar dari objek dan tipe primitif adalah untuk menyimpan dan menyalin "dengan referensi/*by reference*".
45

56
nilai primitif: string, angka, boolean -- akan disalin "seluruh nilainya".
67

78
contoh:
9+
=======
10+
# Object references and copying
11+
12+
One of the fundamental differences of objects versus primitives is that objects are stored and copied "by reference", as opposed to primitive values: strings, numbers, booleans, etc -- that are always copied "as a whole value".
13+
14+
That's easy to understand if we look a bit "under a cover" of what happens when we copy a value.
15+
16+
Let's start with a primitive, such as a string.
17+
18+
Here we put a copy of `message` into `phrase`:
19+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
820
921
```js
1022
let message = "Hello!";
@@ -15,21 +27,43 @@ Sebagai hasilnya kita punya dua variabel yang berdiri sendiri, dan keduanya meny
1527

1628
![](variable-copy-value.svg)
1729

30+
<<<<<<< HEAD
1831
Objek tidak seperti itu.
1932

2033
**Sebuah variabel tidak menyimpan objek itu sendiri, akan tetapi "disimpan didalam memori", dengan kata lain "mereferensi" kepadanya (ke data didalam memori).**
2134

2235
Dibawah adalah gambar untuk sebuah objek:
36+
=======
37+
Quite an obvious result, right?
38+
39+
Objects are not like that.
40+
41+
**A variable assigned to an object stores not the object itself, but its "address in memory", in other words "a reference" to it.**
42+
43+
Let's look at an example of such variable:
44+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
2345
2446
```js
2547
let user = {
2648
name: "John"
2749
};
2850
```
2951

52+
And here's how it's actually stored in memory:
53+
3054
![](variable-contains-reference.svg)
3155

56+
<<<<<<< HEAD
3257
Disini, objek disimpan di suatu tempat didalam memori. Dan variabel `user` punya "referensi" ke data objek yang berada didalam memori itu.
58+
=======
59+
The object is stored somewhere in memory (at the right of the picture), while the `user` variable (at the left) has a "reference" to it.
60+
61+
We may think of an object variable, such as `user`, as of a sheet of paper with the address.
62+
63+
When we perform actions with the object, e.g. take a property `user.name`, JavaScript engine looks into that address and performs the operation on the actual object.
64+
65+
Now here's why it's important.
66+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
3367
3468
**Ketika sebuah variabel objek disalin -- referensinya akan tersalin, objeknya tidak terduplikasi.**
3569

@@ -45,7 +79,13 @@ Kita sekarang punya dua variabel, masing-masing mereferensi ke objek yang sama:
4579

4680
![](variable-copy-reference.svg)
4781

82+
<<<<<<< HEAD
4883
Kita bisa menggunakan variabel apapun untuk mengakses objek dan memodifikasi konten didalamnya:
84+
=======
85+
As you can see, there's still one object, now with two variables that reference it.
86+
87+
We can use any variable to access the object and modify its contents:
88+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
4989
5090
```js run
5191
let user = { name: 'John' };
@@ -59,6 +99,7 @@ admin.name = 'Pete'; // mengganti admin dengan menggunakan "referensi"
5999
alert(*!*user.name*/!*); // 'Pete', perubahan akan terlihat pada "user"
60100
```
61101
102+
<<<<<<< HEAD
62103
Contoh diatas mendemonstrasikan bahwa disana hanya ada satu objek. Seperti jika kita punya sebuah lemari dengan dua kunci dan satunya (`admin`) digunakan untuk masuk kedalamnya. Lalu, jika kita nanti menggunakan kunci lainnya (`user`) kita bisa melihat perubahannya.
63104
64105
## Perbandingan dengan referensi
@@ -68,6 +109,16 @@ Operator pembanding `==` dan pembanding ketat `===` untuk objek bekerja sama saj
68109
**Dua objek adalah sama jika mereka objek yang sama.**
69110
70111
Dibawah adalah dua variabel yang mereferensi ke objek yang sama, dengan demikian mereka sama:
112+
=======
113+
114+
It's just as if we had a cabinet with two keys and used one of them (`admin`) to get into it. Then, if we later use another key (`user`) we can see changes.
115+
116+
## Comparison by reference
117+
118+
Two objects are equal only if they are the same object.
119+
120+
For instance, here `a` and `b` reference the same object, thus they are equal:
121+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
71122
72123
```js run
73124
let a = {};
@@ -77,7 +128,11 @@ alert( a == b ); // true, kedua variabel mereferensi ke objek yang sama
77128
alert( a === b ); // true
78129
```
79130
131+
<<<<<<< HEAD
80132
Dan dibawah adalah dua objek yang berdiri sendiri, tidaklah sama, walaupun keduanya kosong:
133+
=======
134+
And here two independent objects are not equal, even though they look alike (both are empty):
135+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
81136
82137
```js run
83138
let a = {};
@@ -86,7 +141,11 @@ let b = {}; // dua objek yang berdiri sendiri
86141
alert( a == b ); // false
87142
```
88143
144+
<<<<<<< HEAD
89145
Untuk perbandingan seperti `obj1 > obj2` atau untuk perbandingan dengan sebuah nilai primitif `obj == 5`, objek akan diubah dahulu menjadi primitif. Kita akan belajar bagaimana perubahan objek sebentar lagi, akan tetapi sebenarnya, perbandingan seperti itu muncul sangat jarang, biasanya hanya sebuah hasil dari kesalahan koding.
146+
=======
147+
For comparisons like `obj1 > obj2` or for a comparison against a primitive `obj == 5`, objects are converted to primitives. We'll study how object conversions work very soon, but to tell the truth, such comparisons are needed very rarely, usually they appear as a result of a programming mistake.
148+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
90149
91150
## Penggandaan dan penggabungan, Object.assign
92151

1-js/04-object-basics/04-object-methods/article.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,19 @@ user.sayHi = function() {
3232
user.sayHi(); // Hello!
3333
```
3434

35+
<<<<<<< HEAD
3536
Di sini kita hanya menggunakan sebuah fungsi ekspresi untuk membuat fungsi dan menugaskannya ke properti `user.sayHi` pada objek.
3637

3738
Kemudian kita memanggil fungsi tersebut. Kini "pengguna" bisa berbicara!
3839

3940
Sebuah fungsi yang mana merupakan properti dari sebuah objek disebut sebagai *metode*-nya.
41+
=======
42+
Here we've just used a Function Expression to create a function and assign it to the property `user.sayHi` of the object.
43+
44+
Then we can call it as `user.sayHi()`. The user can now speak!
45+
46+
A function that is a property of an object is called its *method*.
47+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
4048
4149
Jadi, di sini kita memiliki sebuah metode `sayHi` dari objek`user`.
4250

@@ -160,14 +168,24 @@ let user = {
160168
let admin = user;
161169
user = null; // timpa/overwrite agar terlihat lebih jelas
162170

171+
<<<<<<< HEAD
163172
admin.sayHi(); // Uups! dalam sayHi(), nama yang lama sedang digunakan! error!
173+
=======
174+
*!*
175+
admin.sayHi(); // TypeError: Cannot read property 'name' of null
176+
*/!*
177+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
164178
```
165179

166180
Jika kita menggunakan `this.name` ketimbang `user.name` dalam `alert`, maka kodenya akhirnya berfungsi.
167181

168182
## "this" tidak ditemukan
169183

184+
<<<<<<< HEAD
170185
Dalam JavaScript, kata kunci `this` berperilaku tidak seperti kebanyak bahasa pemrograman lainnya. 'this' juga bisa digunakan dalam fungsi apapun.
186+
=======
187+
In JavaScript, keyword `this` behaves unlike most other programming languages. It can be used in any function, even if it's not a method of an object.
188+
>>>>>>> d6e88647b42992f204f57401160ebae92b358c0d
171189
172190
Tidak ada *syntax error* dalam contoh berikut ini:
173191

0 commit comments

Comments
 (0)