Skip to content

Commit 8356946

Browse files
committed
Translated types/typeof.
1 parent 10076c3 commit 8356946

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

doc/tr/types/typeof.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
## `typeof` operatörü
2+
3+
The `typeof` operatörü ([`instanceof`](#types.instanceof) ile birlikte)
4+
herhalde JavaScript'in en büyük tasarım hatalarından biridir, çünkü neredeyse
5+
**tamamen arızalıdır**.
6+
7+
`instanceof` operatörünün sınırlı kullanımı olsa da, `typeof` operatörünün
8+
gerçekte tek bir pratik kullanımı vardır, ve bunun da bir nesnenin tipini
9+
kontrol etmekle ilgili **yoktur**.
10+
11+
> **Not:** `typeof` fonksiyon sentaksı (mesela ``typeof(obj)`), ile de
12+
> çağrılabilse de bu gerçek bir fonksiyon çağrısı değildir. İki parantezin
13+
> içindeki ifadenin döndürdüğü değer typeof operatöre verilir. `typeof` diye
14+
> bir fonksiyon yoktur.
15+
16+
### JavaScript tip tablosu
17+
18+
Değer Sınıf Tip
19+
-------------------------------------
20+
"foo" String string
21+
new String("foo") String object
22+
1.2 Number number
23+
new Number(1.2) Number object
24+
true Boolean boolean
25+
new Boolean(true) Boolean object
26+
new Date() Date object
27+
new Error() Error object
28+
[1,2,3] Array object
29+
new Array(1, 2, 3) Array object
30+
new Function("") Function function
31+
/abc/g RegExp object (function in Nitro/V8)
32+
new RegExp("meow") RegExp object (function in Nitro/V8)
33+
{} Object object
34+
new Object() Object object
35+
36+
Yukarıdaki tabloda *Tip* sütunu `typeof` operatörünün verdiği sonucu gösterir.
37+
Açıkça görülebileceği gibi, bu sonuç tutarlı olmaktan çok uzaktır.
38+
39+
*Sınıf* sütunu bir nesnenin dahili `[[Class]]` özelliğini gösterir.
40+
41+
> **Spesifikasyondan:** `[[Class]]` özelliğinin değeri şu katarlardan biri
42+
> olabilir: `Arguments`, `Array`, `Boolean`, `Date`, `Error`,
43+
> `Function`, `JSON`, `Math`, `Number`, `Object`, `RegExp`, `String`.
44+
45+
`[[Class]]` özelliğinin değerini almak için `Object.prototype` 'ın `toString`
46+
metodu kullanılmalıdır.
47+
48+
### Bir nesnenin sınıfı
49+
50+
Spesifikasyona göre `[[Class]]` değerine erişmenin tek yolu
51+
`Object.prototype.toString` kullanmaktır.
52+
53+
function is(type, obj) {
54+
var clas = Object.prototype.toString.call(obj).slice(8, -1);
55+
return obj !== undefined && obj !== null && clas === type;
56+
}
57+
58+
is('String', 'test'); // true
59+
is('String', new String('test')); // true
60+
61+
Yukarıdaki örnekte, `Object.prototype.toString` çağrıldığında
62+
[this](#function.this) 'in değeri `[[Class]]` değeri aranan nesne olarak
63+
atanmış olmaktadır.
64+
65+
> **ES5 Notu:** Kolaylık sağlamak için `Object.prototype.toString` 'in `null`
66+
> ve `undefined` için verdiği değerler `Object` 'ten `Null` ve `Undefined` 'a
67+
> **değiştirildi**.
68+
69+
### Bir değişkenin tanımlandığını kontrol etmek
70+
71+
typeof foo !== 'undefined'
72+
73+
Yukarıdaki satır `foo` değişkeninin tanımlanıp tanımlanmadığını belirler;
74+
tanımlanmamış bir değişkene erişmek bir `ReferenceError` hatası oluştur.
75+
`typeof` operatörünün tek kullanışlı olduğu şey işte budur.
76+
77+
### Sonuç
78+
79+
Bir nesnenin tipini kontrol etmek için `Object.prototype.toString` 'in
80+
kullanılması şiddetle tavsiye edilir; çünkü bunu yapmanın tek güvenilir yoludur.
81+
Yukarıdaki tip tablosunda gösterildiği gibi, `typeof` operatörünün bazı
82+
sonuçları spesifikasdyonda tanımlanmamıştır; bu nedenle, çeşitli platformlarda
83+
farklılık gösterebilirler.
84+
85+
Bir değişkenin tanımlandığını kontrol etmek dışında, `typeof` operatörün
86+
kullanımından **her ne pahasına olursa olsun** kaçınılmalıdır.
87+

0 commit comments

Comments
 (0)