1. 程式人生 > 實用技巧 >前端--js基礎

前端--js基礎

一.js的引入

    <!-- js的第一種引入方式 內嵌 (推薦)
    <script>
        // alert("js的第一種引入方式")          // 瀏覽器彈出
        // console.log("js的第一種引入方式")    // 控制檯列印
        // document.write("js的第一種引入方式") // 頁面顯示
    </script> 
    -->

    <!-- js的第二種引入方式 匯入    
    <script src="./ceshi.js"></script> 
    -->

    <!-- js的第三種引入方式 事件
    
<div onclick="alert('hello world')"> 點我 </div> --> <!-- js的第四種引入方式 行內 (不推薦) <a href="javascript:alert('hello world2')">點我</a> -->

二. 註釋變數

一.註釋

1.單行註釋

// 兩個 '//' 代表單行註釋

2.多行註釋

/**/  把內容寫到 /*內容*/

二. 變數

var關鍵字指定當前變數的作用域,全域性或者區域性不寫var可以,預設指定全域性變數,沒有區域性的概念 var一定寫上
var a = 100
var a=1,b=2,c=3
console.log(a)
console.log(b,c)    

變數的命名:

var $ = "特殊的變數名"
console.log($)
var $a = 123
console.log($a)

三. 資料型別

/*
            資料型別:分為兩大類 
            基本資料型別(原始型別) + 引用資料型別(複雜型別)
            基本資料型別: Boolean , Number , String , null , undefined
            引用資料型別: Object [Array , function , Date , RegExp]
            本質上一切皆是物件
*/

1.Boolean 布林型別

var a = true
var a = false

console.log(a,typeof(a))

2.Number數字型別

        // NaN Number型別中特殊的關鍵字 => not a number
        /*
            NaN注意點:
            1.NaN 和 數字不能參與運算
            2.除了NaN!=任何值為真,剩下的比較都是假的
        */
        var a = 0b10
        var a = 0o10
        var a = 0x10
        var a = 100
        var a = 3.15
        var a = 3.15e3
        // Infinity  無限大
        var a = 3.9e99999999999999999999999999999999999999999999999999
        // -Infinity 負無限大
        var a = -3.9e99999999999999999999999999999999999999999999999999
        console.log(a,typeof(a))
        var a = 100 - "abc"
        var a = NaN + 1
        var a = NaN == NaN
        var a = NaN != NaN
        var a = NaN != 1
        console.log(a,typeof(a))

3.字串型別

var a = 'hello js'
console.log(a , typeof(a))
單引號
var a = "hello \\n js"
console.log(a , typeof(a))
雙引號
var name = "安妮寶貝"
var str = `你在麼${name}      
你在幹什麼
想我了沒有`
 console.log(str, typeof(str))
反引號+解析變數語法

四.Object 物件型別

1.字典

        var obj = {}

        // (2)js物件(字典)
        var obj = {"a":1,"b":2,"c":3}

        // (3)新增/修改物件
        obj["a"] = 100
        obj["d"] = 300
        console.log(obj,typeof(obj))
        console.log(obj instanceof Object)

2.陣列

// (1)定義空物件(陣列)
        var arr = []

        // (2)js物件(陣列)
        var arr = [1,2,3,4]

        // (3)新增/修改物件
        arr[0] = 100
        arr[4] = 3000

        console.log(arr,typeof(arr))
        console.log(arr[6])
        console.log(arr instanceof Array , 333)

3.function函式

        function func(){
            console.log("func ... ")
        }
        func()
        console.log(func instanceof (Array,Number,Function) , 333444)

5.特別的關鍵字

        // null 空(等價python中的None)
        var a = null;
        console.log(a ,typeof(a));

        // undefined 未定義的
        var b;
        var b = undefined ;
        console.log(b, typeof(b)) ;

五. 強制轉換Number

1.強制轉換整型:parseInt 數字開頭即可轉換,布林型轉換不了

        var n = 1234
        var n = "ppppp"        // NaN
        var n = "9999"         // 9999
        var n = "99pppp"       // 99
        var n = "pp12"         // NaN
        var n = "109.34"       // 109
        var n = "109.123asdfasd2" // 109
        var n = "asdfasd2109.123" // NaN
        var n = []                // NaN
        var n = {}                // NaN
        var n = true              // NaN
        var res = parseInt(n)
        console.log(res,typeof(res))
強轉整型

2.強轉浮點型

parseFloat 數字開頭即可轉換 , 布林型轉換不了,可保留小數
        var n = 1234              // 1234
        var n = "ppppp"        // NaN
        var n = "9999"         // 9999
        var n = "99pppp"       // 99
        var n = "pp12"         // NaN
        var n = "109.34"       // 109.34
        var n = "109.123asdfasd2" // 109.123
        var n = "asdfasd2109.123" // NaN
        var n = []                // NaN
        var n = {}                // NaN
        var n = true              // NaN
        var res = parseFloat(n)
        console.log(res,typeof(res))
強轉浮點型

3.Number

可以轉換布林型別,也可以轉換純數字字串
        var n = false       // 0
        var n = true        // 1
        var n = "123"       // 123
        var n = "123.123"   // 123.123
        var n = "123sdf"    // NaN 
        var res = Number(n)
        console.log(res,typeof(res))
型別轉換

六.強制轉換String

"""
單純的在資料兩邊套引號,表達字串
"""
        var str = 1000;
        var str = 3.434
        var str = []
        var str = {}
        var str = undefined
        var str = null
        var str = NaN
        var res = String(str)
        console.log(res , typeof(res))

七.強制轉換Boolean

// 布林值為假的7中情況
var a = 0
var a = 0.0
var a =''
var a = false
var a = null
var a = NaN
var a = undefined


/注意點
var a = [] # 真的
var a = {} # 真的
var res = Boolean(a)
console.log(res , typeof(res))

八.自動型別轉換

1.Bnuber + Boolean

        var res = 10 + true
        var res = 19.76 + true
        var res = 10 + 3.4
        console.log(res , typeof(res))

2.Number + Boolean + String

        // 對於字串的自動轉換,+號的作用是拼接
        var res = true + "122"
        var res = 100 + "199"
        var res = 33 + 44 + "10"
        var res = 33+ "11" + 88
        console.log(res , typeof(res)) 

3.除了+號 其他的符號都可以參與運算

        var res = 100 - "199"
        var res = 100 / false
        var res = 3 * "5"
        var res = 3 * "abc"  // NaN
        console.log(res ,typeof(res))

九.js的運算

1. ++ -- 遞增 遞減

        // num++ 先賦值在自增
        var num = 10
        var res = num++;
        console.log(res,num)

        // ++num 先自增在賦值
        var num = 10
        var res = ++num
        console.log(res,num)

        // num-- 先賦值在自減
        var num = 10
        var res = num--
        console.log(res,num)

        // ++num 先自減在賦值
        var num = 10
        var res = --num
        console.log(res,num)
遞增 遞減

2. === !== && or not

        // (2) === !== (全等於,不全等於) 嚴格比較兩樣東西: (1) 比較值的大小 (2)比較值的型別
        var res = "1" === 1
        var res = "1" !== 1
        console.log(res)

        // (3) && => and  || => or   ! => not
        var num = 10
        if(3<num && num < 5){
            console.log("ok1")
        }

        if(num < 3  || num >= 10){
            console.log("ok2")
        }

        var num = 0
        if(!num){
            console.log("ok3")
        }
===

3.三元(目)運算子

// var res = 表示式?真值:假值
var age = 18;
var res = age >= 18?"成年人":"青少年"
console.log(res,typeof(res))
三元運算子

十.資料型別的建立時的注意事項

        var x1 = new Object();    // 一個新的 Object 物件
        var x2 = new String("abcd");    // 一個新的 String 物件
        var x3 = new Number();    // 一個新的 Number 物件
        var x4 = new Boolean();   // 一個新的 Boolean 物件
        var x5 = new Array();     // 一個新的 Array 物件
        var x6 = new RegExp();    // 一個新的 RegExp 物件
        var x7 = new Function();  // 一個新的 Function 物件
        var x8 = new Date();      // 一個新的 Date 物件
        console.log(x1,typeof(x1))
        console.log(x2,typeof(x2)) // object

        var ceshi = "abcd"         // string
        // 比較值的大小
        var res = ceshi == x2
        // 嚴格比較 : 1.大小 2.型別
        var res = ceshi === x2
        console.log(res)

推薦使用後者,速度更快,不會出現邏輯錯亂 (推薦)

        var x1 = {};            // 新物件
        var x2 = "abcd";        // 新的原始字串
        var x3 = 0;             // 新的原始數值
        var x4 = false;         // 新的原始邏輯值
        var x5 = [];            // 新的陣列物件
        var x6 = /()/           // 新的正則表示式物件
        var x7 = function(){};  // 新的函式物件

        var ceshi = "abcd"
        var res = ceshi == x2
        var res = ceshi === x2
        console.log(res)

十一. 流程控制_分支結構

var wangyongjuan = "富婆";

1.單項分支

        if(wangyongjuan == "富婆"){
            console.log("意味著捐很多錢")
        }

2.雙項分支

var wangyongjuan = '青春的小女生'
if(wangyongjuan=='富婆'){
  console.log('意味著娟很多錢')  
}else{
  console.log('被娟很很多錢')  
}

3.多項分支

        var age = 1
        if(0 < age && age < 10){
            console.log("兒童時代")
        }else if(10 <= age && age < 18){
            console.log("青少年時代")
        }else if(18<=age && age < 40){
            console.log("壯年時代")
        }else if(40 <= age && age < 90){
            console.log("廣場舞時代")
        }else{
            console.log("入土時代")
        }

4.巢狀分支

        var youfang = true;
        var youche = true;
        if(youfang){
            if(youche){
                                    console.log("富婆,老子要嫁給你~")
            }
        }

十二. switch_case

        // 獲取星期幾
        var date = new Date()
        console.log(date)
        var res = date.getDay()
        console.log(res , typeof(res))
        res = "1"
        // switch 屬於嚴格型別比較: (1)大小 (2) 型別
        switch(res){
            case 1 :
                 console.log("星期一")            
            case 2:
                 console.log("星期二")
                 break;
            case 3:
                 console.log("星期三")
                 break;
            case 4:
                 console.log("星期四")   
                 break;         
            case 5:
                 console.log("星期五")
                 break;
            case 6:
                 console.log("星期六")
                 break;
            default:
                console.log("星期日")
                break;
                
        }
分支結構: switch ... case ...

十三 流程控制_迴圈結構

1. for 迴圈

 /*         1      2          3
            for(初始值;判斷條件;自增自減的值){
                code ... 
            }
            先執行1,2,滿足條件進入到迴圈體中執行程式碼
            執行一遍之後,回到3號進行自增自減
            在回到2號判斷條件是否滿足
            如果滿足,執行
            如果不滿足,不執行,依次類推...
            最後不滿足 迴圈終止;        
*/
 for(var i = 1;i<=100;i++){
            console.log(i)
        }

        // 跳過55
        for(var i = 1;i<=100;i++){
            if(i == 55){
                continue;
            }
            console.log(i)
        }

2 while 迴圈

var i = 10
        while(i <=20){            
            if(i == 18){
                break;
            }
            console.log(i)
            i++
}

3.for(var i in Iterable){} 作用: 遍歷資料

var arr = ["耿擇時","家營和","孫翔宇","張銀","王生父"]
        for(var i in arr){
           console.log(i) 
           console.log(arr[i])
        }
        console.log("<===========3===========>")
        // obj : 預設獲取是鍵
        var obj = {"gzs":"耿擇時","jyh":"家營和","sxy":"孫翔宇"}
        for(var i in obj){
            console.log(i)
            console.log(obj[i])
}

4.for(var i of Iterable){} 作用: 遍歷資料

// arr : 預設獲取的是陣列中的值 
        var arr = ["耿擇時","家營和","孫翔宇","張銀","王生父"]
        for(var i of arr){
           console.log(i) 
        }

        // var i of/in Iterable 都可以處理陣列和字串
        for(var i of "abcdefg"){
            console.log(i)
        }

十四.函式_引數

一 函式

1. 普通函式

//方式一 存在預載入機制,提前把函式載入到記憶體中,在執行程式碼
        func1()
        function func1(){
            console.log("我是func1")
        }

2.匿名函式

//匿名函式沒有預載入機制,必須先定義在呼叫
var func2 = function(){
  console.log('我是func2')  
}
func2()

3. 不推薦 (必須先定義在呼叫)

        // var func3 = new Function("alert(1213);document.write(1234);console.log(55667)");
        // console.log(func3,typeof(func3));
        // func3()

4.箭頭函式(ES6新增瞭解)

        function ceshi(x,y){
            return x+y
        }
        var res = ceshi(1,2)
        console.log(res)

        var ceshi = (x,y) => {return x+y;}
        console.log(ceshi(3,9))

5. 閉包函式

function outer(){
  var father = '王健林'
  function inner(){
        console.log(`你的爸爸${father}`)  
    }
    return inner

}    
var func = outer()
func()

二 函式的引數

1.不會報錯,區分與python

        function func_new1(a,b,c){
            console.log(a,b,c)
        }
        // func_new(1,2,3)
        func_new1()
        console.log(111)

2.不會報錯,區分與python

        function func_new2(){
        }
        func_new2(1,2,3,4)

3.arguments 計算累加和

        function func_new3(){
            // js中arguments 相當於 python的*args收集引數 ,打包成可迭代物件
            console.log(arguments)
            var total = 0
            for(var i of arguments){
                console.log(i)
                total += i
            }
            return total
        }

        var res = func_new3(1,2,3,5,6,7)
        console.log(res)

十五.函式_呼叫

 function func(){
            console.log("函式在執行1...")
        }

        // 1.正常呼叫
        func();

        // 2.函式立即執行 (普通函式)
        (function func(){
            console.log("函式在執行2...")
        })();

        // 3.函式立即執行 (匿名函式)
        (function(){
            console.log("函式在執行3...")
        })();

        // 4.函式立即執行
        !function(){
            console.log("函式在執行4...")
        }();
        
        ~function(){
            console.log("函式在執行5...")
        }();

        +function(){
            console.log("函式在執行6...")
        }();
        
        -function(){
            console.log("函式在執行7...")
        }();
函式_呼叫