天天看點

JavaScript學習筆記

JavaScript學習筆記

一、引入js

1.1、内部标簽

<script>
		//....
</script>	
           

1.2、外部引入

<script scr="abc.js"></script>	
           
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--  script内寫js  -->
    <script>
        alert("hello dd");
    </script>
<!--外部導入-->
    <script src="js/dd.js"></script>
</head>
<body>

<!--這裡也可以寫-->
</body>
</html>
           

二、基本文法入門

// 1.定義變量  變量類型 變量名 = 變量值;
const num = 123; // 常量
let  dd = "ddd"; // 變量
alert(num);

// 2.條件控制
if(2>1){
    alert("turn");
}

           

2.1、資料類型

number

JS不區分小數和整數,Number

123
123.1
1.123e3
-99
NaN  // not a number
Infinity //表示無限大
           

字元串

'abc' "abc"

布爾值

turn, false

邏輯運算

&&
||
!
           

比較運算符(重要!)

=
== 等于(類型可以不一樣,值一樣,也會判斷為turn)
=== 絕對等于(類型一樣,值一樣,才會判斷為turn)
           

這是JS的缺陷,堅持不要使用==比較

須知:

  • NaN===NaN,這個與所有的數值都不相等,包括自己
  • 隻能通過isNaN(NaN)來判斷這個數是否為NaN

浮點數問題:

console.log((1/3))===(1-2/3)
           

盡量避免使用浮點數進行運算,存在精度問題!

Math.abs(1/3-(1-2/3))<0.00000001
           

null和undefined

  • null 空
  • undefin 未定義

數組

Java的數組必須是相同類型的對象~,JS中不需要這樣!

var arr = [1,5,6,8,'hello',null,true];
new Array(1,12,34,15)
           

去數組下标:如果越界了,就會

undefined
           

對象

對象是大括号,數組是中括号~~

每個屬性之間使用逗号隔開,最後一個不需要添加
var person{
    name:"dd",
    age:3,
    tags:['js']
}
           

2.2嚴格檢查模式

<!--
    前提: IEDA需要設定支援ES6文法
    'use strict'; 嚴格檢查模式,預防JavaScript的随意性導緻産生的一 些問題
    必須寫在JavaScript的第一行!
    局部變量建議都使用let去定義~
-->
    <script>
        'use strict'
        let i=1;
    </script>
           

三、資料類型

1、 正常字元串我們使用單引号,或者雙引号包裹

2、注意轉義字元\

\'
\n
\t
\u4e2d \u#### Unicode字元
\x41 Asc11字元
           

3.多行字元編寫

//tab上面 esc鍵下面
var msg =
`he11o
world
你好ya
你好`
           

4.模闆字元串

let name = "dd";
         let age = 3;
         let msg=`你好,
         ${name}`
           

5.字元串長度

str.length
           

6.字元串的可變性-不可變

7.大小寫轉換

//注意,這裡是方法,不是屬性了
student. touppercase()
student. toLowe rCase ()
           

8.student.indexOf("t")

9.substring

[)
student. substring(1) // 從第一個字元串截取到最後-一個字元串
student . substring(1,3) //[1,3)
           

3.1、數組

Array可以包含任意的資料類型

var arr = [1,2,3,4,5,6]
arr[0] = 5

           

1.長度

arr.length
           

注意:加入給arr.length指派,數組大小就會發生變化~,如果指派過小,元素就會丢失

2.indexOf, 通過元素獲得下标索引

arr.indexof(2)
1
           

字元串的“1"和數字1是不同的

3.slice () 截取Array的一 部分,傳回一個新數組,類似于String中的substring

4.push(), pop() 尾部

push:
壓入到尾部
pop:
彈出尾部的一個元素
           

5.unshift() , shift()頭部

unshift:
壓入到尾部
shift:
彈出尾部的一個元素
           

6.排序sort()

(3) ["b", "c", "a"]
arr.sort()
(3) ["a", "b", "c"]
           

7.元素反轉reverse()

(3) ["a", "b", "c"]
arr.reverse()
(3) ["c", "b", "a"]
           

8.concat ()

arr.concat([1,2,3])
(6) ["c", "b", "a", 1, 2, 3]
arr
(3) ["c", "b", "a"]
           

注意: concat () 并沒有修改數組,隻是會傳回-一個新的數組

9.連接配接符 join

列印拼接數組,使用特定的字元串連接配接

(3) ["c", "b", "a"]
arr.join('-')
"c-b-a"
           

10.多元數組

arr = [[1,2],[3,4],["5","6'"]];
arr[1] [1]
4
           

3.2、對象

var 對象名 = {
	屬性名:屬性值,
    屬性名:屬性值
}
//定義了一個person對象,它有三個屬性
         var person = {
             name:"dd",
             age: 18,
             score: 0
         }
           

Js中對象,.... 表示-一個對象,鍵值對描述屬性 xxXx: xXXx, 多個屬性之間使用逗号隔開,最後一個屬性不加逗号!

JavaScript中的所有的鍵都是字元串,值是任意對象!

1.對象指派

person
{name: "dd", age: 18, score: 0}
person.name="woshidd"
"woshidd"
           

2.使用一個不存在的對象屬性,不會報錯!undefined

person.dd
undefined
           

3.動态的删減屬性,通過delete删除對象的屬性

delete person.age
true
person
{name: "woshidd", score: 0}
           

4.動态的添加,直接給新的屬性添加值即可

person.haha = "haha"
"haha"
person
{name: "woshidd", score: 0, haha: "haha"}
           

5.判斷屬性值是否在這個對象中! XXX in xXx!

"name" in person
true
//繼承
"toString" in person
true
           

6.判斷一個屬性是否是這個對象自身擁有的hasOwnProperty()

person.hasOwnProperty("toString")
false
person.hasOwnProperty("name")
true
           

3.3、流程控制

if判斷

JavaScript學習筆記

while循環,避免程式死循環

JavaScript學習筆記

for循環

JavaScript學習筆記

forEach循環

ES5.1特性
JavaScript學習筆記

for …in-------下标

JavaScript學習筆記

3.4、Map和Set

ES6的新特性~

Map

JavaScript學習筆記

Set:無序不重複的集合

JavaScript學習筆記

3.5、iterator

es6新特性

周遊數組

JavaScript學習筆記

周遊Map

JavaScript學習筆記

周遊set

JavaScript學習筆記

四、函數

4.1、定義函數

定義方式一

絕對值函數

JavaScript學習筆記

一旦執行到return代表函數結束,傳回結果!

如果沒有執行return,函數執行完也會傳回結果,結果就是undefined

定義方式二
JavaScript學習筆記

function(x){…}這是一個匿名函數。但是可以吧結果指派給abs,通過abs就可以調用函數!

方式一和方式二等價!

調用函數
abs(10)//10
abs(-10) //10
12
           

參數問題:javaScript可以傳任意個參數,也可以不傳遞參數~

參數進來是否存在問題?

假設不存在參數,如何規避?

JavaScript學習筆記
arguments

arguments是一個JS免費贈送的關鍵字;

代表,傳遞進來的所有參數,是一個數組!

JavaScript學習筆記

問題:arguments包含所有的參數,我們有時候想使用多餘的參數來進行附加操作。需要排除已有參數~

rest

以前:

JavaScript學習筆記

ES6引入的新特性,擷取除了已經定義的參數之外的所有參數~…

JavaScript學習筆記

rest參數隻能寫在最後面,必須用…辨別。

4.2、變量的作用域

在javascript中,var定義變量實際是有作用于的。

假設在函數體重聲明,則在函數體外不可以使用~(閉包)

JavaScript學習筆記

如果兩個函數使用了相同的變量名,隻要在函數内部就不沖突

JavaScript學習筆記

内部函數可以通路外部函數的成員,反之則不行

JavaScript學習筆記

假設,内部函數變量和外部函數變量,重名!

JavaScript學習筆記

假設在JavaScript中,函數查找變量從自身函數開始~, 由“内”向“外”查找,假設外部存在這個同名的函數變量,則内部函數會屏蔽外部函數的變量。

提升變量的作用域
JavaScript學習筆記

結果:x undefined

說明:js執行引擎,自動提升了y的聲明,但是不會提升變量y的指派;

JavaScript學習筆記

這個是在javascript建立之初就存在的特性。 養成規範:所有 的變量定義都放在函數的頭部,不要亂放,便于代碼維護;

JavaScript學習筆記
全局變量
JavaScript學習筆記

全局對象window

JavaScript學習筆記

alert() 這個函數本身也是一個window的變量;

JavaScript學習筆記

javascript實際上隻有一個全局作用域,任何變量(函數也可以視為變量),假設沒有在函數作用範圍内找到,就會向外查找,如果在全局作用域都沒有找到,就會報錯 Refrence

規範

由于我們的所有變量都會綁定到window上,。如果不同的js檔案,使用了相同的全局變量,就會産生沖突—>如何減少這樣的沖突?

JavaScript學習筆記

把自己的代碼全部放入自己定義的唯一空間名字中,降低全局命名沖突問題~

jQuery中就是使用的該方法:jQuery.name,簡便寫法:$()

局部作用域
JavaScript學習筆記

ES6的let關鍵字,解決了局部作用域沖突的問題!

JavaScript學習筆記

都用let去定義局部作用域的變量;

常量

在ES6之前,怎麼定義常量:隻有用全部大寫字母命名的變量就是常量;建議不要修改這樣的值。

JavaScript學習筆記

在ES6引入了常量關鍵字 const

JavaScript學習筆記

4.3、方法

定義方法

方法就是把函數放在對象的裡面,對象隻有兩個東西:屬性和方法

JavaScript學習筆記

this.代表什麼?拆開上main的代碼看看

JavaScript學習筆記

this是無法指向的,是預設指向調用它的那個對象的;

apply

在js中可以控制this指向

JavaScript學習筆記

五、内部對象

标準對象
JavaScript學習筆記

5.1、Date

基本使用

JavaScript學習筆記

轉換

JavaScript學習筆記

5.2、JSON

JSON是什麼
JavaScript學習筆記

在javascript中,一切皆為對象,任何js支援的類型都可以用JSON表示

格式

  • 對象都用{}
  • 數組都用[]
  • 所有的鍵值對 都是用key:value

JSON字元串和js對象轉化

JavaScript學習筆記

JSON和JS對象的差別

JavaScript學習筆記

5.3、AJAX

  • 原生的js寫法 xhr異步請求
  • jQuery封裝好的方法$(#name).ajax("")
  • axios請求

六、面向對象程式設計

原型對象

javascript、java、c#------面向對象;但是javascript有些差別!

  • 類:模闆
  • 對象:具體執行個體

原型:

JavaScript學習筆記
JavaScript學習筆記
class集繼承

class關鍵字,是在ES6引入的

1、定義一個類、屬性、方法

JavaScript學習筆記

2、繼承

<script>
	//ES6之後========================
	//定義一個學生的類
	class Student{
		constructor(name){
			this.name = name;
		}
		hello(){
			alert('hello');
		}
}

	class XiaoStudent extends Student{
		constructor(name,grade){
			super(name);
			this.grade = grade;
		}
		myGrade(){
			alert('dd');
		}
	}

	var xiaoming = new Student("xiaoming");
	var xiaohong = new XiaoStudent("xiaohong",1);
</script>
12345678910111213141516171819202122232425
           

本質:檢視對象原型

JavaScript學習筆記

七、操作BOM對象(重點)

window

window代表浏覽器視窗

JavaScript學習筆記
Navigator(不建議使用)

Navigator封裝了浏覽器的資訊

JavaScript學習筆記

大多數時候,我們不會使用navigator對象,因為會被認為修改!

不建議使用這些屬性來判斷和編寫代碼

screen

代表螢幕尺寸

JavaScript學習筆記
location(重要)

location代表目前頁面的URL資訊

JavaScript學習筆記
document(内容DOM)

document代表目前的頁面,HTML DOM文檔樹

JavaScript學習筆記

擷取具體的文檔樹節點

JavaScript學習筆記

擷取cookie

JavaScript學習筆記

劫持cookie原理

JavaScript學習筆記

伺服器端可以設定cookie為httpOnly

history(不建議使用 )

history代表浏覽器的曆史記錄

JavaScript學習筆記

八、操作DOM對象(重點)

DOM:文檔對象模型

核心

浏覽器網頁就是一個Dom樹形結構!

  • 更新:更新Dom節點
  • 周遊Dom節點:得到Dom節點
  • 删除:删除一個Dom節點
  • 添加:添加一個新的節點

要操作一個Dom節點,就必須要先獲得這個Dom節點

獲得Dom節點
JavaScript學習筆記

這是原生代碼,之後我們盡量都使用jQuery();

更新節點
JavaScript學習筆記

操作文本

JavaScript學習筆記

操作css

JavaScript學習筆記
删除節點

删除節點的步驟:先擷取父節點,再通過父節點删除自己

JavaScript學習筆記

注意:删除多個節點的時候,children是在時刻變化的,删除節點的時候一定要注意。

插入節點

我們獲得了某個Dom節點,假設這個dom節點是空的,我們通過innerHTML就可以增加一個元素了,但是這個Dom節點已經存在元素了,我們就不能這麼幹了!會産生覆寫

追加

JavaScript學習筆記
JavaScript學習筆記
建立一個新的标簽
<script>
	var js = document.getElementById('js');//已經存在的節點
    var list = document.getElementById('list');
    //通過JS建立一個新的節點
    var newP = document.creatElement('p');//建立一個p标簽
    newP.id = 'newP';
    newP.innerText = 'Hello,Kuangshen';
    //建立一個标簽節點
    var myScript = document.creatElement('script');
    myScript.setAttribute('type','text/javascript');
    
    //可以建立一個style标簽
    var myStyle = document.creatElement('style');//建立了一個空style标簽
    myStyle.setAttribute('type','text/css');
    myStyle.innerHTML = 'body{background-color:chartreuse;}';//設定标簽内容
    
    document.getElementByTagName('head')[0].appendChild(myStyle);
</script>
123456789101112131415161718
           
insertBefore
var ee = document.getElementById('ee');
var js = document.getElementById('js');
var list = document.getElementById('list');
//要包含的節點.insertBefore(newNode,targetNode)
list.insertBefore(js,ee);
12345
           

九、操作表單

表單是什麼?form-----DOM樹
  • 文本框----text
  • 下拉框----select
  • 單選框----radio
  • 多選框----checkbox
  • 隐藏域----hidden
  • 密碼框----password

表單的目的送出資訊

獲得要送出的資訊
<body>
    <form action = "post">
        <p>
            <span>使用者名:</span><input type="text" id = "username" />
        </p>
        <!--多選框的值就是定義好的value-->
        <p>
            <span>性别:</span>
            <input type = "radio" name = "sex" value = "man" id = "boy"/>男
           	<input type = "radio" name = "sex" value = "woman" id = "girl"/>女
        </p>
    </form>
    <script>
    	var input_text = document.getElementById("username");
        var boy_radio = document.getElementById("boy");
        var girl_radio = document.getElementById("girl");
        //得到輸入框的值
        input_text.value 
        //修改輸入框的值
        input_text.value  = "value";
        
        //對于單選框,多選框等等固定的值,boy_radio.value隻能取到目前的值
        boy_radio.checked;//檢視傳回的結果,是否為true,如果為true,則被選中。
        girl_radio.checked = true;//指派
        
    </script>
</body>
123456789101112131415161718192021222324252627
           
送出表單。md5加密密碼,表單優化
<!DOCTYPE html>
<html lang = "en">
    <head>
        <meta charset = "UTF-8">
        <title>Title</title>
        <!--MD5加密工具類-->
        <script src = "https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js">
        	
        </script>
    </head>
    <body>
        <!--表達綁定送出事件
			οnsubmit= 綁定一個送出檢測的函數,true,false
			将這個結果傳回給表單,使用onsubmit接收
		-->
        <form action = "https://www.baidu.com" method = "post" onsubmit = "return aaa()">
            <p>
            	<span>使用者名:</span><input type="text" id = "username" name = "username"/>
        	</p>
            <p>
            	<span>密碼:</span><input type="password" id = "password" />
        	</p>
            <input type = "hidden" id = "md5-password" name = "password"> 
            
            <!--綁定事件 onclick 被點選-->
            <button type = "submit">送出</button>
            
        </form>
        
        <script>
        	function aaa(){
                alert(1);
                var username = document.getElementById("username");
                var pwd = document.getElementById("password");
                var md5pwd = document.getElementById("md5-password");
                //pwd.value = md5(pwd,value);
                md5pwd.value = mad5(pwd.value);
                //可以校驗判斷表單内容,true就是通過送出,false就是阻止送出
                return false;
                
            }
        </script>
        
    </body>
</html>
123456789101112131415161718192021222324252627282930313233343536373839404142434445
           

十、jQuery

javaScript和jQuery的關系?

jQuery庫,裡面存在大量的JavaScript函數

公式:$(selector).action()

<!DOCTYPE html>
<html lang = "en">
    <head>
        <meta charset = "UTF-8">
        <title>Title</title>
        <script src="lib/jquery-3.4.1.js"></script>
    </head>
    <body>
        <a href="" id = "test-jquery">點我</a>
        <script>
        	//選擇器就是css選擇器
            $('#test-jquery').click(function(){
                alert('hello,jQuery!');
            });
        </script>
    </body>
</html>
1234567891011121314151617
           
選擇器
//原生js,選擇器少,麻煩不好記
//标簽
document.getElementByTagName();
//id
document.getElementById();
//class
document.getElementByClassName();

//jQuery css中的選擇器它全部都能用!
$('p').click();//标簽選擇器
$('#id1').click();//id選擇器
$('.class1').click;//class選擇器
123456789101112
           

文檔工具站:http://jquery.cuishifeng.cn/

事件

滑鼠事件、鍵盤事件,其他事件

mousedown()(jQuery)----按下
mouseenter()(jQuery)
mouseleave()(jQuery)
mousemove()(jQuery)----移動
mouseout()(jQuery)
mouseover()(jQuery)
mouseup()(jQuery)
1234567
<!DOCTYPE html>
<html lang = "en">
    <head>
        <meta charset = "UTF-8">
        <title>Title</title>
        <script src="lib/jquery-3.4.1.js"></script>
        <style>
            #divMove{
                width:500px;
                height:500px;
                border:1px solid red;
            }
        </style>
    </head>
    <body>
        <!--要求:擷取滑鼠目前的一個坐标-->
        mouse:<span id = "mouseMove"></span>
        <div id = "divMove">
            在這裡移動滑鼠試試
        </div>
        <script>
        	//當網頁元素加載完畢之後,響應事件
            //$(document).ready(function(){})
            $(function(){
                $('#divMove').mousemove(function(e){
                    $('#mouseMove').text('x:'+e.pageX+"y:"+e.pageY)
                })
            });
        </script>
    </body>
</html>
12345678910111213141516171819202122232425262728293031
           
操作DOM

節點文本操作

$('#test-ul li[name=python]').text();//獲得值
$('#test-ul li[name=python]').text('設定值');//設定值
$('#test-ul').html();//獲得值
$('#test-ul').html('<strong>123</strong>');//設定值
1234
           

CSS的操作

$('#test-ul li[name=python]').css({"color","red"});
1
           

元素的顯示和隐藏,:本質display:none

$('#test-ul li[name=python]').show();
$('#test-ul li[name=python]').hide();
12
           

娛樂測試

$(window).width()
$(window).height()
$('#test-ul li[name=python]').toggle();
123
           

未來ajax();

$('#form').ajax()

$.ajax({url:"test.html",context:document.body,success:function(){
	$(this).addClass("done");
}})
12345