|
2 | 2 |
|
3 | 3 | [Instagram](https://www.instagram.com/theavocoder) hesabımda, günlük olarak çoktan seçmeli Javascript soruları paylaşıyorum, ayrıca burada da paylaşacağım!
|
4 | 4 |
|
5 |
| -Temelden ileri düzeye: Javascript'i ne kadar iyi bildiğinizi test edin, bilginizi biraz tazeleyin ya da mülakatanıza hazırlanın! :muscle: :rocket: Repoyu haftalık olarak yeni sorularla güncelliyorum. Son güncelleme: <a href=#20190805><b>5 Ağustos</b></a> |
| 5 | +Temelden ileri düzeye: Javascript'i ne kadar iyi bildiğinizi test edin, bilginizi biraz tazeleyin ya da mülakatanıza hazırlanın! :muscle: :rocket: Repoyu haftalık olarak yeni sorularla güncelliyorum. Son güncelleme: <a href=#20190817><b>17 Ağustos</b></a> |
6 | 6 |
|
7 | 7 | Cevaplar, soruların altında gizlenmiştir. Görmek için sadece tıklayın. İyi şanşlar :heart:
|
8 | 8 |
|
@@ -2972,3 +2972,244 @@ Yukarıdaki örnek çalışır. `[ 'banana', 'apple', 'orange', 'pear' ]` dizisi
|
2972 | 2972 |
|
2973 | 2973 | </p>
|
2974 | 2974 | </details>
|
| 2975 | + |
| 2976 | +--- |
| 2977 | + |
| 2978 | +###### <a name=20190817></a>95. Çıktısı Nedir? |
| 2979 | + |
| 2980 | +```javascript |
| 2981 | +function nums(a, b) { |
| 2982 | + if |
| 2983 | + (a > b) |
| 2984 | + console.log('a is bigger') |
| 2985 | + else |
| 2986 | + console.log('b is bigger') |
| 2987 | + return |
| 2988 | + a + b |
| 2989 | +} |
| 2990 | + |
| 2991 | +console.log(nums(4, 2)) |
| 2992 | +console.log(nums(1, 2)) |
| 2993 | +``` |
| 2994 | + |
| 2995 | +- A: `a is bigger`, `6` ve `b is bigger`, `3` |
| 2996 | +- B: `a is bigger`, `undefined` ve `b is bigger`, `undefined` |
| 2997 | +- C: `undefined` ve `undefined` |
| 2998 | +- D: `SyntaxError` |
| 2999 | + |
| 3000 | +<details><summary><b>Cevap</b></summary> |
| 3001 | +<p> |
| 3002 | + |
| 3003 | +#### Cevap: B |
| 3004 | + |
| 3005 | +JavaScript'te, noktalı virgülü (`;`) özellikle yazmak _zorunda değiliz_, ancak JavaScript motoru ifadelerden sonra noktalı virgül eklemektedir. bu **Automatic Semicolon Insertion**, **Otomatik Noktalı Virgül Ekleme**, olarak adlandırılır. İfade, örneğin, değişkenler ya da `throw`, `return`, `break`, vb. gibi anahtar kelimeler olabilir. |
| 3006 | + |
| 3007 | +Burada, bir `return` ifadesi yazdık, ve _yeni bir satırda_ başka bir değer olarak `a + b`. Ancak, `a + b` yeni satırda olduğundan, JavaScript motoru onun aslında bizim döndürmek istediğimiz değer olduğunu bilmiyor. Onun yerine, `return`'den sonra otomatik olarak noktalı virgül ekliyor. Şöyle düşünebilirsiniz: |
| 3008 | + |
| 3009 | +```javascript |
| 3010 | + return; |
| 3011 | + a + b |
| 3012 | +``` |
| 3013 | + |
| 3014 | +Fonksiyon `return` anahtar kelimesinden sonra çalışmayı durduracağından, `a + b` asla ulaşılamaz demektir. Eğer hiçbir değer döndürülmezse, fonksiyon `undefined` döndürür. Dikkat etmeniz gereken, `if/else` ifadelerinden sonra otomatik ekleme yapılmadığıdır! |
| 3015 | + |
| 3016 | +</p> |
| 3017 | +</details> |
| 3018 | + |
| 3019 | +--- |
| 3020 | + |
| 3021 | +###### 96. Çıktısı Nedir? |
| 3022 | + |
| 3023 | +```javascript |
| 3024 | +class Person { |
| 3025 | + constructor() { |
| 3026 | + this.name = "Lydia" |
| 3027 | + } |
| 3028 | +} |
| 3029 | + |
| 3030 | +Person = class AnotherPerson { |
| 3031 | + constructor() { |
| 3032 | + this.name = "Sarah" |
| 3033 | + } |
| 3034 | +} |
| 3035 | + |
| 3036 | +const member = new Person() |
| 3037 | +console.log(member.name) |
| 3038 | +``` |
| 3039 | + |
| 3040 | +- A: `"Lydia"` |
| 3041 | +- B: `"Sarah"` |
| 3042 | +- C: `Error: cannot redeclare Person` |
| 3043 | +- D: `SyntaxError` |
| 3044 | + |
| 3045 | +<details><summary><b>Cevap</b></summary> |
| 3046 | +<p> |
| 3047 | + |
| 3048 | +#### Cevap: B |
| 3049 | + |
| 3050 | +Sınıfları diğer sınıf/fonksiyon yapıcılara eşitleyebiliriz. Bu örnekte, `Person`'ı `AnotherPerson`'a eşitliyoruz. Bu yapıcıdaki `name` `Sarah`'dır, yani `Person` instance'ı olan `member` üzerindeki `name` özelliği `"Sarah"`'tır. |
| 3051 | + |
| 3052 | +</p> |
| 3053 | +</details> |
| 3054 | + |
| 3055 | +--- |
| 3056 | + |
| 3057 | +###### 97. Çıktısı Nedir? |
| 3058 | + |
| 3059 | +```javascript |
| 3060 | +const info = { |
| 3061 | + [Symbol('a')]: 'b' |
| 3062 | +} |
| 3063 | + |
| 3064 | +console.log(info) |
| 3065 | +console.log(Object.keys(info)) |
| 3066 | +``` |
| 3067 | + |
| 3068 | +- A: `{Symbol('a'): 'b'}` ve `["{Symbol('a')"]` |
| 3069 | +- B: `{}` ve `[]` |
| 3070 | +- C: `{ a: "b" }` ve `["a"]` |
| 3071 | +- D: `{Symbol('a'): 'b'}` ve `[]` |
| 3072 | + |
| 3073 | +<details><summary><b>Cevap</b></summary> |
| 3074 | +<p> |
| 3075 | + |
| 3076 | +#### Cevap: D |
| 3077 | + |
| 3078 | +Symbol _sayılabilir_, "_enumerable_" değildir. Object.keys methodu nesne üzerindeki tüm _sayılabilir_ özellikleri döndürür. Symbol gizli kalır ve boş bir dizi döndürülür. Tüm nesne loglandığı zaman, bütün özellikler görülebilir, sayılabilir olmayanlar bile. |
| 3079 | + |
| 3080 | +Bu symbol'ün birçok özelliğinden birisidir: tamamen benzersiz bir değer temsil etmenin yanında (ki nesneler üzerindeki kazara isim çakışmasını önler, örneğin aynı nesneye özellikler eklemek isteyen 2 kütüphaneyle çalışırken), ayrıca bu yolla nesne üzerindeki özellikleri "saklayabilirsiniz" (gerçi tamamen değil. `Object.getOwnPropertySymbols()` methodunu kullanarak symbol'lere hala erişebilirsiniz). |
| 3081 | + |
| 3082 | +</p> |
| 3083 | +</details> |
| 3084 | + |
| 3085 | +--- |
| 3086 | + |
| 3087 | +###### 98. Çıktısı Nedir? |
| 3088 | + |
| 3089 | +```javascript |
| 3090 | +const getList = ([x, ...y]) => [x, y] |
| 3091 | +const getUser = user => { name: user.name, age: user.age } |
| 3092 | + |
| 3093 | +const list = [1, 2, 3, 4] |
| 3094 | +const user = { name: "Lydia", age: 21 } |
| 3095 | + |
| 3096 | +console.log(getList(list)) |
| 3097 | +console.log(getUser(user)) |
| 3098 | +``` |
| 3099 | + |
| 3100 | +- A: `[1, [2, 3, 4]]` ve `undefined` |
| 3101 | +- B: `[1, [2, 3, 4]]` ve `{ name: "Lydia", age: 21 }` |
| 3102 | +- C: `[1, 2, 3, 4]` ve `{ name: "Lydia", age: 21 }` |
| 3103 | +- D: `Error` ve `{ name: "Lydia", age: 21 }` |
| 3104 | + |
| 3105 | +<details><summary><b>Cevap</b></summary> |
| 3106 | +<p> |
| 3107 | + |
| 3108 | +#### Cevap: A |
| 3109 | + |
| 3110 | +`getList` fonksiyonu argüman olarak bir dizi alır. `getList` fonksiyonunun parentezleri arasında, bu diziyi anında parçalıyoruz. Şu şekilde görebilirsiniz: |
| 3111 | + |
| 3112 | + `[x, ...y] = [1, 2, 3, 4]` |
| 3113 | + |
| 3114 | + `...y` rest parametresi ile, dizi içinde "geriye kalan" tüm argümanları topluyoruz. Geriye kalan argümanlar `2`, `3`, ve `4` bu durumda. `y`'nin değeri tüm rest parametleri içeren bir dizi. `x`'in değeri `1`'a eşit, yani `[x, y]` logladığımız zaman, `[1, [2, 3, 4]]` loglanır. |
| 3115 | + |
| 3116 | + `getUser` fonksiyonu bir nesne alıyor. Ok fonksiyonlar ile, eğer sadece bir değer döndürmek istiyorsak süslü parentezleri yazmak _zorunda değiliz._ Ancak, bir ok fonksiyondan bir _nesne_ döndürmek istiyorsanız, parentezler arasında yazmak zorundasınız, aksi halde değer döndürülmez! Aşağıdaki fonksiyon bir nesne döndürecektir: |
| 3117 | + |
| 3118 | +```const getUser = user => ({ name: user.name, age: user.age })``` |
| 3119 | + |
| 3120 | +Bu örnekte değer döndürülmediği için, fonksiyon `undefined` döndürür. |
| 3121 | + |
| 3122 | +</p> |
| 3123 | +</details> |
| 3124 | + |
| 3125 | +--- |
| 3126 | + |
| 3127 | +###### 99. Çıktısı Nedir? |
| 3128 | + |
| 3129 | +```javascript |
| 3130 | +const name = "Lydia" |
| 3131 | + |
| 3132 | +console.log(name()) |
| 3133 | +``` |
| 3134 | + |
| 3135 | +- A: `SyntaxError` |
| 3136 | +- B: `ReferenceError` |
| 3137 | +- C: `TypeError` |
| 3138 | +- D: `undefined` |
| 3139 | + |
| 3140 | +<details><summary><b>Cevap</b></summary> |
| 3141 | +<p> |
| 3142 | + |
| 3143 | +#### Cevap: C |
| 3144 | + |
| 3145 | + `name` değişkeni string bir değer saklıyor, ki bu bir fonksiyon değil, bu yüzden çağrılamaz. |
| 3146 | + |
| 3147 | +TypeError'lar bir değer beklenilen tipte olmadığı zaman fırlatılır. `name`'i çağırmaya çalıştığımızdan, JavaScript `name`'in bir fonksiyon olmasını bekliyor. Ancak o bir string, bu yüzden TypeError fırlatılır: name is not a function! |
| 3148 | + |
| 3149 | +SyntaxError'lar JavaScript'in geçerli olmadığı bir şeyler yazdığız zaman fırlatılır, örneğin `return`'ü `retrun` olarak yazdığınız zaman. |
| 3150 | + |
| 3151 | +ReferenceError'lar erişmeye çalıştığınız değer için JavaScript referans bulamadığı zaman fırlatılır. |
| 3152 | + |
| 3153 | +</p> |
| 3154 | +</details> |
| 3155 | + |
| 3156 | +--- |
| 3157 | + |
| 3158 | +###### 100. Çıktısı Nedir? |
| 3159 | + |
| 3160 | +```javascript |
| 3161 | +// 🎉✨ 100. soru! ✨🎉 |
| 3162 | + |
| 3163 | +const output = `${[] && 'Im'}possible! |
| 3164 | +You should${'' && `n't`} see a therapist after so much JavaScript lol` |
| 3165 | +``` |
| 3166 | + |
| 3167 | +- A: `possible! You should see a therapist after so much JavaScript lol` |
| 3168 | +- B: `Impossible! You should see a therapist after so much JavaScript lol` |
| 3169 | +- C: `possible! You shouldn't see a therapist after so much JavaScript lol` |
| 3170 | +- D: `Impossible! You shouldn't see a therapist after so much JavaScript lol` |
| 3171 | + |
| 3172 | +<details><summary><b>Cevap</b></summary> |
| 3173 | +<p> |
| 3174 | + |
| 3175 | +#### Cevap: B |
| 3176 | + |
| 3177 | +`[]` doğrusal bir değerdir. `&&` operatörü ile, eğer soldaki değer doğrusal bir değerse sağdaki değer döndürülür. Bu örnekte, soldaki değer `[]` doğrusal bir değerdir, böylece `"Im"` döndürülür. |
| 3178 | + |
| 3179 | +`""` yanlış-ımsı bir değerdir. Eğer soldaki değer yanlış-ımsı ise, bir şey döndürülmez. `n't` döndürülmedi. |
| 3180 | + |
| 3181 | +</p> |
| 3182 | +</details> |
| 3183 | + |
| 3184 | +--- |
| 3185 | + |
| 3186 | +###### 101. Çıktısı Nedir? |
| 3187 | + |
| 3188 | +```javascript |
| 3189 | +const one = (false || {} || null) |
| 3190 | +const two = (null || false || "") |
| 3191 | +const three = ([] || 0 || true) |
| 3192 | + |
| 3193 | +console.log(one, two, three) |
| 3194 | +``` |
| 3195 | + |
| 3196 | +- A: `false` `null` `[]` |
| 3197 | +- B: `null` `""` `true` |
| 3198 | +- C: `{}` `""` `[]` |
| 3199 | +- D: `null` `null` `true` |
| 3200 | + |
| 3201 | +<details><summary><b>Cevap</b></summary> |
| 3202 | +<p> |
| 3203 | + |
| 3204 | +#### Cevap: C |
| 3205 | + |
| 3206 | +`||` operatörü ile, ile doğrusal operand'ı döndürebiliriz. Eğer tüm değerler yanlış-ımsı ise, son operand döndürülür. |
| 3207 | + |
| 3208 | +`(false || {} || null)`: boş nesne `{}` doğrusal bir değerdir. İlk (ve tek) doğrusal değer, döndürülür. `one` `{}` eşittir. |
| 3209 | + |
| 3210 | +`(null || false || "")`: tüm operand'lar yanlış-ımsı. Bu demektir ki son operand, `""` döndürülür. `two` `""` eşittir. |
| 3211 | + |
| 3212 | +`([] || 0 || "")`: boş dizi `[]` doğrusal bir değerdir. Bu ilk doğrusal değer, döndürülür. `three` `[]` eşittir. |
| 3213 | + |
| 3214 | +</p> |
| 3215 | +</details> |
0 commit comments