《JavaScript進階程式設計》筆記之’ECMAScript基礎’

來源:互聯網
上載者:User

1.變數是弱類型。
可以存放任意類型的值。如:
var test ="hi";
alert(test);//output "hi"
test=55;
alert(test);//outputs "55"

2.原始值和引用值。
變數可以存放兩種類型的值,即原始值和引用值。
原始值(primitive value)是儲存在棧(stack)中的簡單資料區段。也就是儲存在變數訪問的位置。
引用值(reference value)是儲存在堆(heap)中的對象。放在變數(棧空間)中的值是該對象在堆中的地址。

 

3.原始類型。
原始類型包括Undefined,Null,Boolean,Number,String五類。
Undefined:指聲明了變數但未初始化的值.

Null:則用於尚未存在的對象。
Boolean值:有兩個值True和False

Number:既可以表示32位整數,又可以表示64位浮點數

String:儲存Unicode字串

 

4.原始類型轉換。
(1)轉換成字串。
用toString()方法。對Boolean輸出"true"或"false".對於Number類型,分為預設模式和基模式。如:
var bFound=false;
alert(bFound.tostring()); //outputs "false"

var iNum1=10.0;
alert(iNum1.tostring()); //outputs "10" //預設模式
var iNum2=10;
alert(iNum2.tostring(2)); //outputs "1010" //基模式
alert(iNum2.tostrin(8)); //outputs "12"
(2)轉換成數字。
用parseInt()和parseFloat()。只有對String類型轉換,對其他類型返回的都是NaN。如:
var iNum1=parseInt("123blue"); // return 123 ***
var iNum2=parseInt("0xA"); // return 10
var iNum3=parseInt("22.5"); // return 22
var iNum4=parseInt("blue"); // return NaN
(3)強制類型轉換。
<1> Boolean(value):
var b1=Boolean(""); //false    
var b1=Boolean(0); //false 
var b1=Boolean(null); //false 
其他返回true
<2> Number(value):
Number("123abcd"); //NaN //對整個值,而不是部分
<3> String(value):與toString()的唯一區別就是對null和undefined強制類型轉換成為"null"和"undefined",而toString()不行。

5.參考型別。
Boolean類、Number類、String類。
(1) Number類。
方法舉例:
var oNumberObject=new Number(99);
alert(oNumberObject.toFix(2)); //outputs "99.00" //2代表兩位小數
(2)String類。
 屬性有length.
 方法有charAt(),charCodeAt(),concat(),+,indexOf(),lastIndexOf(),localeCompare(),slice(),substring(),substr(),toLowerCase(),toUpperCase()等。舉例:
 
 //尋找指定位置的單個字元
 var oStringObject=new String("hello world");
 alert(oStringObject.charAt(1)); //outputs "e"
 alert(oStringObject.charCodeAt(1)); //outputs "101" //Unicode編碼
 
 //串連
 sResult=oStringObject.concat(",oh!"); //等同於sResult=oStringObject+",oh!"
 alert(sResult); //outputs "hello world,oh!"
 alert(oStringObject);//outputs "hello world"
 
 //指定子串在另一字串中的位置,如果沒找到返回-1
 alert(oStringObject.indexOf("o")); //outputs "4"
 alert(oStringObject.lastIndexOf("o")); //outputs "7"
 
 //indexof(,)內的第二個參數表示從第幾個字元開始計數 如尋找子串所有位置的例子:
 var pos=oStringObject.indexOf("o"); //###
 while(pos!=-1) //outpus "4" "7"
 {
   alert(pos);
   pos=oStringObject.indexOf("o",pos+1);
 } 
 
 //建立子串
 alert(oStringObject.substring(3)); //outputs "lo world"
 alert(oStringObject.slice(3)); //outputs "lo world"
 alert(oStringObject.substring(3,7)); //outputs "lo w" //注意7位置上的"0"不顯示
 alert(oStringObject.substr(3,2)); //outputs "lo" //表示從第三個字元開始的2個字元 //###
 
 //slice()與substring的區別在於,處理負參數時,substring將其做0對待,如:
 alert(oStringObject.substring(-3)); //outputs "hello world"
 alert(oStringObject.substring(3,-4)); //outputs "hel"
 alert(oStringObject.slice(3,-4)); //outputs "lo w"

6.typeof和instanceof
var sTemp= "test string";
alert(typeof sTemp); //outputs "string"

var oStringObject=new String("hello world");
alert(oStringObject instanceof String); //outputs "true" //問的是"變數oStringObject是String類的執行個體嗎?"

7.運算子
void返回undefined,通常用於避免不應輸出的值。
<a href="javascript:window.open('about:blank')">Click Me</a><!--  此處window.open()返回的是新開啟的視窗,該對象被轉換成要顯示的字串,所以出錯,應為: -->
<a href="javascript:void(window.open('about:blank'))">Click Me</a>

(1) 位元運算符
NOT ~,AND &,OR |,XOR ^
其中NOT分三步處理:轉換成32數字,把位元取反,把改反碼轉換成浮點數。如:
var iNum1=25;
var iNum2=~iNum1;
alert(iNum2); //outputs "-26"
(2) Boolean運算子
邏輯NOT !,邏輯AND &&,邏輯OR ||
(3) 關係運算子
var bResult="Brick"<"alphabet";
alert(bResult); //outputs "true" //B和a的字元代碼分別為66和97


var bResult="23"<"3";
alert(bResult); //outputs "true" 
var bResult="23"<3;
alert(bResult); //outputs "false"  //這是因為字串"23"和數字比較時,字串被轉換成了數字23。***

var bResult="a">3;
alert(bResult); //outputs "false"  //這是因為字串"a"不能轉換為數字,而調用parseInt()返回NaN. ***

8.無重載
但可以通過arguments對象達到同樣效果,如:
function doAdd()
{
if(arguments.length==1)
{
alert(arguments[0]);
}
else if(arguments.length==2)
{
alert(arguments[0]+arguments[1]);
}
}
doAdd(10); //outputs "10" //我們可以看到,自訂的函數可以接受任意多個參數,ECMAScript不會驗證傳遞的參數個數是否與定義的參數個數相等。
doAdd(10,50); //outputs "60"

9.Function類
最令人感興趣的莫過於,函數實際上是個對象! 
(1)function sayHi(sName)
{
  alert(sName);
}
//所以可如此定義:
var sayHi =new Function("sName","alert(\"Hello\"+sName);");
(2)因為函數是個對象,所以也有屬性和方法。
<1> length屬性,返回參數個數,如:
alert(sayHi.length); //outputs "1"
<2> valueOf()和toString()方法,返回函數的代碼,如:
alert(sayHi.toString());

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.