文章出處

1.語句

ECMAScript中的語句以一個分號結尾;如果省略分號,則由解析器確定語句的結尾,如下例所示:

var sum=a+b //即使沒有分號也是有效的語句--推薦
var diff=a-b; //有效的語句--推薦

雖然語句結尾的分號不是必需的,但我們建議任何時候都不要省略它。兩個原因:1.加上分號可以避免很多錯誤 2.加上分號也會在某些情況下增進代碼的性能,因為這樣解析器
就不必再花時間 推測應該在哪里插入分號了。

2.變量

var message="hi";

像這樣初始化變量并不會把它標記為字符串類型,初始化的過程就是給變量賦一個值那么簡單。因此,可以在修改變量值的時候修改值的類型,如下所示:

var message="hi";
message=10; //有效,但不推薦

可以像下面那樣省略var操作符,從而創建一個全局的變量:

function test(){
message="hi"; //全局變量
}
test();
alert(message): //hi

可以使用一條語句定義多個變量,用逗號分隔:

var message="hi",found=false,age=29;

3.typeof操作符

typeof可以用來檢測變量的數據類型。對一什值使用typeof操作符可能返回下列某個字符串
“undefined”---未定義
“boolean”---布爾值
“string”---字符串
“number”---數值
“object”---對象或Null
"function"---函數
下面是幾個使用typeof操作符的例子:

var message="some thing";
alert(typeof message); //"string"
alert(typeof (message)); //"string" typeof是操作符而不是函數,圓括號可以使用,但不是必需的
alert(typeof 95); //"number"

4.undefined類型

在使用var聲明變量但未對其加以初始化時,這個變量的值就是undefined,例如:

var message;
alert(message==undefined); //true

這個例子與下面是等價的

var message=undefined;
alert(message==undefined); //true

對于一個尚未聲明過的變量,只能執行一項操作,即使用typeof操作符檢測其數據類型。

var message;
//下面這個變量并沒有聲明
//var age
alert(age); //產生錯誤
alert(typeof message); //undefined
alert(typeof age); //undefined

5. Null類型

typof操作符檢測null值時會返回“object”

6.boolean類型

boolean類型的值只有兩個:true和false。但ECMAScript中所有類型的值都有與這兩個boolean等價的值。要將一個值轉換為boolean,可以調用轉型函數Boolean():

var message="Hi";
var messageAsBoolean=Boolean(message);

7.number類型

八進制的第一位必須是0,然后是八進制數字序列(0-7),如果字面值中的數值超出范圍,那么前導零將被忽略,后面的數值當作十進制來解析

var octalNum1=070; //八進制的56 
var octalNum2=079; //十進制的79

十六進制前面兩位必須是0x,

 浮點數值

var floatNum1=1.1;
var floatNum2=0.1; 
var floatNum3=.1; //小數點前面沒有數據,有效但不推薦 

e表示法:var floatNum=3.125e7; //等于31250000
浮點數的精度問題:浮點數的最高精度是17位數,但在進行算術計算時其精度確遠不如整數。例如,0.1+0.2的結果不是0.3,而是0.300000000000000004。

這個小小的誤差導致無法測試特點的浮點數值,例如:

if(a+b==0.3)
{ 
alert(“you got a 0.3”);
}

如果這兩個數是0.05和0.25,或者0.15和0.15都不會有問題。但如前面所述,如果這兩個數是0.1和0.2,那么測試將無法通過

8. NaN

NaN,即非數值(Not a Number),用于表示一個本來要返回數值的操作數未返回數值的情況。
任何涉及NaN的操作(例如NaN/10)都會返回NaN
NaN與任何值都不相等,包括NaN本身。

9.數值轉換

Number()函數:如果是null值,返回0;如果是undefined,返回NaN;空字符串,返回0;
parseInt()函數:空字符串會返回NaN. parseInt()能夠識別出各種整數格式,如果字符串以“0x”開頭且后跟數字字符,就會將其當作一個十六進制整數;
字符串以“0”開頭且后跟數字字符,就會將其當作一個八進制整數來解析。例如:

var num1=parseInt("1234blue"); //1234
var num1=parseInt(""); //NaN
var num1=parseInt("0xA"); //10(十六進制數)
var num1=parseInt("22.5"); //22
var num1=parseInt("070"); //56(八進制數)
var num1=parseInt("70"); //70(十進制數)
var num1=parseInt("0xf"); //15(十六進制數)

parseInt()還有第二個參數:轉換時使用的基數(即多少進制)。如果知道要解析的值是十六進制,那么就指定基數為16,以保證得到正確的結果。如:

var num1=parseInt("0xaf",16); //175

如果指定了第二個參數,字符串可不帶前面的0x,如:

var num1=parseInt("af",16); //175
var num1=parseInt("af"); //NaN

不指定基數意味著讓parseInt()決定如何解析輸入的字符串,因此為了避免錯誤的解析,我們建議無論在什么情況下都明確指定基數。

10. String類型

字符串是不可變的,也就是說,字符串一旦創建,它們的值就不能改變。
數值、布爾值、對象和字符串都有toString()方法,但Null和undefined值沒有這個方法。多數情況下,調用toString()方法不必傳遞參數,但是,在調用數值的toString()方法時
,可以傳遞一個參數:輸出數值的基數。可以輸出二進制、八進制、十六進制等 。

var num=10;
alert(num.toString()); //10
alert(num.toString(2)); //1010
alert(num.toString(8)); //12
alert(num.toString(10)); //10
alert(num.toString(16)); //a

11.操作符

一元加和減操作符:一元加操作符以一個加號表示(+)表示,放在數據面前,對數值不會產生任何影響,如:

var num=25;
num=+num; //25 其實就是一個正號

不過在對非數值應用一元加操作符時,該操作符會像Number()轉型函數一樣對這個值執行轉換。像布爾值false和true將被轉換為0和1。
邏輯與(&&)規則:
如果第一個操作數是對象,則返回第二個操作數;
如果第二個操作數是對象,則只有在第一個操作數的求值結果為true時情況下才返回該對象;
如果兩個操作都都是對象,則返回第二個操作數;
如果有一個操作數是null,則返回null;
如果有一個操作數是NaN,則返回NaN;
如果有一個操作數是undefined,則返回undefined;
邏輯或(||)規則:
如果第一個操作數是對象,則返回第一個操作數;
如果第一個操作數的求值結果為false,則返回第二個操作數;
如果兩個操作都都是對象,則返回第一個操作數;
如果兩個操作數是null,則返回null;
如果兩個操作數是NaN,則返回NaN;
如果兩個作數是undefined,則返回undefined;
可以用邏輯或來為避免為變量賦null或undefined值,如:
var myObject=preferredObject||backupObject; //preferredObject不為null則值為preferredObject,否則為第二個值backupObject
加性操作符:
如果有一個操作數是NaN,則結果是NaN;
如果只有一個操作數是字符串,則將另一個操作數轉換為字符串,然后再將兩個字符串拼接起來。
忽視加法操作符中的數據類型是ECMAScript編程中最常見的一個錯誤,看個例子:

var num1=5,num2=10;
var message="the sum of 5 and 10 is"+num1+num2;
alert(message); //"the sum of 5 and 10 is 510"

關系操作符:<,>,<=,>=
如果一個操作數是數值,則將另一個操作數轉換為數值,然后執行數值比較。
任何操作數與NaN進行關系比較,結果都是false.

var result=NaN<3; //false

相等操作符:
null和undefined是相等的。
全等和不全等:全等操作符由3個等于號(===)表示,它只在兩個操作數未經轉換就相等的情況下返回true,如下面所示:

var result=("55"==55); //true,因轉換后相等
var result=("55"===55); //,因轉換后相等

逗號操作符:
用于賦值時,逗號操作符總會返回表達式中的最后一項,如下面的例子所示:

var num=(5,1,8,4,0);//num的值為0

12.語句

for語句
由于ECMAScript中不存在塊級作用域,因此在循環內部定義的變量也可以在外部訪問到,如:

var count=10;
for(int i=0;i<count;i++)
{
alert(i);
}
alert(i); //10

for語句中的初始化表達式、控制表達式和循環后表達式都是可選的。將這三個表達式全部省略,就會創建一個無限循環,如:

for(;;){
doSomething();
}

for-in 語句
ECMAScript對象的屬性沒有順序。因此,通過for-in循環輸出的屬性名的順序是不可預測的。具體來說,所有屬性都會被返回一次,但返回的先后次序可能會因瀏覽器而異。
break和continue語句
break和continue語句都可以與label語句聯合使用,從而返回代碼中特定的位置。這種聯合使用的情況多發生循環嵌套的情況下,如下所示:

var num=0;
outermost:
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i==5&&j==5){
break outermost;
}
num++;
}
}
alert(num); //55

with語句
with語句的作用是將代碼的作用域設置到一個特定的對象中,由于大量使用with語句會導致性能下降,同時也會給調試代碼造成困難,因此在開發大型應用程序時,不建議使用with語句。
switch語句
switch語句在比較值時使用的是全等操作符,因此不會發生類型轉換(例如,字符串“10”不等)

13.函數

函數return語句也可以不帶任何返回值,在這種情況下,函數在停止執行后將返回unedfined。
理解參數:函數的參數與大多數其他語言的參數不同。ECMAScript函數不介意傳遞進來多少個參數,也不在乎傳進來參數是什么數據類型。也就是說,即使你定義的函數只接收
兩個參數,在調用這個函數時也未必一定要傳遞兩個參數,可以傳遞一個、三個甚至不傳參數,而解析器永遠不會有什么怨言。之所以這樣,是因為ECMAScript中的參數在內部
是通過一個數組來表示的。函數接收到的始終都是這個數組,而不關心數組中包含哪些參數(如果有參數的話)。實際上,在函數體內可以通過arguments對象來訪問這個數組,從
而獲取傳遞給函數的第一個參數。
如果只傳入了一個參數,那么arguments[1]設置的值不會反應到命名參數中,這是因為arguments對象的長度是由傳入參數個數決定的,不是由定義函數的命名參數決定的。
函數沒有重載。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()