Python day16(JavaScript)

1、概述

JavaScript是一門編程語言,瀏覽器內置了JavaScript語言的解釋器,因此在瀏覽器上按照JavaScript語言的規則編寫相應代碼之,瀏覽器能夠解釋並作出相應的處理。
如何編寫
一、JavaScript代碼存在形式
<!-- 方式一 -->
<script type"text/javascript" src="JS文件"></script>


<!-- 方式二 -->
<script type"text/javascript">
  Js代碼內容
</script>
二、JavaScript代碼存放位置
  • HTML的head中
  • HTML的body代碼塊底部(推薦)

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

2、變量

JavaScript中變量的聲明是一個很是容易出錯的點,局部變量必須一個 var 開頭,若是未使用var,則默認表示聲明的是全局變量。java

<script type="text/javascript">

  // 全局變量
  name = 'seven';

  function func(){
  // 局部變量
  var age = 18;

  // 全局變量
  gender = "男"
  }
</script>
 
JavaScript中代碼註釋:(ps:此註釋僅在Script塊中生效。)
  • 單行 //
  • 多行 /* */

3、數據類型

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

  • 原始類型
    • 數字
    • 字符串
    • 布爾值
  • 對象類型
    • 數組
    • 「字典」
    • ...
特別的,數字、布爾值、null、undefined、字符串是不可變。
  • null、undefinednull是JavaScript語言的關鍵字,它表示一個特殊值,經常使用來描述「空值」。
  • undefined是一個特殊值,表示變量未定義。

一、數字(Number)

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

轉換:瀏覽器

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

特殊值:dom

  •  NaN,非數字。可以使用 isNaN(num) 來判斷。
  • Infinity,無窮大。可以使用 isFinite(num) 來判斷。
更多數值計算:
 1 常量
 2 
 3 Math.E
 4 常量e,天然對數的底數。
 5 
 6 Math.LN10
 7 10的天然對數。
 8 
 9 Math.LN2
10 2的天然對數。
11 
12 Math.LOG10E
13 以10爲底的e的對數。
14 
15 Math.LOG2E
16 以2爲底的e的對數。
17 
18 Math.PI
19 常量figs/U03C0.gif。
20 
21 Math.SQRT1_2
22 2的平方根除以1。
23 
24 Math.SQRT2
25 2的平方根。
26 
27 靜態函數
28 
29 Math.abs( )
30 計算絕對值。
31 
32 Math.acos( )
33 計算反餘弦值。
34 
35 Math.asin( )
36 計算反正弦值。
37 
38 Math.atan( )
39 計算反正切值。
40 
41 Math.atan2( )
42 計算從X軸到一個點的角度。
43 
44 Math.ceil( )
45 對一個數上舍入。
46 
47 Math.cos( )
48 計算餘弦值。
49 
50 Math.exp( )
51 計算e的指數。
52 
53 Math.floor( )
54 對一個數下舍人。
55 
56 Math.log( )
57 計算天然對數。
58 
59 Math.max( )
60 返回兩個數中較大的一個。
61 
62 Math.min( )
63 返回兩個數中較小的一個。
64 
65 Math.pow( )
66 計算xy。
67 
68 Math.random( )
69 計算一個隨機數。
70 
71 Math.round( )
72 舍入爲最接近的整數。
73 
74 Math.sin( )
75 計算正弦值。
76 
77 Math.sqrt( )
78 計算平方根。
79 
80 Math.tan( )
81 計算正切值。
82 
83 Math
View Code

二、字符串(String)

字符串是由字符組成的數組,但在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個組內容;
                                     $&:當前匹配的內容;
                                     $`:位於匹配子串左側的文本;
                                     $':位於匹配子串右側的文本
                                     $$:直接量$符號

三、布爾類型(Boolean)

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

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

四、數組

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( )         對數組元素進行排序

 4、其餘

一、序列化

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

二、轉義

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

三、eval

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

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

4.時間

Date類
var d = new Date()
d.getXXX 獲取
d.setXXX 設置
var d = new Date();
d.getHours()
d.setHours(18);
d
# Sat Jul 29 2017 18:26:09 GMT+0800 (中國標準時間)

5、語句和異常

一、條件語句

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

    }else if(條件){

    }else{

    }

switch函數

switch(name){
        case '1':
            age = 123;
            break;
        case '2':
            age = 456;
            break;
        default :
            age = 777;
    }
二、循環語句
JavaScript中支持三種循環語句,分別是:
第一種:
var names = ["alex", "tony", "rain"];

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

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

第三種:this

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

三、異常處理

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

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

6、函數

一、基本函數

JavaScript中函數基本上能夠分爲一下三類:
// 普通函數
    function func(arg){
        return true;
    }


// 匿名函數
    var func = function(arg){
        return "tony";
    }


// 自執行函數
    (function(arg){
        console.log(arg);
    })('123')

ps:對於JavaScript中函數參數,實際參數的個數可能小於形式參數的個數,函數內的特殊值arguments中封裝了全部實際參數。

二、做用域

a. js以函數做爲做用域 (let)
  • 其餘語言: 以代碼塊做爲做用域
  • Python: 以函數做爲做用域
  • JavaScript: 以函數做爲做用域(默認)
function func(){
    if(1==1){
        var name = 'alex';
    }
    console.log(name);
}
func()  # 打印alex
name    # 打印""

b.函數的做用域在函數未被調用以前,已經建立

function func(){
  if(1==1){
  var name = 'alex';
  }
  console.log(name);
}
c.函數的做用域存在做用域鏈,而且也是在被調用以前建立
示例一:
xo = "alex";

function func(){
    var xo = 'eric';
    function inner(){
        var xo = 'tony';
        console.log(xo);
    }
    inner()
}

func()  # 打印tony

示例二:

xo = "alex";

function func(){
    var xo = 'eric';
    function inner(){
        console.log(xo);
    }
    return inner;
}
var ret = func()
ret()  # 打印eric

示例三:

xo = "alex";

function func(){
    var xo = 'eric';
    function inner(){
        console.log(xo);
    }
    var xo = 'tony';
    return inner;
}

var ret = func()
ret()  # 打印tony

d.函數內局部變量 聲明提早

function func(){
    console.log(xxoo);
}

func();
// 程序直接報錯

function func(){
    console.log(xxoo);
    var xxoo = 'alex';
}
解釋過程當中:var xxoo;

func();
// undefined

3.JavaScript面向對象

function Foo (name,age) {
    this.Name = name;
    this.Age = age;
    this.Func = function(arg){
        return this.Name + arg;
    }
}
var obj = new Foo('alex', 18);
var ret = obj.Func("nb");
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;
    }
}

4.javascript詞法分析

javascript詞法分析步驟:
首先有一個活動對象active object
  1. 形式參數
  2. 局部變量
  3. 函數聲明表達式
function t1(age){
            console.log(age); // function age()
            var age = 27;
            console.log(age); // 27
            function age(){}
            console.log(age); // 27
        }
t1(3);
javascript解釋器在解釋此段代碼時先進行詞法分析:
  1. 形式參數  AO.age = undefined    AO.age = 3
  2. 局部變量  AO.age = undenfined
  3. 函數聲明表達式  AO.age = function age(){}
因此在詞法分析完畢以後age = function age(){}
相關文章
相關標籤/搜索