1. 程式人生 > >Javascript上篇

Javascript上篇

基礎 創建 pre for 整數 crazy 範圍 需要 參數說明

本文章適合具有一定程序編程語言基礎的人士閱讀,最好學完Java基礎再來閱讀本文章更容易理解語言初學者會看起來比較費勁,不易理解

一.導入腳本

在html導入Javascript的格式是:

<script src="test.js" type="text/javascript"></script>

兩個關鍵屬性:deter,async

deter:defer屬性告訴瀏覽器要等整個頁面載入以後、解析完畢才執行該<script.../>中的腳本。

async:指定async屬性的的<script.../>的腳本會啟動新的線程,異步執行<script.../>導入的腳本文件

語法格式如下:

<script src="test.js" type="text/javascript" defer async></script>

二.數據類型和變量

隱式定義:直接給變量賦值

顯示定義:使用var關鍵字定義變量。顯式聲明變量時,變量沒有初始值,聲明變量的數據類型也不確定,當第一次給變量賦值時,數據類型才確定下來。

變量的作用域:

全局變量:在全局範圍(不在函數內)定義的變量(不管是否使用var),不是用var定義的變量都是全局變量,全局變量可以被所有的腳本訪問。

局部變量:在函數裏定義,只在函數裏有效

實例代碼:

<!DOCTYPE html
> <html lang="en"> <head> <meta charset="UTF-8"> <title>事件處理中全局變量和局部變量</title> <script type="text/javascript"> var x="全局變量"; </script> </head> <body> <input type="button" value="局部變量" onclick="var x = ‘局部變量‘; alert(‘輸出x變量的值 ‘+x);"
/> <input type="button" value="全局變量" onclick="alert(‘輸出x全局變量的值 ‘+x)"/> </body> </html>

javascript的變量提升機制:所謂變量提升就是不管被不被執行,變量聲明總是會被解釋器提升到函數體頂部。

使用let變量和使用const定義常量

使用let定義的全局變量不會變成window對象的屬性,也不會出現變量提升的情況,彌補了var的缺陷

使用const定義的常量只能在定義時初始化。使用const定義常量以後不允許改變常量值。

基本數據類型

數值類型:包括整型和浮點數,支持科學記數法

布爾類型:只有true和false兩個值

字符串類型:字符串類型必須用雙引號或單引號引起來

undefined類型:專門用來確定一個已經創建但是沒有初值的變量

null類型:表示某個變量的值為空,很多時候,undefined和null相等

三.正則表達式

新建正則表達式

方式一:直接量語法

var reg = /pattern/attributes

方式二:創建 RegExp 對象的語法

var reg = new RegExp(pattern, attributes);

參數說明:

參數 pattern 是一個字符串,指定了正則表達式的模式或其他正則表達式。
參數 attributes 是一個可選的字符串,包含屬性 “g”、”i” 和 “m”,分別用於指定全局匹配、區分大小寫的匹配和多行匹配。ECMAScript 標準化之前,不支持 m 屬性。如果 pattern 是正則表達式,而不是字符串,則必須省略該參數。

兩者區別在於:
1.采用直接量語法新建的正則表達式對象在代碼編譯時就會生成,是平常開發中常用的方式;
2.采用構造函數生成的正則對象要在代碼運行時生成。

正則表達式使用:
正則對象的方法是指這樣使用的: RegExp對象.方法(字符串)
字符串對象的方法是這樣使用:字符串.方法(RegExp對象)

正則對象的屬性和方法

屬性

ignoreCase 返回布爾值,表示RegExp 對象是否具有標誌 i
global 返回布爾值,表示RegExp對象是否具有標誌g
multiline 返回布爾值,表示RegExp 對象是否具有標誌 m。
lastIndex 一個整數,標識開始下一次匹配的字符位置
source 返回正則表達式的源文本(不包括反斜杠)

i 執行對大小寫不敏感的匹配

g 執行全局匹配(查找所有匹配而非在找到第一個匹配後停止)。
m 執行多行匹配
正則表達式作用

通常用於兩種任務:

1.驗證
用於驗證時,通常需要在前後分別加上^和$,以匹配整個待驗證字符串;

2.搜索替換
搜索/替換時是否加上此限定則根據搜索的要求而定,此外,也有可能要在前後加上\b而不是^和$

字符類匹配

[…] 查找方括號之間的任何字符
[^…] 查找任何不在方括號之間的字符
[a-z] 查找任何從小寫 a 到小寫 z 的字符
[A-Z] 查找任何從大寫 A 到大寫 Z 的字符
[A-z] 查找任何從大寫 A 到小寫 z 的字符
. 查找單個字符,除了換行和行結束符
\w 查找單詞字符,等價於[a-zA-Z0-9]
\W 查找非單詞字符,等價於[^a-zA-Z0-9]
\s 查找空白字符
\S 查找非空白字符
\d 查找數字,等價於[0-9]
\D 查找非數字字符,等價於[^0-9]
\b 匹配單詞邊界
\r 查找回車符
\t 查找制表符
\0 查找 NULL 字符
\n 查找換行符

重復字符匹配

{n,m} 匹配前一項至少n次,但不能超過m次
{n,} 匹配前一項n次或更多次
{n} 匹配前一項n次
n? 匹配前一項0次或者1次,也就是說前一項是可選的,等價於{0,1}
n+ 匹配前一項1次或多次,等價於{1,}
n* 匹配前一項0次或多次,等價於{0,}
n$ 匹配任何結尾為 n 的字符串
^n 匹配任何開頭為 n 的字符串
?=n 匹配任何其後緊接指定字符串 n 的字符串
?!n 匹配任何其後沒有緊接指定字符串 n 的字符串

匹配特定數字

^[1-9]\d*$    匹配正整數
^-[1-9]\d*$   匹配負整數
^-?[0-9]\d*$   匹配整數
^[1-9]\d*|0$  匹配非負整數(正整數 + 0)
^-[1-9]\d*|0$   匹配非正整數(負整數 + 0)
^[1-9]\d*.\d*|0.\d*[1-9]\d*$  匹配正浮點數
^-([1-9]\d*.\d*|0.\d*[1-9]\d*)$ 匹配負浮點數
^-?([1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0+|0)$  匹配浮點數
^[1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0+|0$   匹配非負浮點數(正浮點數 + 0)
^(-([1-9]\d*.\d*|0.\d*[1-9]\d*))|0?.0+|0$  匹配非正浮點數(負浮點數 + 0)

匹配特定字符串

^[A-Za-z]+$  匹配由26個英文字母組成的字符串
^[A-Z]+$  匹配由26個英文字母的大寫組成的字符串
^[a-z]+$  匹配由26個英文字母的小寫組成的字符串
^[A-Za-z0-9]+$  匹配由數字和26個英文字母組成的字符串
^\w+$  匹配由數字、26個英文字母或者下劃線組成的字符串

方法

test方法

檢索字符串中指定的值。返回 true 或 false。
如果字符串 string 中含有與 RegExpObject 匹配的文本,則返回 true,否則返回 false。

示例:

<script type="text/javascript">
        alert(/^<a href=(\‘|\")[a-zA-Z0-9\/:\.]*(\‘|\")>.*<\/a>$/.test("<a href=‘http://www.crazyit.org‘>瘋狂Java聯盟</a>"));
        function trim(s){
            return s.replace(/(^\s*)|(\s*$)/g,"");
        }
        alert(trim(   hello,JavaScript     ));
    </script>

四.數組

數組是一系列的變量,有以下三個特征:

1)Javascript的數組長度可變,數組長度總等於所有元素索引最大值加1.

2)同一個數組中的元素類型可以互不相同

3)訪問數組元素時不會產生數組越界,訪問並未賦值的數組元素時,該元素的值為undefined。

Javascript數組棧使用的兩個方法如下:

push():元素入棧,返回入棧後數組的長度

pop():元素出棧,返回出棧的數組元素

JavaScript數組作為隊列使用的兩個方法如下:

unshift(ele):元素入隊列,返回入隊列後的數組的長度

shift():元素出隊列,返回出隊列的數組元素

arrays對象還定義了如下方法:

concat(value,...):為數組添加一個或多個元素,返回追加元素後的數組。

join([separator]):將數組的多個元素拼接在一起,組成字符串後返回

示例代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>數組</title>
    <script type="text/javascript" defer async>
        var stack = [] ;
        stack.push("孫悟空");
        stack.push("豬八戒");
        stack.push("白骨精");
        arrays=stack.concat("","動物");

      function demo1(){
           for(let i=0;i<arrays.length;i++){
               alert(arrays[i]);
           }

        return 0;
       };


        demo1();
        var queue = [];
        queue.unshift("瘋狂Java講義");
        queue.unshift("輕量級JavaEE企業應用實戰");
        queue.unshift("Java前端開發講義");

        console.log(queue.shift());
        console.log(queue.shift());
    </script>
</head>
<body>

</body>
</html>

五.函數

函數的語法格式如下:

function functionName(param1,param2){

}

六.運算符

Javascript支持的運算符與java非常類似,還有一些獨特用法的運算符:

1)逗號運算符。逗號運算符允許多個表達式排在一起,整個表達式返回最右邊表達式的值

 <script type="text/javascript">

        var a,b,c,d;
        a = (b = 5,c = 8,d = 56);
        document.write(a=+a+ b=+b+" c="+c+ d=+d);
    </script>

輸出:a=56 b=5 c=8 d=56

2)void運算符,用於強行指定表達式不會發揮值,如

a = void(b = 5,c = 8,d = 56);

輸出a的值等於undefined

3)typeof和instanceof運算符。typeof用於判斷某個變量的數據類型,也可作為函數使用。instanceof用於返回某個變量是否為指定類的實例。

七.語句

異常拋出語句

Javascript所有的異常都是error對象,語法格式

throw new Error(errorString);

看如下實例:

 <script type="text/javascript">
        for(let i = 0 ; i < 10 ; i++){
            document.writeln(i+"<br/>");
            if( i > 4 ) throw new Error(用戶自定義錯誤);
        }
    </script>

異常捕捉語句,語法格式如下:

try
{ staments }
catch(e)
{ staments }
finally
{ staments }

Javascript是弱類型語言,所以try塊後面只有一個catch塊。

with語句

with語句的主要作用是避免重復書寫同一個對象:實例如下:

<script>

document.writeln(Hello<br/>);
document,writeln(HelloWorld<br/>);
document.writeln(javascript<br/>);

//上面語句等同於

with(document)
{
writeln(Hello<br/>);
writeln(HelloWorld<br/>);
writeln(javascript<br/>);

}

</script>

for-in循環語句

<script>

for(element in elements){
staments
}

</script>

Javascript上篇