Values

Kategori: Javascript , 30 Ekim 2019 , JanFranco


Javascript, bir dilin ihtiyaç duyabileceği çoğu değerleri bünyesinde barındırır: booelan değerler, sayılar, stringler, diziler... Tüm normal değerler, özelliklere sahiptir. Bu özelliklerin adı ve değeri vardır. Bu özelliklere nokta (.) operatörü ile erişebiliriz:


var obj = {};
obj.foo = 123;
obj.foo;
>>
123

'abc'.toUpperCase()
>>
'ABC'
Değerleri iki kategoride inceleyebiliriz: Primitive (ilkel) değerler ve objeler. Boolean değerler, sayılar, stringler, null değerler, undefined değerler primitive değerlerdir. Geri kalan tüm değerler objedir. Objeleri ilkel değerlerden ayıran en büyük fark, her bir objenin eşsiz bir numarası (id) vardır. Bunu aşağıdaki örnekten görebiliriz:


var obj1 = {};
var obj2 = {};
obj1 === obj2
>>
false

var prim1 = 123;
var prim2 = 123;
prim1 === prim2
>>
true
İlkel değerler ile objelerin özellikleri karşılaştıralım. İlk olarak ilkel değerlere örnekler verelim:


Booleans: true, false
Numbers: 1234, 3.149
Strings: 'abc', "abc"
Nonvalues: undefined, null
İlkel değerler içeriklerine göre karşılaştırılırlar:


3 === 3
'abc' === 'abc'
>>
true
true
Yeni bir özellik eklenemez, var olan bir özellik silinemez ve değiştirilemez:


var str = 'abc';
str.length = 1;
str.length
>>
3

str.foo = 3;
str.foo
>>
undefined
Burada herhangi bir hata almıyoruz fakat değişiklik de yapılmıyor. Son özellik ise şudur, kendi ilkel veri tiplerimizi oluşturamayız. Objelere geçelim. İlkel olmayan tüm değerler objedir. Objelere örnek verelim:


Plain (constructor) objects: { firstName: 'Jan', lastName: 'Franco' }
Arrays: ['jfblog', 'jan', 'franco']
Regular expresions: /^a+b+$/
Objeler kendi id'lerine (numaralarına) göre karşılaştırılırlar:


{} === {}
>>
false
Nokta operatörü ile yeni özellikler ekleyebiliriz, var olan özellikleri değiştirebilir veya silebiliriz:


var obj = {};
obj.foo = 123;
obj.foo
>>
123
Kendi objelerimizi oluşturabiliriz. İlkel değerlerden undefined ve null için ayrı konuşmalıyız. undefined, değer yok anlamına gelmektedir. Initialize edilmemiş değişkenler, belirtilmemiş parametreler, bulunamayan özellikler vs. Fonksiyonlar spesifik olarak bir değer return etmiyorsa, arkaplanda undefined değeri return edilir. null, obje yok anlamına gelmektedir:


function returnFoo(x) { return x.foo }

returnFoo(true)
returnFoo(0)
>>
undefined
undefined

returnFoo(null)
returnFoo(undefined)
>>
TypeError: Cannot read property 'foo' of null
TypeError: Cannot read property 'foo' of undefined
undefined ve null değerleri biraz daha inceleyelim. undefined değer alabileceğimiz olası durumlar:


var foo; // Uninitialized
foo
>>
undefined

function f(x) { return x }
f() // Missing parameter
>>
undefined

var obj = {};
obj.foo // Nonexistent property
>>
undefined

function f() {}
function g() { return; } // No explicitly returned
f()
g()
>>
undefined
undefined
null değerini alabileceğimiz bazı durumlar:


Object.getPrototypeOf(Object.prototype) // Last element in the protype chain is null
>>
null

/x/.exec('aaa') // No match for the regular expresion in the string
>>
null

*** Bir değerin null veya undefined değere sahip olup olmadığını if yapısı ile öğrenebiliriz:

if (x === null)
if (x === undefined)

if (x != undefined && x != null) // Does x have a value?
if (x === undefined ||x === null) // Is x a non-value?
if (x) // Is x truthy?
if (!x) // Is x falsy?
İlkel değerleri oluşturmak için constructorlar mevcuttur: Boolean, Number ve String. Bu constructorlar yani yapıcı objeler iki şekilde kullanılabilirler: Obje oluşturmak için veya fonksiyon olarak. İlk olarak obje oluşturmak için kullanalım:


typeof new String('abc')
>>
'object'

new String('abc') === 'abc'
>>
false
Constructor yapıları fonksiyon olarak kullanırsak belirtilen ilkel tipte veriyi return alırız:


String(123)
>>
123
Operatörleri ayrı bir yazıda anlatacağım fakat ilkel değerlerin constructor yapılarını ne zaman kullanabileceğimize bir örnek vereyim. Javascript'te genel olarak operatörler, değerleri tür dönüşümüne zorlarlar:


'3' * '4' // * operand converts to numbers
>>
12

3 + ' times' // If we have a string, + operator converts other value to a string
>>
'3 times'
Şimdi bir örnek yapalım, bir obje oluşturalım ve width adında bir özellik verelim. Bu özelliğin değeri 100 olsun. Bir sonraki satırda bu değeri 20 ile toplayalım:


var formData = { width: '100' };
var w = formData.width;
var outer = w + 20;
Burada değerin 120 olması beklenir fakat değer '10020' olarak görülür. Bunu engellemek için constructor yapıyı kullanabiliriz:


var w = Number(formData.width);
Görüldüğü gibi constructor yapıları fonksiyon olarak kullanarak tür dönüşümleri yapabiliriz. Boolean() fonksiyonu ile bir değeri boolean değere dönüştürebiliriz. Aşağıdaki değerlerleri false değere çevirebiliriz:


undefined, null
false
0, NaN
''
Diğer tüm değerleri true değerine çevirebiliriz. Number() fonksiyonu ile undefined değerini NaN değerini, null değerini 0 değerine, false değerini 0'a, true değerini 1'e çevirebiliriz. String() fonksiyonu ile herhangi bir değeri string ifadeye çevirebiliriz:


String(null)
String(123.45)
String(false)
>>
'null'
'123.45'
'false'


Sonraki Yazı: Operators
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın