文成小盆友python-num15 - JavaScript基礎

1、JavaScript簡介

JavaScript一種直譯式腳本語言,是一種動態類型、弱類型、基於原型的語言,內置支持類型。它的解釋器被稱爲JavaScript引擎,爲瀏覽器的一部分,普遍用於客戶端的腳本語言,最先是在HTML(標準通用標記語言下的一個應用)網頁上使用,用來給HTML網頁增長動態功能。javascript

2、組成部分

ECMAScript,描述了該語言的語法和基本對象html

文檔對象模型(DOM),描述處理網頁內容的方法和接口。java

瀏覽器對象模型(BOM),描述與瀏覽器進行交互的方法和接口。正則表達式

三. JavaScript代碼的存在形式

1.有如下兩種存在形式:

<!-- 方式一 -->
<script type"text/javascript" src="JS文件"></script>
 
<!-- 方式二 -->
<script type"text/javascript">
    Js代碼內容
</script>

2.思考?? 代碼存在的位置。。

對於以上問題其實有兩個可選項:api

(1)存在在html文件中的head部分數組

(2)存在在body代碼塊底部瀏覽器

因爲Html代碼是從上到下執行,若是Head中的js代碼耗時嚴重,就會致使用戶長時間沒法看到頁面,若是放置在body代碼塊底部,那麼即便js代碼耗時嚴重,也不會影響用戶看到頁面效果,只是js實現特效慢而已。閉包

四.變量

JavaScript中局部變量必須一個 var 開頭,若是未使用var,則默認表示聲明的是全局變量。dom

<script type="text/javascript">
 
    // 全局變量
    name = 'wencheng';
 
    function func(){
        // 局部變量
        var age = 16;
 
        // 全局變量
        gender = "男"
    }
</script>

JavaScript中代碼註釋:ide

  • 單行 //
  • 多行 /*  */

五.數據類型

JavaScript 中的數據類型分爲原始類型和對象類型:

  • 原始類型
    • 數字
    • 字符串
    • 布爾值
  • 對象類型
    • 數組
    • 「字典」

其中 數字、布爾值、null、undefined、字符串是不可變 

// null、undefined
null是JavaScript語言的關鍵字,它表示一個特殊值,經常使用來描述「空值」。
undefined是一個特殊值,表示變量未定義。

1).數字類型

var a = 1var b = 1.1;

JavaScript中不區分整數值和浮點數值,JavaScript中全部數字均用浮點數值表示。

轉換:

  • parseInt(..)    將某值轉換成數字,不成功則NaN
  • parseFloat(..) 將某值轉換成浮點數,不成功則NaN

特殊值:

  •  NaN,非數字。可以使用 isNaN(num) 來判斷。
  • Infinity,無窮大。可以使用 isFinite(num) 來判斷。

更多數值計算:

常量

Math.E
常量e,天然對數的底數。

Math.LN10
10的天然對數。

Math.LN2
2的天然對數。

Math.LOG10E
以10爲底的e的對數。

Math.LOG2E
以2爲底的e的對數。

Math.PI
常量figs/U03C0.gif。

Math.SQRT1_2
2的平方根除以1。

Math.SQRT2
2的平方根。

靜態函數

Math.abs( )
計算絕對值。

Math.acos( )
計算反餘弦值。

Math.asin( )
計算反正弦值。

Math.atan( )
計算反正切值。

Math.atan2( )
計算從X軸到一個點的角度。

Math.ceil( )
對一個數上舍入。

Math.cos( )
計算餘弦值。

Math.exp( )
計算e的指數。

Math.floor( )
對一個數下舍人。

Math.log( )
計算天然對數。

Math.max( )
返回兩個數中較大的一個。

Math.min( )
返回兩個數中較小的一個。

Math.pow( )
計算xy。

Math.random( )
計算一個隨機數。

Math.round( )
舍入爲最接近的整數。

Math.sin( )
計算正弦值。

Math.sqrt( )
計算平方根。

Math.tan( )
計算正切值。
計算

2)字符串類型

var name = 'zhaowencheng';
var name = String("zhaowencheng");
var name_age = String(16);

字符串是由字符組成的數組,但在JavaScript中字符串是不可變的:能夠訪問字符串任意位置的文本,可是JavaScript並未提供修改已知字符串內容的方法。

常見功能:

obj.length                           長度
 
obj.trim()                           移除空白
obj.trimLeft()
obj.trimRight)
obj.charAt(n)                        返回字符串中的第n個字符
obj.concat(value, ...)               拼接
obj.indexOf(substring,start)         子序列位置
obj.lastIndexOf(substring,start)     子序列位置
obj.substring(from, to)              根據索引獲取子序列
obj.slice(start, end)                切片
obj.toLowerCase()                    大寫
obj.toUpperCase()                    小寫
obj.split(delimiter, limit)          分割
obj.search(regexp)                   從頭開始匹配,返回匹配成功的第一個位置(g無效)
obj.match(regexp)                    全局搜索,若是正則中有g表示找到所有,不然只找到第一個。
obj.replace(regexp, replacement)     替換,正則中有g則替換全部,不然只替換第一個匹配項,
                                     $數字:匹配的第n個組內容;
                                     $&:當前匹配的內容;
                                     $`:位於匹配子串左側的文本;
                                     $':位於匹配子串右側的文本
                                     $$:直接量$符號

3)布爾類型(Boolean)

布爾(邏輯)只能有兩個值:truefalsevar x=true
var y=false

布爾類型僅包含真假,與Python不一樣的是其首字母小寫。

  • ==      比較值相等
  • !=       不等於
  • ===   比較值和類型相等
  • !===  不等於
  • ||        或
  • &&      且

4)數組

JavaScript中的數組相似於Python中的列表

常見功能:

obj.length          數組的大小
 
obj.push(ele)       尾部追加元素
obj.pop()           尾部獲取一個元素
obj.unshift(ele)    頭部插入元素
obj.shift()         頭部移除元素
obj.splice(start, deleteCount, value, ...)  插入、刪除或替換數組的元素
                    obj.splice(n,0,val) 指定位置插入元素
                    obj.splice(n,1,val) 指定位置替換元素
                    obj.splice(n,1)     指定位置刪除元素
obj.slice( )        切片
obj.reverse( )      反轉
obj.join(sep)       將數組元素鏈接起來以構建一個字符串
obj.concat(val,..)  鏈接數組
obj.sort( )         對數組元素進行排序

六.javascript中的其它操做

1)、序列化

  • JSON.stringify(obj)   序列化
  • JSON.parse(str)        反序列化

2)、轉義

  • decodeURI( )                   URl中未轉義的字符
  • decodeURIComponent( )   URI組件中的未轉義字符
  • encodeURI( )                   URI中的轉義字符
  • encodeURIComponent( )   轉義URI組件中的字符
  • escape( )                         對字符串轉義
  • unescape( )                     給轉義字符串解碼
  • URIError                         由URl的編碼和解碼方法拋出

3)、eval

JavaScript中的eval是Python中eval和exec的合集,既能夠編譯代碼也能夠獲取返回值。

  • eval() 
  • EvalError   執行字符串中的JavaScript代碼

4)、正則表達式

JavaScript中支持正則表達式,其主要提供了兩個功能:

  • test(string)     用於檢測正則是否匹配
  • exec(string)    用於獲取正則匹配的內容

注:定義正則表達式時,「g」、「i」、「m」分別表示全局匹配,忽略大小寫、多行匹配。

5)、時間處理

JavaScript中提供了時間相關的操做,時間操做中分爲兩種時間:

  • 時間統一時間
  • 本地時間(東8區)

http://www.shouce.ren/api/javascript/main.html

七.運算符

運算符 = 用於賦值。

運算符 + 用於加值。

1.算術運算符

 

2.賦值運算符

3.比較運算符

4.邏輯運算符

八. 語句和異常

一、條件語句

JavaScript中支持兩個中條件語句,分別是:if 和 switch

if 語句:

if(條件){
 
    }else if(條件){
         
    }else{
 
    }

switch語句

switch(name){
        case '1':
            age = 123;
            break;
        case '2':
            age = 456;
            break;
        default :
            age = 777;
    }

switch語句

二、循環語句

JavaScript中支持三種循環語句,分別是:

1).

var names = ["alex", "tony", "rain"];
 
for(var i=0;i<names.length;i++){
    console.log(i);
    console.log(names[i]);
}

2).

var names = ["alex", "tony", "rain"];

for(var index in names){
    console.log(index);
    console.log(names[index]);
}

3).

while(條件){
    // break;
    // continue;
}

三、異常處理

try {
    //這段代碼從上往下運行,其中任何一個語句拋出異常該代碼塊就結束運行
}
catch (e) {
    // 若是try代碼塊中拋出了異常,catch代碼塊中的代碼就會被執行。
    //e是一個局部變量,用來指向Error對象或者其餘拋出的對象
}
finally {
     //不管try中代碼是否有異常拋出(甚至是try代碼塊中有return語句),finally代碼塊中始終會被執行。
}

主動拋出異常 throw Error('xxxx')

九.函數

一、基本函數

JavaScript中函數基本上能夠分爲一下三類:

// 普通函數
    function func(arg){
        return true;
    }
          
// 匿名函數
    var func = function(arg){
        return "tony";
    }
  
// 自執行函數
    (function(arg){
        console.log(arg);
    })('123')

二、做用域

JavaScript中每一個函數都有本身的做用域,當出現函數嵌套時,就出現了做用域鏈。當內層函數使用變量時,會根據做用域鏈從內到外一層層的循環,若是不存在,則異常。

切記:全部的做用域在建立函數且未執行時候就已經存在。

function f2(){
    var arg= 111;
    function f3(){
        console.log(arg);
    }
     
    return f3;
}
 
ret = f2();
ret();

關於做用域有一下幾點:

1.JavaScript中無塊級做用域

2.JavaScript採用函數做用域

3.JavaScript的做用域鏈

4.JavaScript的做用域鏈執行前已建立

5.聲明提早 :JavaScript的函數在被執行以前,會將其中的變量所有聲明,而不賦值。

三、閉包

「閉包」,是指擁有多個變量和綁定了這些變量的環境的表達式(一般是一個函數),於是這些變量也是該表達式的一部分。

閉包是個函數,而它「記住了周圍發生了什麼」。表現爲由「一個函數」體中定義了「另個函數」

因爲做用域鏈只能從內向外找,默認外部沒法獲取函數內部變量。閉包,在外部獲取函數內部的變量。

function f2(){
    var arg= [11,22];
    function f3(){
        return arg;
    }
    return f3;
}
 
ret = f2();
ret();

四、面向對象

function Foo (name,age) {
    this.Name = name;
    this.Age = age;
    this.Func = function(arg){
        return this.Name + arg;
    }
}
  
var obj = new Foo('zhaowencheng', 16);
var ret = obj.Func("learnning");
console.log(ret);
  • Foo充當的構造函數
  • this代指對象
  • 建立對象時須要使用 new

上述代碼中每一個對象中均保存了一個相同的Func函數,從而浪費內存。以下解決該問題:

function Foo (name,age) {
    this.Name = name;
    this.Age = age;
}
Foo.prototype = {
    GetInfo: function(){
        return this.Name + this.Age
    },
    Func : function(arg){
        return this.Name + arg;
    }
}
相關文章
相關標籤/搜索