2011-04-22 8 views
6

MDN durumları:javascript: ilkel dizeleri yöntemleri var mı?

ilkel, temel değer

bir amacı değildir ve herhangi bir yöntem bulunmamaktadır bir veri. dize, sayı, Boole, boş, tanımsız: JavaScript 5 ilkel veri türlerini vardır. boş ve tanımlanmamış bir hariç, tüm ilkel değerleri nesne eşdeğer ilkel değerler etrafında sarma, örneğin yüzey Bir String nesnesi , bir dize ilkelini sarar. Tüm ilkelleri değişmezdir.

yüzden çağırdığınızda bir "s".replace veya "s".anything o new String("s").replace ve new String("s").anything eşdeğerdir?

cevap

12

Hayır, dize ilkel yöntemler yoktur. Sayısal ilkel olduğu gibi, JavaScript çalışma zamanı gibi yapılara bunu vermek üzere çağırılan tam gelişmiş "Dize" nesnelere onları teşvik edecektir: Özellikle Bazı dillerde

var space = "hello there".indexOf(" "); 

(iyi, Java, ama sanırım terim, ortak kullanımdadır) dilin, uygun olduğunda nesne sarmalayıcıları içindeki ilkelleri "kutları" söylediği söylenir. Rakamlarla, belirteç dilbilgisi tutkunları nedeniyle biraz daha karmaşıktır; "." Çünkü

. olması gereken şekilde yorumlanmayacak; ancak:

iyi çalışıyor. dilbilgisi nedenle örneğin, belirsiz değil — bu konuda dize ilkel — ve boolelerde ile:

var foo = true.toString(); 

çalışacaktır.

+0

heys Btw çift nokta sözdizimi "standart" nedir? 27..toLocaleString() – Pacerier

+0

gibi. Eh, en azından Chrome'da çalışıyor gibi görünüyor ... sorun, düşük seviyeli "jeton dilbilgisi" ilk "." kayan noktalı sayıların görünümünden dolayı ("23.223") numaraya. Ama bu çift nokta trick * çalışmalıdır, çünkü tokenizer ikinci "." De duracaktır, bu da özellik referans ifadesini oluşturmak için ayrıştırıcıya bırakacaktır. – Pointy

+0

Şahsen, (27) .toLocaleString() 'yi tercih ederim çünkü biraz "" parçasını kaybetmek kolaydır. " orada sıkışmış. Ama bu sadece bir stilistik fikir ve çok fazla değmez :-) – Pointy

4

teknik olarak doğru cevap "hayır" dır.

gerçek dünya cevap

"hayır, ama yine de çalışacaktır" dir. Eğer

"s".replace() 

gibi bir şey yaptığım zaman tercüman size

var str = new String("s") 

ile yaratılmış gibi aslında dize üzerinde çalışmak istediğiniz bilir ve bu nedenle bu yapmış olsaydı gibi davranır çünkü.