Day3-javascript基礎

1.認識js

<!--
    1.什么是js
    js是javascript的縮寫,是web標準中的行為標準,主要負責網頁中內容的變化
    js是python類似的一門腳本語言;專門用來為web開發做服務的
    
    2.js代碼寫在哪兒
    1)內聯js(行內js): 寫在標簽的事件屬性中,例如onclick屬性
    2)內部js:  寫在script標簽中(script標簽理論可以寫html的任何位置,但是一般寫在head或者body中)
    3)外部js: 將js代碼寫在一個js文件中, 然后在html文件中通過script標簽導入
              注意: 用來導入外部js文件的script標簽中不能再寫其他的js代碼
              
    3.js能做什么
    1)修改標簽內容
    2)修改標簽屬性
    3)修改標簽樣式
    4)獲取標簽屬性和內容
    5)在網頁中添加新的內容
    
    4.怎么寫js代碼
    js語法
-->

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <!--=====================1.寫在哪兒示例=================-->
        <!--2.內部js-->
        <!--<script type="text/javascript">
            //在這兒就可以寫js代碼
            alert('內部js1')
        </script>-->
        
        <!--3.外部js-->
        <!--<script type="text/javascript" src="js/26-認識js.js">
            
        </script>-->
        
        <!--1.內聯js-->
        <!--<button onclick="alert('內聯的js')">按鈕1</button>
        
        
        <script type="text/javascript">
            alert('內部js2')
        </script>-->
        
        <!--==================2.js能做什么===================-->
        <!--1)修改標簽內容-->
        <p id="p1">我是段落1</p>
        
        <button onclick="document.getElementById('p1').innerText='我是python'">改變內容</button>
        <br /><br />
        
        <!--2)修改標簽屬性-->
        <img id="img1" src="img/bear.png"/>
        <button onclick="document.getElementById('img1').src='img/ghost.png'">修改圖片</button>
        
        <!--3)修改標簽樣式-->
        <p id="p2">我是段落2</p>
        <button onclick="document.getElementById('p2').style.color='red'">改變字體顏色</button>
        <br /><br />
        
        <!--4)獲取標簽內容/屬性-->
        <input  type="" name="" id="input1" value="" />
        <button onclick="alert(document.getElementById('input1').value)">獲取內容</button>
        
        <!--5)在網頁中添加內容-->
        <script type="text/javascript">
            names = ['百度', '新浪', '愛奇藝', '千鋒']
            for(name of names){
                document.write('<font>&emsp;</font>')
                document.write('<a )
            }
//          for(x=0;x<10;x++){
//              document.write('<a )
//          }
            
        </script>
        
        
    </body>
</html>

<!--<script type="text/javascript">
    alert('內部js3')
</script>-->

2.js基礎語法

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    </body>
</html>


<script type="text/javascript">
    //1.輸出
    // console.log() 相當于python中的print()
    console.log('輸出內容')
    
    //2.注釋
    //js的注釋方式和c一樣
    //單行注釋
    /*
     多行注釋1
     多行注釋2
     */
    
    //3.語句: 一條語句占一行,一行結束后可以寫分號也可以不寫
    //語句對縮進沒有要求
    console.log('不寫分號')
    console.log('寫分號');
    //如果一行要寫多條語句,語句之間必須用分號隔開
    console.log('語句1'); console.log('語句2')
console.log('語句3')
        console.log('語句4')
    
    //4.標識符
    //由字母、數字、下劃線和$組成,并且數字不能開頭
    abc = 100
    at23 = 200
    ah_ = 300
    abc$ = 400
    $ssd = 5000
    console.log(abc, at23, ah_, $ssd)
    
    //23hj = 100    //Uncaught SyntaxError: Invalid or unexpected token
    
    //5.關鍵字: 在js中有特殊功能和特殊意義的標識符
    //for, while, var, let, const, true, false等
    
    //6.常用數據
    // typeof  - 獲取數據類型
    //1)數字(Number): 89, 12.9, 3e4
    //2)字符串(String): 使用單引號或者雙引號引起來, 'abc', "abc", 'abc\n123', '\u4e00'
    //3)布爾(Boolean): 只有true和false兩個值
    //4)數組(Array): 相當于python中的列表: [123, 'abc', true]
    //5)對象(Object): 長得像python中的字典,其實也是對象
    console.log(typeof(34))
    console.log(typeof 3e4)
    console.log('abc', "abc", '\tabc\n123', '\u4e00')
    
    obj1 = {
        name:'小明',
        'age': 18
    }
    console.log(obj1['name'], obj1['age'])
    console.log(obj1.name, obj1.age)
    
    
    
    
    
</script>

3.變量

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    </body>
</html>
<script type="text/javascript">
    //1.變量的聲明
    /*
     1)語法一:
     變量名 = 值
     
     a.不管在哪兒聲明都是全局變量
     b.可以修改變量的值
     
     2)語法二:
     var 變量名 = 值
     
     a.如果在{}或者函數外聲明,從聲明開始任何位置都可以用
     b.如果在函數中聲明,就只能在函數用
     c.可以修改變量的值
     d.聲明前可以先使用,默認值是undefined
     
     3)語法三:
     let 變量名 = 值
     
     a.沒有聲明在{}中,從聲明開始任何位置都可以用
     b.如果在{}中聲明,就只能在{}中使用
     c.可以修改變量的值
     
     
     4)語法四:
     const 變量名 = 值
     
     a.變量的值不能修改
     
     */
    console.log('===============1.四種聲明變量的方式==================')
    name = '小明'
    console.log(name)
    name = '小花'
    console.log(name)
    
    var age = 18
    console.log(age)
    age = 20
    console.log(age)
    
    let gender = '男'
    console.log(gender)
    gender = '女'
    console.log(gender)
    
    const height = 180
    console.log(height)
    //height = 200        // 報錯!
    //console.log(height)
    
    
    console.log('==================2.不同的聲明方式的特點================')
    //1)語法一的特點
    num1 = 100
    console.log('在外面聲明外面用:',num1)
    
    {
        console.log('在外面聲明代碼塊中用:',num1)
        num2 = 200
        console.log('在塊中聲明塊中用:', num2)
        
    }
    
    console.log('在塊中聲明塊外面用:', num2)
    
    function func1(){
        console.log('在外面聲明函數中使用:', num1)
        console.log('在塊中聲明函數中用:', num2)
        
        num3 = 300
    }
    func1()
    console.log('在函數中聲明函數外部用:', num3)
    
    
    //2)var變量
    function func2(){
        num11 = 111
        var num12 = 222
    }
    func2()
    console.log('num11:', num11)
    //console.log('num12:', num12 )   //報錯!!
    
    //3)let變量
    {
        num21 = 111
        var num22 = 222
        let num23 = 333
        console.log('num23:', num23)
    }
    console.log('num21:', num21)
    console.log('num22:', num22)
    //console.log('num23:', num23)   //報錯!! 
    
    console.log('==================變量提前==================')
    console.log(score)
    var score = 100
    
    //console.log(study_id)
    let study_id = '001'
    
    
    
    
    
</script>

4.運算符

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    </body>
</html>

<script type="text/javascript">
    //js支持的運算符: 數學運算符、比較運算符、邏輯運算符、賦值運算符
    //1.數學運算符: +,-,*,/,%,**, ++, --
    //+,-,*,/和數學的功能一樣; 沒有整除對應的運算符,會通過Math模塊提供的方法來支持取整的操作
    console.log(10/2) // 5
    console.log(5/2)  //2.5
    //%和**和python一樣
    
    //++ -> 自加1,   --  -> 自減1
    num = 10
    num++    //num = num+1
    console.log(num)   //11
    ++num    //num = num+1
    console.log(num)   //12
    num--
    console.log(num)   // 11
    --num
    console.log(num)   //10
    
    num1 = 10
    num2 = num1++   //num2 = num1; num1+=1
    console.log('num2:', num2, num1)   //10
    
    num11 = 10
    num22 = ++num11  //num11+=1; num22=num11
    console.log('num22:', num22, num11)  //11
    
    a = 10
    sum = ++a + a++ + --a + a-- + ++a
    console.log(sum, a)
    /*
     *a: 11  12  11  10  11
     sum = 11 + 11 + 11 + 11 + 11
     sum = 55
     a = 11
     */
    
    //2.比較運算符:>, <, ==, !=, ===, !==
    //結果都是布爾值
    //判斷大小和python一樣
    //==判斷相等的時候,如果數據類型不同會先轉換成相同的數據類型,然后再判斷是否相等
    //===判斷相等的時候,如果數據類型不同結果直接是false
    console.log('5' == 5)   //true
    console.log('5' === 5)  //false
    console.log(5 === 5)    // true
    
    //3.邏輯運算符: &&(邏輯與), ||(邏輯或), !(邏輯非)
    age = 18
    score = 90
     
    console.log(age > 18 && score > 80)   // false
    console.log(age > 18 || score > 80)   // true
    console.log(!(age > 18))   // true
    
    //4.賦值運算符: =, +=, -=, *=, /=, %=, **=
    //和python一樣
    
    
    
    
    
    
    
    
    
    
    
    
</script>

5.分支結構

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    </body>
</html>

<script type="text/javascript">
    //js中分之結構有兩種: if、switch
    //1.if語法
    /*
     if(條件語句){
        滿足條件需要執行的代碼
     }
     
     if(條件語句){
        滿足條件要執行的代碼
     }else{
        不滿足條件要執行的代碼
     }
     
     
     if(條件語句1){
        代碼段1
     }else if(條件語句2){
        代碼段2
     }else if(條件語句3){
        代碼段3
     }
     ...
     else{
        代碼段N
     }
     */
    //2.switch語法
    /*
     1)語法:
     swicth(表達式){
        case 值1:{
            表達式1
        }
        case 值2:{
            表達式2
        }
        ...
        default:{
            表達式N
        }
     }
     
     2)執行過程:
     先計算表達式的值,然后讓這個值依次和case后面的每個值進行比較,哪個case后面的值和表達式的值相等,就將這個case
     作為入口,依次執行后面的表達式,直接執行完或者執行過程中break為止。如果沒有哪個case的值和表達式的值相等,
     那么就會將default作為入口
     
     */
    a = 2
    switch(a){
        case 10:
        case 11:
        case 12:{
            console.log('表達式0')
            break
        }
        case 1:{
            console.log('表達式1')
            break
        }
        case 2:{
            console.log('表達式2')
            break
        }
        case 3:{
            console.log('表達式3')
            break
            
        }
        default:{
            console.log('表達式N')
        }
            
    }
    
    
    
    
    
</script>

6.循環結構

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    </body>
</html>
<script type="text/javascript">
    //js中有for循環和while循環
    //1.for循環
    /*
     1)C語言的for循環
     語法:
     for(表達式1;表達式2;表達式3){
        循環體
     }
     
     表達式1
     for(;表達式2;){
        循環體
        表達式3
     }
     
     相當于:
     表達式1
     while 表達式2:
        循環體
        表達式3
     
     for(給變量賦初值;循環條件;修改變量的值){
        循環體
     }
     
     2) for-in循環
     for(變量 in 序列){
        循環體
     }
     讓變量去序列中取值一個一個的取(取的是下標/屬性名),取完為止,每取一個值執行一次循環體
     
     3) for-of循環
     for(變量 of 序列){
        循環體
     }
     讓變量去序列中取值一個一個的取(取的值),取完為止,每取一個值執行一次循環體
     
     */
    //2.while循環
    /*
     1)while循環
     while(條件語句){
        循環體
     }
     
     2)do-while循環
     do{
        循環體
     }while(條件語句)
     */
    
    
    //計算1+2+...+100
    sum = 0
    for(let num=1;num<=100;num++){
        sum += num
    }
    console.log(sum)
    
    //產生數字100~199
    for(let num=100;num<=199;num++){
        console.log(num)
    }
    
    console.log('===================================')
    //產生數字100~1
    for(let num=100; num>=1;num--){
        console.log(num)
    }
    
    console.log('===================================')
    //產生數字2,4,6,8,... 100
    for (let num=2;num<=100;num+=2) {
        console.log(num)
    }
    
    console.log('==================for-in循環=================')
    for(let x in 'abc'){
        console.log('x:', x, 'abc'[x])
    }
    
    obj1 = {a:100, b:200, c:300}
    for(let x in obj1){
        console.log('x:', x, obj1[x])
    }
    
    console.log('==================for-of循環=================')
    for(let item of 'abc'){
        console.log('item:', item)
    }
    
    for(let item of [100, '小明', true]){
        console.log(item)
    }
    
    //注意: for-of不能遍歷對象
//  for(let item of obj1){
//      console.log(item)
//  }
    
    
</script>

7.函數

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    </body>
</html>

<script type="text/javascript">
    
</script>

<script type="text/javascript">
    //1.普通函數
    /*
     function 函數名(參數列表){
        函數體
     }
     
     注意: 1)js中函數的調用可以放在聲明之前(提升的時候不可以越過script標簽)
           2)調用的函數的時候,任何函數都可以傳任意個參數,跟形參沒有關系;
           形參可以直接獲取部分實參的值;函數中arguments對象可以獲取函數調用時所有的實參
           3)關鍵字參數無效
     
     */
    //===============1.函數的提升================
    func1()
    
    function func1(){
        console.log('函數1被調用')
        console.log('this:',this)
    }
    
    func1()
    
    //===============2.函數的參數=====================
    function func2(){
        console.log('函數2被調用')
    }
    func2()
    func2(10)
    func2(10, 20)
    func2(10, 20, 30)
    
    console.log('==========')
    function func3(x, y=10){
        console.log('函數3被調用', x, y)
        console.log(arguments)
        for(let x of arguments){
            console.log('x:', x)
        }
    }
    func3()
    func3(1)
    func3(1,2)
    func3(1,2,3,4)
    func3(y=200,x=100)
    
    //2.匿名函數
    /*
     變量 = function (參數列表){
        函數體
     }
     */
    
    function func4(fn){
        console.log('=====函數4======')
        fn()
        console.log('===============')
    }
    
    function func5(){
        console.log('函數5')
    }
    
    func4(func5)
    
    func4(function(){
        console.log('匿名函數')
    })
    
    //3.箭頭函數
    /*
     (參數列表)=>{
        函數體
     }
     */
    func4(()=>{
        console.log('箭頭函數')
    })
    a = (x,y)=>{return x+y}
    console.log(a(10, 20));
    
    //4.自調用函數
    /*
     (function(形參列表){
        函數體
     })(實參列表)
     
     注意: 自調用函數的上一條語句必須在結束的時候加分號
     */
    (function(x, y){
        console.log('x+y=', x+y)
    })(100, 200)
    
</script>

<script type="text/javascript">
    func1()
</script>

<script type="text/javascript">
    a = 10  //相當于: window.a = 10
    console.log(a)
    console.log(window.a)
    
    
    func1()
    window.func1()
</script>

8.字符串和數組

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    </body>
</html>
<script type="text/javascript">
    //1.字符串
    /*
     1)獲取字符
     字符串[下標]
     
     注意:js中的下標范圍是0~長度-1
     
     2)字符串加法運算(不支持乘法運算)
     數據+字符串/ 字符串+數據/ 字符串+字符串  - 字符串拼接
     
     3)字符串長度
     字符串.length
     
     4)字符串相關方法
     
     */
    str1 = 'hello js'
    console.log(str1[1])
    
    str2 = 'abc'+'hello'
    console.log(str2)
    
    str3 = false+12.5+'abc'+100+true
    console.log(str3)
    
    console.log('abc'*3)   //NaN  
    
    console.log('abc'.length)
    
    str3 = 'abc'
    str4 = new String('abc')
    console.log(str4+100)
    console.log(str4)
    
    console.log('===============字符串相關方法==============')
    str5 = 'hellol jslll'
    //1.切片
    console.log(str5.slice(1, 4))   //str5[1:4]  -> ell
    
    //2.替換
    //注意: js中的正則表達式寫在兩個/之間
    console.log(str5.replace(/l+/g, 'A'))
    
    //3.切割
    console.log('abc 123 true'.split(' '))
    
    //補充: 正則匹配
    //正則對象.test(字符串)  - 判斷字符串和正則表達式是否匹配,結果是布爾
    re = /^1[3-9]\d{9}$/
    console.log(re.test('11273828333'))
    
    //2.數組
    /*
     1)查
     數組[下標]   -  獲取指定下標對應的元素,如果下標不存在返回undefined
     遍歷: for-in  for-of
     
     2)增
     數組[下標] = 值   - 下標不存在的時候會添加元素
     數組.push(元素)   - 在數組的最后添加一個元素
     數組.unshift(元素)  - 在數組的最前面添加一個元素
     數組.splice(下標,0,元素1,元素2,元素3,...)  - 在指定下標前插入指定一個或者多個元素
     
     3)刪
     數組.splice(下標, N)  - 從數組指定下標開始,刪除N個元素
     數組.pop()  -  取出數組中最后一個元素
     數組.shift() - 取出數組中第一個元素
     
     4)改
     數組[下標] = 值
     */
    console.log('============1.查=============')
    nums = [23, 9, 78, 67]
    console.log(nums[3])     // 67
    console.log(nums[100])   // undefined
    
    console.log('===========2.增===============')
    scores = []
    scores[2] = 19
    console.log(scores)
    
    nums = [23, 9, 78, 67]
    nums.push(100)
    console.log(nums)
    
    nums.unshift(45)
    console.log(nums)
    
    nums = [23, 9, 78, 67]
    nums.splice(1,0,1000,100)
    console.log(nums)
    
    console.log('===========3.刪===============')
    nums = [23, 9, 78, 67]
    nums.splice(1,1)
    console.log(nums)
    
    nums = [23, 9, 78, 67]
    result = nums.pop()
    console.log(result, nums)
    
    nums = [23, 9, 78, 67]
    result = nums.shift()
    console.log(result, nums)
    
    console.log('===========3.改===============')
    nums = [23, 9, 78, 67]
    nums[0] = 100
    console.log(nums)
    
    console.log('=============4.其他常用方法==============')
    //1.排序
    /*
     數組.sort(fn)
     */
    
    //按元素的大小從大到小排序
    nums = [23, 9, 78, 67]
    function func1(item1, item2){
        return item2 - item1
    }
    nums.sort(func1)
    console.log(nums)
    
    //按元素個位數從小到大排序
    nums = [23, 9, 78, 67]
    function func2(item1, item2){
        return item1%10 - item2%10
    }
    nums.sort(func2)
    console.log(nums)
    
    //按元素各位數的和從小到到排序: [123, 91, 65, 78]
    nums = [123, 78, 65, 91]
    nums.sort(function(item1, item2){
        sum1 = 0
        for(let x of String(item1)){
            sum1 += Number(x)
        }
        
        sum2 = 0
        for(let x of String(item2)){
            sum2 += Number(x)
        }
        
        return sum1 - sum2
    })
    console.log(nums)
    
    //2.數組.join(字符串=',')   -  用字符串將數組中元素拼接在一個產生一個新的字符串
    array1 = [123, '小明', true]
    result = array1.join('+')
    console.log(result)
    
    //3.數組.forEach(函數)
    array1 = [123, '小明', true]
    array1.forEach(function(item, index){
        console.log(item, index)
    })
    
    
    

</script>

8.對象

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    </body>
</html>

<script type="text/javascript">
    //1.對象的直接量
    /*
     {
        屬性1:屬性值1,
        屬性2:屬性值2,
        ....
     }
     */
    p1 = {
        name:'小明',
        age: 18,
        gender:'男'
    }
    p2 = {
        name:'張三',
        age: 20, 
        gender:'女'
    }
    
    //2.構造方法(相當于類)
    /*
     構造方法本質就是函數。
     
     語法:
     function 函數名/類名(參數列表){
        this.屬性1 = 值1
        this.屬性2 = 值2
        ...
        return this
     }
     
     構造方法的調用(創建對象): new 函數名()
     */
    function Person(name, age, gender='男'){
        //===對象屬性====
        this.name = name
        this.age = age
        this.gender = gender
        
        //===對象方法====
        this.eat = function(food){
            console.log(this.name+'在吃'+food)
        }
        this.study = function(){
            console.log(this.name+'在學習')
        }
        
        return this
    }
    
    p3 = new Person('小紅', 20)
    p4 = new Person('Tom', 30, '女')
    console.log(p1)
    console.log(p3)
    console.log(p4)
    
    //3.使用對象屬性  - 查
    //對象.屬性
    //對象[屬性名]
    console.log(p1.name, p1['age'])
    console.log(p3.name, p3['age'])
    
    p3.eat('面條')
    p4.eat('面包')
    
    p4.study()
    
    //4.修改對象屬性/添加對象屬性
    //對象.屬性 = 值     -   屬性如果存在就是修改,屬性不存在就是添加
    //對象[屬性名] = 值   -   屬性如果存在就是修改,屬性不存在就是添加
    
    p3.id = '0001'
    console.log(p3)
    console.log(p3.id, p3['id'])
    
    p3['weight'] = 100
    console.log(p3)
    
    p3.name = '余婷'
    p3['age'] = 18
    console.log(p3)
    
    console.log(p4)
    
    //5.添加屬性和方法
    /*
     類名.prototype.屬性名 = 值    - 給指定的類添加屬性和方法
     */
    Person.prototype.abc = 100
    console.log(p4.abc, p4['abc'])
    
    p5 = new Person('大黃', 3)
    console.log(p5.abc)
    
    
    String.prototype.ytToUpper = function(){
        //'a' <= char <= 'z'(python)  -> char >= 'a' && char <= 'z'
        tChar = this[0]
        if(tChar>='a' && tChar <= 'z'){
            return tChar.toUpperCase()+this.slice(1)
        }
        return this
    }
    
    str1 = 'abc'
    console.log(str1.ytToUpper())
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
</script>
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容