JavaScript語言中的Literal Syntax特性分析
JavaScript語言的文本化的特性?My God,難道有哪門語言的編寫不是使用文本嗎?不使用文本還能用啥?用意識流嗎?真是faint哈。
雖然我們的每種語言都使用文本來表示,說遠點asm是文本的吧,BASIC是文本的吧,C/C++、C#、java啥的都是文本吧。這沒有錯,它們的語言表達都是文本形式,可是它們卻不能使用文本來表示所有內(nèi)容。簡單類型比如數(shù)字啊字符串啊還行,但是C#或Java可以用文本表示一個對象實例嗎(不是用一堆定義語句,然后再new個對象實例哦)?顯然是不行的,然而JavaScript卻提供了對所有數(shù)據(jù)類型包括復(fù)雜對象的文本化書寫方式。
我們編寫JS常用的數(shù)據(jù)類型包括:Number、Boolean、String、Array、Function和Object。其中這里面的Number、Boolean和String屬于簡單類型,文字方式書寫是它們的基本方式,如果用new xxx()來定義反而會讓人覺得是脫褲子打屁。
Number: var i = 100; i = 100.11;
Boolean: var b = true; b = false;
String: var str = 'this is a string.';
對于復(fù)雜數(shù)據(jù)類型,函數(shù)、數(shù)組和對象我們怎么辦呢?函數(shù)不用說了,都是以文本方式定義的。下面就看看數(shù)組和對象是怎么表示的吧。假如我們有一個數(shù)組:
var ary = new Array(6);
ary[0] = null;
ary[1] = 1;
ary[2] = 'string';
ary[3] = true;
ary[4] = function()
{
return 'keke';
};
ary[5] = new MyObject();
我們使用文本方式(也就是我們平時說的初始化方式)來寫這個數(shù)組它將是:
var ary1 = [null, 1, 'string', true, function(){return 'keke';}, new MyObject()];
比上面精簡的多吧?而且這里數(shù)組的文本化方式還可以寫的遠比這復(fù)雜的多,比如:
var ary3 = [1,[2,[3,[4,[5,[6,[7,[8,[9,[0]]]]]]]]]];
第三個ary3是啥數(shù)組,我也不知道了@_@。
不對呀,怎么ary[5]是new MyObject()呢?哦,不好意思,我們再來把MyObject示例一下,假如它被定義為:
function MyObject()
{
this.Properties1 = 1;
this.Properties2 = '2';
this.Properties3 = [3];
this.toString = function()
{
return '[class MyObject]';
};
}
MyObject.prototype.Method1 = function()
{
return this.Properties1 + this.Properties3[0];
};
MyObject.prototype.Method2 = function()
{
return this.Properties2;
};
那么我們的var obj = new MyObject()怎么文本化呢?其實也很簡單的了,obj的文本化定義如下:
var obj =
{
Properties1 : 1, Properties2 : '2', Properties3 : [3],
Method1 : function(){ return this.Properties1 + this.Properties3[0];},
Method2 : function(){ return this.Preperties2; }
};
這個類實例的直接文本化定義雖然算不上精簡,但也還不錯吧。這樣我們就可以用這個文本化類實例去替換ary中那個new MyObject()了。類實例文本化定義的語法為,用一對"{}"表示類,也就說"{}"完全等價于"new Object()"。然后"{}"內(nèi)按"key:value"組織屬性和方法,key可以是任意[A-Za-z0-9_]的字符組合,甚至數(shù)字開頭都是合法的@_@,value是任何的合法的文本化JavaScript數(shù)據(jù),最后每個鍵值對用","來分隔就行了。
相關(guān)文章
跟我學(xué)習(xí)javascript的arguments對象
跟我學(xué)習(xí)javascript的arguments對象,需要的朋友可以參考下2015-11-11

