java script小知識
1、json的使用
JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。易於人閱讀和編寫,同時也易於機器解析和生成。它基於JavaScript(Standard ECMA262
3rd Edition December
1999)的一個子集。 JSON採用完全獨立於語言的文字格式,但是也使用了類似於C語言家族的習慣(包括C, C++, C#, Java,
JavaScript, Perl, Python等)。這些特性使JSON成為理想的資料交換語言。
JSON:JavaScript 物件表示法(JavaScript Object Notation)。
JSON 是儲存和交換文字資訊的語法。類似 XML。
JSON 比 XML 更小、更快,更易解析
JSON 的語法可以表示以下三種類型的值。
(1) 簡單值:使用與JavaScript 相同的語法,可以在JSON 中表示字串、數值、布林值和null。
但JSON 不支援JavaScript 中的特殊值undefined。
(2) 物件:物件作為一種複雜資料型別,表示的是一組無序的鍵值對兒。而每個鍵值對兒中的值可
以是簡單值,也可以是複雜資料型別的值。
(3)陣列:陣列也是一種複雜資料型別,表示一組有序的值的列表,可以通過數值索引來訪問其中
的值。陣列的值也可以是任意型別——簡單值、物件或陣列。
JSON 不支援變數、函式或物件例項,它就是一種表示結構化資料的格式,雖然與JavaScript 中表示
資料的某些語法相同,但它並不侷限於JavaScript 的範疇。
<!DOCTYPE HTML>
2. <html>
3. <head>
4. <meta charset="utf‐8">
5. <title>json</title>
6. <script>
7. /*var a=12;
8. var b=5;
9. var c='abc';
10. */
11. var json={a: 12, b: 5, c: 'abc'};
12.
13. json.b++;
14.
15. alert(json.b);
16. </script>
17. </head>
18.
19. <body>
20. </body>
21. </html>
2、函式表示式是JavaScript 中的一個既強大又容易令人困惑的特性。
定義函式的方式有兩種:一種是函式宣告,另一種就是函式表示式。函式宣告的語法是這樣的。
function functionName(arg0, arg1, arg2) {
//函式體
}
首先是function 關鍵字,然後是函式的名字,這就是指定函式名的方式。Firefox、Safari、Chrome和Opera 都給函式定義了一個非標準的name 屬性,通過這個屬性可以訪問到給函式指定的名字。這個屬性的值永遠等於跟在function 關鍵字後面的識別符號。//只在Firefox、Safari、Chrome 和Opera 有效alert(functionName.name); //”functionName”
關於函式宣告,它的一個重要特徵就是函式宣告提升(function declaration hoisting),意思是在執行程式碼之前會先讀取函式宣告。這就意味著可以把函式宣告放在呼叫它的語句後面。sayHi();function sayHi(){alert(“Hi!”);
}FunctionDeclarationHoisting01.htm
這個例子不會丟擲錯誤,因為在程式碼執行之前會先讀取函式宣告。
第二種建立函式的方式是使用函式表示式。函式表示式有幾種不同的語法形式。下面是最常見的一種形式。
var functionName = function(arg0, arg1, arg2){//函式體};
這種形式看起來好像是常規的變數賦值語句,即建立一個函式並將它賦值給變數functionName。
這種情況下建立的函式叫做匿名函式(anonymous function),因為function 關鍵字後面沒有識別符號。
(匿名函式有時候也叫拉姆達函式。)匿名函式的name 屬性是空字串。
函式表示式與其他表示式一樣,在使用前必須先賦值。以下程式碼會導致錯誤。
sayHi(); //錯誤:函式還不存在
var sayHi = function(){
alert(“Hi!”);
};
理解函式提升的關鍵,就是理解函式宣告與函式表示式之間的區別。例如,執行以下程式碼的結果可
能會讓人意想不到。
//不要這樣做!
if(condition){
function sayHi(){
alert(“Hi!”);
}
} else {
function sayHi(){
alert(“Yo!”);
}
}
表面上看,以上程式碼表示在condition 為true 時,使用一個sayHi()的定義;否則,就使用另
一個定義。實際上,這在ECMAScript 中屬於無效語法,JavaScript 引擎會嘗試修正錯誤,將其轉換為合
理的狀態。但問題是瀏覽器嘗試修正錯誤的做法並不一致。大多數瀏覽器會返回第二個宣告,忽略
condition;Firefox 會在condition 為true 時返回第一個宣告。因此這種使用方式很危險,不應該
出現在你的程式碼中。不過,如果是使用函式表示式,那就沒有什麼問題了。
//可以這樣做
var sayHi;
if(condition){
sayHi = function(){
alert(“Hi!”);
};
} else {
sayHi = function(){
alert(“Yo!”);
};
}
這個例子不會有什麼意外,不同的函式會根據condition 被賦值給sayHi。
能夠建立函式再賦值給變數,也就能夠把函式作為其他函式的值返回。還記得第5 章中的那個
createComparisonFunction()函式嗎:
function createComparisonFunction(propertyName) {
return function(object1, object2){
var value1 = object1[propertyName];
var value2 = object2[propertyName];
if (value1 < value2){
return -1;
} else if (value1 > value2){
return 1;
} else {
return 0;
}
};
}
createComparisonFunction()就返回了一個匿名函式。返回的函式可能會被賦值給一個變數,或者以其他方式被呼叫;不過,在createComparisonFunction()函式內部,它是匿名的。在把函式當成值來使用的情況下,都可以使用匿名函式。不過,這並不是匿名函式唯一的用途。
函式的組成部分有關鍵字function,還有這三種:
(1)函式名稱標示符。函式名稱是函式宣告語句必須的部分。他的用途就像變數的名字,新定義的函式物件會賦值給這個變數。對函式定義表示式來說,這個名字是可選的:。如果存在,該名字只存在於函式體中,並指代還函式物件本身。
(2)一對圓括號,其中包含由0個或者多個用逗號隔開的標示符組成的列表。這些標示符是函式的引數名稱,他們就像函式體中的區域性變數一樣。
(3)一對花括號,其中包含0條或多條javascript語句。這些語句構成了函式體:一單呼叫函式,就會這回執行這些語句。