「 別懼怕顧慮,想到就去作,這世界就是這樣,當你把不敢去實現夢想的時候夢想就會離你愈來愈遠,當你勇敢地去追夢的時候,全世界都會來幫你。」你好,我是夢陽辰!將來我陪你一塊兒成長!css
定義:變量是存儲信息的「容器」,是內存單元。html
1.格式:java
var pi;//聲明變量var x =5;//賦值
2.注意:若是從新聲明變量,該變量的值不會丟失。node
var name = "MengYangChen";var name;
name的值依然是MengYangChen程序員
3.動態類型
變量的類型,爲賦值語句後面數據的類型。數據庫
var x;//若是沒有賦值默認爲undefinedvar x =3;var = "MengYangChen";
4.變量的做用域:
再javaScript中,對象和函數一樣也是變量。編程
4.1局部變量:變量在函數內聲明,變量爲局部做用域,只能在函數內部訪問。數組
function myFunction(){ var age = 20;}
注意:若是在函數內沒有聲明(即沒有使用var關鍵字),改變量爲全局變量。
4.2全局變量
在函數體外定義,即爲全局變量。全局變量具備全局做用域,網頁中全部腳本和漢數據可使用。瀏覽器
4.3JavaScript 中,變量能夠在使用後聲明,也就是變量能夠先使用再聲明。安全
緣由:變量提高:函數聲明和變量聲明老是會被解釋器悄悄地被"提高"到方法體的最頂部。
x = 5; // 變量 x 設置爲 5elem = document.getElementById("demo"); // 查找元素elem.innerHTML = x; // 在元素中顯示 xvar x; // 聲明 x
注意:JavaScript 只有聲明的變量會提高,初始化的不會。
var x = 5; // 初始化 xelem = document.getElementById("demo"); // 查找元素elem.innerHTML = x + " " + y; // 顯示 x 和 yvar y = 7; // 初始化 y
結果:
x 爲:5,y 爲:undefined
y 輸出了 undefined,這是由於變量聲明 (var y) 提高了,可是初始化(y = 7) 並不會提高,因此 y 變量是一個未定義的變量。
5.變量的生命週期
開始:聲明時候的初始化。
結束:
局部變量在函數執行完畢銷燬。
全局變量在頁面關閉後銷燬。
6.JavaScript 嚴格模式(use strict)
「use strict」 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。
它不是一條語句,可是是一個字面量表達式,在 JavaScript 舊版本中會被忽略。
「use strict」 指令只容許出如今腳本或函數的開頭。
嚴格模式下你不能使用未聲明的變量。
"use strict";x = 3.14; // 報錯 (x 未定義)
不容許刪除變量或對象。
"use strict";var x = 3.14;delete x;
不容許刪除函數。
"use strict";function x(p1, p2) {};delete x; // 報錯
不容許變量重名。
"use strict";function x(p1, p1) {}; // 報錯
不容許使用8進制,轉義字符等。
爲何使用嚴格模式?
消除Javascript語法的一些不合理、不嚴謹之處,減小一些怪異行爲.
嚴格模式"體現了Javascript更合理、更安全、更嚴謹的發展方向,包括IE 10在內的主流瀏覽器,都已經支持它,許多大項目已經開始全面擁抱它。
另外一方面,一樣的代碼,在"嚴格模式"中,可能會有不同的運行結果;一些在"正常模式"下能夠運行的語句,在"嚴格模式"下將不能運行。
1.javaScript數據類型分爲:
值類型(基本類型)/原始數據類型:字符串(String)、數字(Number)、布爾(Boolean)、對空(Null)、未定義(Undefined)、Symbol。
引用數據類型:對象(Object)、數組(Array)、函數(Function)。
2.String(字符串)
字符串可使用單引號或雙引號。
比較字符串是否相等用雙等號。
2.1字符串對象
第一種:var s=「sag」;(小String,屬於String類型)
第二種:var a2= new String(「ab」);(大String,屬於Object類型)
Sting是一個內置的類,能夠直接使用。
3.Number(數字)
javaScript只有一種數字類型,能夠帶小數點,也能夠不帶。很大的數據能夠用科學計數法表示。
var x = 33;var x = 33.00;var y = 12e6;var y = 12e-6;
3.1注意:NaN,表示Not a Number不是一個數字,可是屬於Number類型。
Infinity,表示無窮大。
0,-1,123,…小數,複數,無窮大都是屬於number類型。
當除數爲0時,結果爲無窮大。
isNaN(數據):結果爲true表示不是一個數字。
parseInt()函數:能夠將字符串自動轉換成數字。保留Int。
parseFloat()函數:將字符串轉換成數字。
Math.Ceil()函數:向上取整。2.1會變爲3。
4.Boolean數據類型
布爾(邏輯)只能有兩個值:true 或 false。
注意:當某個地方必定是boolean類型時,會自動轉換成boolean類型。例如if後面的括號。
NaN,0,"",null,undefined會自動轉換成false。
5.Undefined 和 Null
Undefined 這個值表示變量不含有值。
能夠經過將變量的值設置爲 null 來清空變量。
6.typeof動態的求出變量的數據類型
alert(typeof null);//Objectalert(typeof NaN);//numberalert(typeof undefined);//undefined
7.用」new「聲明變量類型
var x = new Stirng;var y = new Number;var person = new Object;var flag = new Boolean;
8.JavaScript 變量均爲對象。當您聲明一個變量時,就建立了一個新的對象。
javaScript能夠經過不一樣的方式輸出數據:
1.使用window.alert()彈出警告框,window能夠省略。
2.使用document.write()方法將內容寫到HTML文檔中。
3.使用innerHTML寫入到HTML元素中。
4.使用console.log()寫入到瀏覽器控制檯,console能夠省略。
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>輸出語句</title></head><body><p id = "one" ></p> <script> var x = prompt("請輸入一個數據:"); var y = 3.1; alert(x); document.write(x+y); var temp = document.getElementById("one"); temp.innerHTML=x+y; console.log(x+y); </script></body></html>
輸入數據:
能夠用prompt(」請輸入你的姓名:「)在頁面彈出一個輸出框。數據爲字符串類型。
1.javaScript數組爲一個無限大的容器,數組類型能夠是不一致。
2.建立方式:
var nums = new Array();news[0] = 11;news[1] = "22";//或者var computerBrand = new ("ASUS","DELL");
3.數組的遍歷
3.1for循環遍歷
3.2for/in循環遍歷
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>數組的遍歷</title></head><body> <script> var arr = new Array(); arr[0]="MengYangChen"; arr[1]="20"; arr[2]="boy"; for(var i = 0;i<arr.length;i++){ document.write(arr[i]+"<br>"); } for(var i in arr){ document.write(arr[i]+"<br>"); } </script></body></html>
JavaScript 函數語法
1.函數就是包裹在花括號中的代碼塊,前面使用了關鍵詞 function:
function functionname(){ // 執行代碼}或者functionname=function{ //執行代碼}
2.具備參數的函數
function myFunction(var1,var2){ //代碼}
3.具備返回值的參數
function myFunction(){ var x=5; return x;}document.getElementById("demo").innerHTML=myFunction();
function myFunction(a,b){ return a*b;} document.getElementById("demo").innerHTML=myFunction(4,3);
1.avaScript 中的全部事物都是對象:字符串、數值、數組、函數…。
此外,JavaScript 容許自定義對象。
對象也是一個變量。對象能夠包含多個值。
var computer ={brand:"ASUS",color:"silveryWhite",price:"13"};
2.可使用字面量來定義和建立 JavaScript 對象:
var person ={firstName : "YangChen",lastName :"Meng",age: 20,gender : "men"};
鍵值對一般寫法爲 name : value (鍵與值以冒號分割)。
鍵值對在 JavaScript 對象一般稱爲 對象屬性。
3.訪問對象屬性:
person.lastName;person["lastName"];
4.對象方法
4.1建立對象方法:
methodName : function() { // 代碼 }
案例:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>對象</title></head><body><span id = "demo"></span> <script> var person ={ firstName :"YangChen", lastName :"Meng", age: 20, gender : "men", fullName : function() { return this.firstName + " " + this.lastName; } }; document.getElementById("demo").innerHTML=person.fullName(); </script></body></html>
5.訪問對象的方法
objectName.methodName();
6.建立JavaScript對象
新建對象有兩種不一樣的方法:
6.1使用 Object 定義並建立對象的實例。
在 JavaScript 中,幾乎全部的對象都是 Object 類型的實例,它們都會從 Object.prototype 繼承屬性和方法。
Object 構造函數建立一個對象包裝器。
Object 構造函數,會根據給定的參數建立對象,具體有如下狀況:
若是給定值是 null 或 undefined,將會建立並返回一個空對象。
若是傳進去的是一個基本類型的值,則會構造其包裝類型的對象。
若是傳進去的是引用類型的值,仍然會返回這個值,經他們複製的變量保有和源對象相同的引用地址。
當以非構造函數形式被調用時,Object 的行爲等同於 new Object()。
<script>var person=new Object();person.firstname="John";person.lastname="Doe";person.age=50;person.eyecolor="blue"; document.write(person.firstname + " is " + person.age + " years old.");</script>
6.2使用函數來定義對象,而後建立新的對象實例。(對象構造器)
<script>function person(firstname,lastname,age,eyecolor){ this.firstname=firstname; this.lastname=lastname; this.age=age; this.eyecolor=eyecolor; this.changeName=changeName; function changeName(name) { this.lastname=name; }}myFather=new person("John","Doe",50,"blue");document.write(myFather.firstname + " is " + myFather.age + " years old.");</script>
有了對象構造器,就能夠建立新的對象:
var myFather=new person("John","Doe",50,"blue");var myMother=new person("Sally","Rally",48,"green");
1.HTML 事件是發生在 HTML 元素上的事情。
2.在事件觸發時 JavaScript 能夠執行一些代碼。
<button onclick="displayDate()">點這裏</button><script>function displayDate(){ document.getElementById("demo").innerHTML=Date();}</script><p id="demo"></p>
3.常見的HTML事件
下面是一些常見的HTML事件的列表:
onchange HTML 元素改變,下拉列表選中改變,或文本框內容改變。 onclick 用戶點擊 HTML 元素 onmouseover 用戶在一個HTML元素上移動鼠標 onmouseout 用戶從一個HTML元素上移開鼠標 onkeydown 用戶按下鍵盤按鍵 onload 瀏覽器已完成頁面的加載
在js中,doucument.getElementById(‘ 標籤的id’);發生一個交互事件時,js和html是分離的,獲取標籤對象。
1.文檔對象模型(Document Object Model,簡稱DOM),是W3C組織推薦的處理可擴展標記語言(HTML或者XML)的標準編程接口。
w3C已經定義了一系列的DOM接口,經過這些DOM接口能夠改變網頁的內容、結構和樣式。
DOM樹
文檔:一個頁面就是一個文檔,DOM中使用document表示。
元素:頁面中的全部標籤都是元素,DOM中使用element表示。
節點︰網頁中的全部內容都是節點(標籤、屬性、文本、註釋等),DOM中使用node表示。
2.獲取元素
2.1根據ID獲取
使用getElementById()方法能夠獲取帶有ID的元素對象,找不到返回null。
console.dir()方法:
打印咱們返回元素的對象,更好的查看裏面的屬性和方法。
2.2根據標籤名獲取
使用getElementsByTagName()方法,能夠返回帶有指定標籤名的對象的集合。
獲得的元素是動態的。
若是頁面中只有一個元素,返回的仍是一個僞數組。
若是沒有該元素返回空的僞數組。
能夠指定父元素,獲取父元素內部全部指定標籤名的子元素。
注意:父元素必須是單個對象(必須指明是哪個元素對象),獲取的時候不包括父元素本身。即先獲取父元素,再根據父元素獲取,子元素。
如:
var ol = document.getElementsByTagName("ol");console.log(ol[0].getElementsByTagName("li");
根據類名獲取元素
document.getElementsByClassName(「box」);
返回一個僞數組。
根據指定選擇器返回第一個元素對象
document.querySelector(「選擇器」);
根據指定選擇器返回集合
document.querySelectorAll(「選擇器」);
var b = document.querySelectorAll(".two"); b[0].innerHTML="常"; b[1].innerHTML="有意思!";
獲取body和html標籤
document.body;document.documentElement;//html
或則經過添加id,class…。
JavaScript使咱們有能力建立動態頁面,而事件是能夠被JavaScript偵測到的行爲。
簡單理解︰觸發—響應機制。
網頁中的每一個元素均可以產生某些能夠觸發JavaScript的事件,例如,咱們能夠在用戶點擊某按鈕時產生一個事件,而後去執行某些操做。
事件有三部分組成:(也稱事件三要素)
事件源
<button id="btn">ff</button>var btn = document.getElementById("btn);
事件類型
如何觸發,什麼事件,好比鼠標點擊(onclick)仍是鼠標通過,仍是鍵盤按下。
事件處理程序:
經過函數完成
執行事件的步驟。
1.獲取事件源。
2.註冊事件(綁定事件)。
btn.onclick=function(){}
3.添加事件處理程序。
操做元素
JavaScript的DOM操做能夠改變網頁內容、結構和樣式,咱們能夠利用DOM操做元素來改變元素裏面的內容、屬性等。注意如下都是屬性。
改變元素的內容
innerTest和innerHTML
innerTest(非標準)不識別HTML的標籤,而innerHTML識別。
能夠獲取裏面的內容,innerTest會去除空格和換行,而innerHTML保留空格和換行。
經常使用元素的屬性操做
先獲取標籤元素對象,而後經過對象.屬性來修改屬性。
分時顯示不一樣圖片,顯示不一樣的問候語。
1.獲取當前時間。
表單元素的屬性操做
利用DOM能夠操做以下表單元素的屬性:
type,value,checked,selected,disabled
<body><button>點擊我</button><input type="text" value="輸入內容"> <script> //1.獲取元素 var btn = document.querySelector("button"); var input = document.querySelector("input"); //註冊事件 btn.onclick = function () { input.value = '他點擊我了'; //btn.disabled=true;//禁用按鈕 this.disabled = true;//指向當前對象,事件函數的調用者 } </script></body>
點擊按鈕密碼框切換爲文本框,並能夠查看密碼明文
1.思路將密碼框改成文本框
<body><div class="box"> <label for="pwd"> <img src="#" alt="" id="eye"/> </label> <input type="password" name="" id="pwd"></div> <script> var eye = document.getElementById('eye'); var pwd = document.getElementById('pwd'); //註冊事件 var flag =0; eye.onclick = function () { if(flag = 0 ){ pwd.type= "text"; this.src="#1"; flag = 1; } else { pwd.type = 'password'; this.src="#"; flag = 0 ; } } </script></body>
樣式屬性操做
咱們能夠經過js修改元素的大小,顏色,位置樣式
1.element.style 行內樣式操做
js修改style樣式操做,產生的是行內樣式,css權重比較高。
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>樣式屬性</title> <style type="text/css"> div{ width: 200px; height: 200px; background-color: red; } </style></head><body> <div></div><script> //1.獲取元素 var div = document.querySelector('div'); //2.註冊事件,處理程序 div.onclick = function () { this.style.backgroundColor="blue"; this.style.width = "300px"; }</script></body>
2.element.className 類名樣式操做
經過寫好樣式,而後經過獲取元素,在響應事件後,將元素的類名賦咱們事先綁定好的樣式來改變元素的樣式。
.change{......}var test = document.querySelector('div');test.onclick = function(){this.className = 'change';}
若是樣式修改較多,能夠採用這種方式。
原先的類名會被覆蓋。
若是想要保留原先的類名,能夠採用如下方式:
this.className = 'first change';
獲取自定義屬性值
1.element.屬性 獲取屬性值
獲取內置屬性值(元素自己自帶的屬性)
2.element.getAttribute('屬性‘);
能夠獲取自定義屬性,程序員自定義的屬性
3.設置屬性值
element.屬性 = '值';
element.setAttribute('屬性','值');//主要用於自定義屬性
4.移除屬性
element.removeAttribute('屬性');
H5的自定義屬性
自定義屬性的目的:是爲了保存並使用數據。有些數據能夠保存到頁面中而不用保存到數據庫中。
自定義屬性獲取是經過getAttribute('屬性’)獲取。
可是有些自定義屬性很容易引發歧義,不容易判斷是元素的內置屬性仍是自定義屬性。
<div getTime="20"><div>var di = document.querySelector('div');
如何區分是自定義屬性仍是內置屬性呢?
H5規定自定義屬性data-開頭作爲屬性名而且賦值。
好比:
<div data-index ="1"></div>
或者使用Js設置
element.setAttribute(‘data-index’,2);
H5獲取自定義屬性的方法
1.element.getAttribute('data-indexd data-list-name=andy');2.H5新增element.dataset.index 或者element.dataset['index'] ie11纔開始支持。 dataset是一個集合裏面存放了全部以data開頭的自定義屬性。 若是自定義屬性裏面有多個-鏈接的單詞,咱們獲取的時候纔去駝峯命名法 ```java div.getAtrribute("data-list-name");div.dataset.listName;
爲何學節點操做?
獲取元素一般使用兩種方式:
1.利用DOM提供的方法獲取元素
document.getElementById();
document.getElementByTagName();
document.querySelector();
缺點:邏輯性不強,繁瑣。
2.利用節點的層次關係獲取元素(父子兄弟關係)
邏輯性強,可是兼容性差
通常節點至少擁有nodeType(節點類型),nodeName(節點名稱)和nodeValue(節點值)這三個基本屬性。
元素節點nodeType 爲1
屬性節點nodeType爲2
文本節點nodeType 爲3(文本節點包含文字、空格、換行等)
通常獲取元素節點。
<div> <span></span><div>
3.節點層級
利用DOM樹能夠把節點劃分爲不一樣的層級關係,常見的是父子兄層級關係。
父級節點
獲得與元素最近的節點。找不到父節點則返回爲null。
node.parentNode;
子節點
獲得全部的子節點,包括元素節點,文本節點,等
parentNode.ChildNodes(標準)
parentNode.ChildNodes返回包含指定節點的子節點的集合,改集合爲即時更新的集合。
若是隻想得到裏面的元素節點,則須要專門處理,因此咱們通常不提倡使用。
var ul =document. queryselector ( 'ul');for(var i = 0; i < ul.childNodes.length; i++){if (ul.childNodes[i].nodeType -- 1){// ul.childNodes[i]是元素節點console.log(ul.childNodes[i]);}
爲了解決這個問題還有一種非標準的用法。
parentNode.children(非標準)
parentNode.children是一個只讀屬性,返回全部的子元素節點。它只返回子元素節點,其他節點不返回(這個是咱們重點掌握的)。
雖然children是一個非標準,可是獲得了各個瀏覽器的支持,所以咱們能夠放心使用。
第一個節點和最後一個節點
父節點.firstChild 父節點.lastChild
第一個子元素和最後一個元素節點
父節點.firstElementChild 父節點.LastElementChild
4.三種動態建立元素的區別
4.1document.write()
document.write("<div>fa<div>"):
會致使頁面重繪:document.write是直接將內容寫入頁面的內容流,可是文檔流執行完畢,再使用該語句,則它會致使頁面所有重繪。
4.2 element.innerHTML
element.innerHTML="<a href="#">dfa</a>";
4.3 document.createElement();
var a = document.createElement();element.appendChild(a);
innerHTML是將內容寫入某個DOM節點,不會致使頁面所有重繪.
innerHTML建立多個元素效率更高(不要拼接字符串,採起數組形式拼接),結構稍微複雜
.
createElement(建立多個元素效率稍低一點點,可是結構更清晰
什麼是BOM對象?
Brower Object Model,指的是瀏覽器對象模型。
做用:操做瀏覽器窗口及窗口上的空間,實現用戶和頁面的動態交互。如返回,前進,刷新,地址欄,關閉窗口,縮放窗口等。
瀏覽器對象:指的是瀏覽器提供的一系列內置對象的統稱。
BOM瀏覽器對象模型:各內置對象之間按照某種層次組織起來的模型的統稱。
document(文檔對象)﹔也稱爲DOM對象,是HTML頁面當前窗體的內容,同時也是JavaScript重要組成部分之一。
history(歷史對象)﹔主要用於記錄瀏覽器的訪問歷史記錄,也就是瀏覽網頁的前進與後退功能。
location(地址欄對象)﹔用於獲取當前瀏覽器中URL地址欄內的相關數據。navigator(瀏覽器對象)﹔用於獲取瀏覽器的相關數據,例如瀏覽器的名稱、版本等,也稱爲瀏覽器的嗅探器。
screen(屏幕對象):可獲取與屏幕相關的數據,例如屏幕的分辨率等。
window對象是BOM中全部對象的核心,同時也是BOM中全部對象的父對象。定義在全局做用域中的變量、函數以及JavaScript中的內置函數均可以被window對象調用。
window對象的屬性和方法:
setTimeout()方法在執行一次後即中止了操做;setlnterval()方法一旦開始執行,在不加干涉的狀況下,間歇調用將會一直執行到頁面關閉爲止。
若要在定時器啓動後,取消該操做,能夠將setTimeout()的返回值(定時器ID)傳遞給clearTimeout()方法;或將setlnterval()的返回值傳遞給clearIntexal()方法。
location對象提供的用於改變URL地址的方法,全部主流的瀏覽器都支持。
利用location.href能夠跳轉到指定的url地址中。
history對象可對用戶在瀏覽器中訪問過的URL歷史記錄進行操做。
出於安全方面的考慮,history對象不能直接獲取用戶瀏覽過的URL,但能夠控制瀏覽器實現「後退」和「前進」的功能。
navigator對象提供了有關瀏覽器的信息,主流瀏覽器中存在的屬性和方法以下:
screen對象用於返回當前渲染窗口中與屏幕相關的屬性信息,如屏幕的寬度和高度等。
If your happiness depends on what somebody else does, I guess you do have a problem.
若是你的快樂與否取決於別人作了什麼,我想,你真的有點問題。