temeller
Bunu bilmiyor olabilirsiniz, ancak JavaScript'te dize, sayı veya mantıksal ilkellerle her etkileşime girdiğimizde, nesne gölgeleri ve zorlamadan oluşan gizli bir dünyaya giriyoruz.
string, number, boolean, null, undefined ve symbol.
JavaScript'inizde 7 ilkel tipi vardır: undefined, null, boolean, string, number, bigintve symbol. Diğer her şey bir nesnedir. İlkel türleri boolean, stringve numberbunların nesne muadilleri tarafından sarılabilir. Bu nesneler, sırasıyla Boolean, Stringve Numberyapıcılarının örnekleridir .
typeof true; //"boolean"
typeof new Boolean(true); //"object"
typeof "this is a string"; //"string"
typeof new String("this is a string"); //"object"
typeof 123; //"number"
typeof new Number(123); //"object"
İlkellerin özelliği yoksa, neden "this is a string".lengthbir değer döndürür?
Çünkü JavaScript, ilkel öğeler ve nesneler arasında kolayca zorlanır. Bu durumda, özellik uzunluğuna erişmek için dize değeri bir dizge nesnesine zorlanır. İp nesnesi yalnızca bir saniyeden kısa bir süre için kullanılır ve ardından çöp toplama tanrılarına feda edilir - ancak TV keşif programlarının ruhuna uygun olarak, yakalanması zor yaratığı yakalayıp daha fazla analiz için koruyacağız ...
Bunu daha fazla göstermek için String yapıcı prototipine yeni bir özellik eklediğimiz aşağıdaki örneği göz önünde bulundurun.
String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty; // 5
Bu yolla, ilkellerin ilgili nesne yapıcıları tarafından tanımlanan tüm özelliklere (yöntemler dahil) erişimi vardır.
Böylece, ilkel türlerin gerektiğinde ilgili Nesne muadillerine uygun şekilde zorlayacağını gördük.
toString()Yöntemin analizi
Aşağıdaki kodu düşünün
var myObj = {lhs: 3, rhs: 2};
var myFunc = function(){}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
myObj.toString(); // "[object Object]"
myFunc.toString(); // "function(){}"
myString.toString(); // "This is a sample String"
myNumber.toString(); // "4"
myArray.toString(); // "2,3,5"
Yukarıda tartışıldığı gibi, gerçekte olan şey, toString()yöntemi ilkel tipte çağırdığımızda, yöntemi çağırmadan önce nesnenin karşılığına zorlanması gerektiğidir.
ie myNumber.toString(), Number.prototype.toString.call(myNumber)diğer ilkel türlere eşdeğer ve benzerdir.
Ancak, ilkel türün toString()karşılık gelen Object yapıcı işlevi karşılığının yöntemine geçirilmesi yerine, ilkel türün toString()Object function constructor ( Object.prototype.toString.call(x)) yöntemine parametre olarak aktarılmasını zorlarsak ?
Object.prototype.toString () öğesine daha yakından bakın
Uyarınca belgeleri toString yöntemi çağrıldığında, aşağıdaki adımlar gerçekleştirilir:
- Eğer
thisdeğerdir undefined, dönmek "[object Undefined]".
- Eğer
thisdeğerdir null, dönmek "[object Null]".
- Bu değer yukarıdakilerden hiçbiri değilse , değeri argüman olarak geçirmenin
Osonucu olsun .toObjectthis
- Sınıfın
[[Class]]dahili özelliğinin değeri olsun O.
- Üç Dizeleri bitiştirme sonucudur dize değerini döndürür
"[object ", classve "]".
Bunu aşağıdaki örnekten anlayın
var myObj = {lhs: 3, rhs: 2};
var myFunc = function(){}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
var myUndefined = undefined;
var myNull = null;
Object.prototype.toString.call(myObj); // "[object Object]"
Object.prototype.toString.call(myFunc); // "[object Function]"
Object.prototype.toString.call(myString); // "[object String]"
Object.prototype.toString.call(myNumber); // "[object Number]"
Object.prototype.toString.call(myArray); // "[object Array]"
Object.prototype.toString.call(myUndefined); // "[object Undefined]"
Object.prototype.toString.call(myNull); // "[object Null]"
Referanslar:
https://es5.github.io/x15.2.html#x15.2.4.2
https://es5.github.io/x9.html#x9.9
https://javascriptweblog.wordpress.com/ 2010/09/27 / gizli-life-of-javascript-ilkel /