Web前端有三層:javascript
HTML:從語義的角度,描述頁面結構前端
CSS:從審美的角度,描述樣式(美化頁面)java
JavaScript:從交互的角度,描述行爲(提高用戶體驗)python
布蘭登 • 艾奇(Brendan Eich,1961年~),1995年在網景公司,發明的JavaScript。web
開始JavaScript叫作LiveScript,後更名爲JavaScript正則表達式
ECMAScript是一種由Ecma國際(前身爲歐洲計算機制造商協會,英文名稱是European Computer Manufacturers Association)制定的標準。編程
ECMAScript不是一門語言,而是一個標準json
2004年,JavaScript命運開始改變,那一年,谷歌公司開始帶頭使用Ajax技術,Ajax技術就是JavaScript的一個應用。數組
JavaScript在移動頁面中,也是不可或缺的。瀏覽器
HTML5推出了一個東西叫作Canvas(畫布),工程師能夠在Canvas上進行遊戲製做,利用的就是JavaScript。
2011年,Node.js誕生,使JavaScript可以開發服務器程序了。
JavaScript是有界面效果的,是弱變量類型的語言,變量只須要用var來聲明
JavaScript是前臺語言,而不是後臺語言。JavaScript運行在用戶的終端網頁上
JavaScript基礎分爲三個部分:
ECMAScript:JavaScript的語法標準。包括變量、表達式、運算符、函數、if語句、for語句等。
DOM:操做網頁上的元素的API。好比讓盒子移動、變色、輪播圖等。
BOM:操做瀏覽器部分功能的API。好比讓瀏覽器自動滾動。
(1)簡單易用:可使用任何文本編輯工具編寫,只須要瀏覽器就能夠執行程序。
(2)解釋執行(解釋語言):事先不編譯、逐行執行、無需進行嚴格的變量聲明。
(3)基於對象:內置大量現成對象,編寫少許程序能夠完成目標
1.JS的引入方式
1 直接編寫 <script> alert('abc') </script> 2 導入文件 <script src="index.js"></script>
2.JS的變量
1.聲明使用var關鍵字
var a; a=3;
2.一行能夠聲明多個變量.而且能夠是不一樣類型
var name="alex", age=20, job="teacher";
3.變量命名:
4.「直接量」即常量,也稱爲「字面量」。
簡單的直接量有2種:數字、字符串。例如:alert(886);
(1)JavaScript對換行、縮進、空格不敏感。備註:每一條語句末尾要加上分號
(2)全部的符號,都是英語的。好比括號、引號、分號。
(3)JavaScript的註釋:
// 我是單行註釋 /* 我是多行註釋 我是多行註釋 */
彈出警告框:alert("")
控制檯輸出:console.log("")
用戶輸入:prompt()
alert和prompt的區別:
alert("從前有座山"); //直接使用,不須要變量 var a = prompt("請輸入一個數字"); // 必須用一個變量,來接收用戶輸入的值
數據類型有:
number ----- 數值 boolean ----- 布爾值 string ----- 字符串 undefined ----- undefined null ----- null
typeof()表示「獲取變量的類型」
是由Unicode字符、數字、標點符號組成的序列;字符串常量首尾由單引號或雙引號括起
var a = "abcde"; var b = "路飛"; var c = "123123"; var d = "哈哈哈哈哈"; var e = ""; //空字符串
Boolean類型僅有兩個值:true和false
Boolean值主要用於JavaScript的控制語句
if (x==1){ y=y+1; }else{ y=y-1; }
Undefined類型
1.Undefined 類型只有一個值,即 undefined。當聲明的變量未初始化時,該變量的默認值是 undefined。
2.當函數無明確返回值時,返回的也是值 "undefined";
Null類型
另外一種只有一個值的類型是 Null,它只有一個專用值 null,即它的字面量。值 undefined 其實是從值 null 派生來的,所以 ECMAScript 把它們定義爲相等的。
不一樣:undefined 是聲明瞭變量但未初始化時賦值,null 則用於表示尚不存在的對象。
將等號右邊的值,賦給左邊的變量;等號右邊的變量,值不變。
prompt()
就是專門用來彈出可以讓用戶輸入的對話框。重要的是:用戶無論輸入什麼,都是字符串。
將number轉化爲string類型:用函數 String() toString()
將字符串轉換成number類型,可用number。
parseInt()能夠將字符串轉數字。取整,只保留數字部分
parseFloat()能夠將字符串轉數字。保留小數部分的數值
算術運算符: + - * / % ++ -- 比較運算符: > >= < <= != == === !== 邏輯運算符: && || ! 賦值運算符: = += -= *= /= 字符串運算符: + 鏈接,兩邊操做數有一個或兩個是字符串就作鏈接運算
算術運算符:自增,自減
++i:先計算後賦值
i++:先賦值後計算
比較運算符:
> >= < <= != == === !==
比較運算符兩側若是一個是數字類型,一個是其餘類型,會將其類型轉換成數字類型.
比較運算符兩側若是都是字符串類型,比較的是最高位的asc碼,若是最高位相等,繼續取第二位比較.
== 比較的是值的相同 console.log(x==y);//返回true === 比較的是值和數據類型(內存地址) console.log(x===y);//返回false
邏輯運算符
&&表示與 兩個條件都成立的時候 才成立
||表示或有一個條件成立的時候 就成立
var age = 20; if(age>18){ //{}至關於做用域 console.log('成年'); } alert('alex'); //下面的代碼照樣執行
var age = 20; if(age>18){ //{}至關於做用域 console.log('成年'); }else{ console.log('好好學習'); } alert('alex'); //下面的代碼照樣執行
var age = 18; if(age==18){ //{}至關於做用域 console.log('成年); }else if(age==30){ console.log('而立'); }else{ console.log('11') } alert('alex'); //下面的代碼照樣執行
//1.模擬 若是總分 >400 而且數學成績 >89分 被清華大學錄入 //邏輯與&& 兩個條件都成立的時候 才成立 if(sum>400 && math>90){ console.log('清華大學錄入成功') }else{ alert('高考失利') }
//2.模擬 若是總分>400 或者你英語大於85 被複旦大學錄入 //邏輯或 只有有一個條件成立的時候 才成立 if(sum>500 || english>85){ alert('被複旦大學錄入') }else{ alert('高考又失利了')
case 表示一個條件,知足這個條件就會輸出,直到遇到break跳出
若是不寫break,程序會遇到下一個break中止。這個就是 'case穿透'
var gameSore = 'n'; switch(gameSore){ case 'good': console.log('玩的很好'); break; case 'better': console.log('玩的更好'); break; case 'best': console.log('玩的最好'); break; default: console.log('很遺憾,淘汰'); break; }
// 例子:打印 1~9之間的數 var i = 1; //初始化循環變量 while(i<=9){ //判斷循環條件 console.log(i); i = i+1; //更新循環條件 }
練習:將1~100全部是2的倍數在控制檯打印。使用while循環
var i = 1; while(i <= 100){ if(i%2==0){ console.log(i); } i +=1; }
//無論有沒有知足while中的條件do裏面的代碼都會走一次 var i = 3;//初始化循環變量 do{ console.log(i) i++;//更新循環條件 }while (i<10) //判斷循環條件
for循環遍歷列表是最經常使用的對數據的操做
//輸出1~10之間的數 for(var i = 1;i<=10;i++){ console.log(i) }
練習:輸入1~100之間全部數之和
var sum = 0; for(var j = 1;j<=100;j++){ sum = sum+j } console.log(sum);
for循環嵌套練習
for(var i=1;i<=3;i++){ for(var j=0;j<6;j++){ document.write('*')//document.write(''); 往瀏覽器文檔中寫 } document.write('<br>') }
在JavaScript中除了null和undefined之外其餘的數據類型都被定義成了對象,也能夠用建立對象的方法定義變量。
String、Math、Array、Date、RegExp都是JavaScript中重要的內置對象,在JavaScript程序大多數功能都是基於對象實現的
字面量方式建立
var colors = ['red','green','yellow'];
使用構造函數(後面會講)的方式建立 使用new關鍵詞對構造函數進行建立對象,構造函數與後面的面向對象有關係
var colors = new Array(); //經過下標進行賦值 colors[0] = 'red'; colors[1] = 'green'; colors[2] = 'yellow'; console.log(colors);
數組的經常使用方法
var north = ['北京','山東','天津']; var south = ['東莞','深圳','上海']; var newCity = north.concat(south); console.log(newCity)
var score = [98,78,76,100,0]; var str = score.join('|'); console.log(str);//"98|78|76|100|0"
var arr = ['張三','李四','王文','趙六']; var newArr = arr.slice(1,3); console.log(newArr);//["李四", "王文"]
var arr = ['張三','李四','王文','趙六']; arr.pop(); console.log(arr);//["張三", "李四","王文"]
var arr = ['張三','李四','王文','趙六']; arr.push('小馬哥'); console.log(arr);//["張三", "李四","王文","趙六","小馬哥"]
var names = ['alex','xiaoma','tanhuang','angle']; //4.反轉數組 names.reverse(); console.log(names);
var names = ['alex','xiaoma','tanhuang','abngel']; names.sort(); console.log(names);// ["alex", "angle", "tanhuang", "xiaoma"]
布爾類型值 = Array.isArray(被檢測的值) ;
var str = 'alex'; var charset = str.charAt(1); console.log(charset);//l
var str1 = 'al'; var str2 = 'ex'; console.log(str1.concat(str2,str2));//alexex
var a = '1234567755'; var newStr = a.replace("4567","****");//舊的,新的 console.log(newStr);//123****755
var str = 'alex'; console.log(str.indexOf('e'));//2 console.log(str.indexOf('p'));//-1
var str = '小馬哥'; console.log(str.slice(1,2));//馬
var str3 = 'SAKDjlaakljfadfhajdk'; console.log(str3.split('a',3));
var str = 'XIAOMAGE'; console.log(str.toLowerCase());//xiaomage
var str = 'xiaomage'; console.log(str.toUpperCase());//XIAOMAGE
// Math內置對象 //1.向上取整(小數點向上加1),天花板函數 var x = 1.3142; var a = Math.ceil(x); console.log(a);//2 //能夠用於分頁 var pageNum = 12345/6; console.log(Math.ceil(pageNum));//2058 console.log(pageNum);//2057.5 //2.地板函數(即小數點前面的數值,保持不變) console.log(x);//1.3142; console.log(Math.floor(x));//1 //3.求兩個數的最大值與最小值 console.log(Math.max(2,5));//最大值 5 console.log(Math.min(2,5));//最小值 2 //4.取隨機數Math.random() [0-1),初始值是0 console.log(Math.random()); //取200-500之間的隨機數 公式:min+Math.random()*(max-min) console.log(200+Math.random()*(500-200));
函數:就是把將一些語句進行封裝,而後經過調用的形式,執行這些語句。
函數的做用:
//1.普通函數,聲明函數 function add(x,y) { return x+y; } alert(add(1,2));//能夠在任何地方調用函數 //2.函數對象 var add = function(x,y){ return x+y; }//函數類型的 console.log(add(3,4));
js中建立對象的方式
//1.使用Object或者對象字面量建立對象 var person = Object(); console.log(person); console.log(typeof person); //給對象賦值 person.name='alex'; person.age=20; console.log(person); var favfn = function () { //this 指的是當前的對象 跟python中的self相似 console.log(this.name); } var person2={ name:'wusir', age:26, fav:favfn } console.log(person2); person2.fav();
//4.原型模型式建立對象 propotype 它是當前對象的父類 function Person(name,age){ this.name=name; this.age=age; } Person.prototype.alertName = function () { alert(this.name); }; var p1 = new Person('alex',20); var p2 = new Person('alex1',23); //內存地址與值 console.log(p1===p2); p1.alertName(); p2.alertName();
arguments表明的是實參,只在函數中使用。
fn(2,4); fn(2,4,6); fn(2,4,6,8); function fn(a,b,c) { console.log(arguments); console.log(fn.length); //獲取形參的個數 console.log(arguments.length); //獲取實參的個數 console.log("----------------"); }
arguments能夠修改元素,但不能改變數組的長短
fn(2,4); fn(2,4,6); fn(2,4,6,8); function fn(a,b) { arguments[0] = 99; //將實參的第一個數改成99 arguments.push(8); //此方法不經過,由於沒法增長元素 }
清空數組的幾種方式:
var array = [1,2,3,4,5,6]; array.splice(0); //方式1:刪除數組中全部項目 array.length = 0; //方式2:length屬性能夠賦值,在其它語言中length是隻讀 array = []; //方式3:推薦
建立日期對象只有構造函數一種方式,使用new關鍵字
//建立了一個date對象 var myDate = new Date();
//返回本地時間 console.log(myDate().toLocalString());
//內置函數 var myDate = new Date(); console.log(myDate); //獲取月份中的第幾天,1-31 console.log(myDate.getDate()); //getMonth() 獲取指定日期對象的月份(0-11),須要加一 console.log(myDate.getMonth()+1); //返回四位數的年 2019 console.log(myDate.getFullYear()); //getDay 返回一星期的周幾,0代指的是星期日 console.log(myDate.getDay()); //getMinutes()獲取分鐘數,getSecond() 獲取秒數 console.log(myDate.getMinutes()); console.log(myDate.getSeconds()); //經常使用:返回本地時間,2019/2/24 上午8:45:53 console.log(myDate.toLocaleString())
//json 是個輕量級的數據交換格式,json有兩種結構:對象與數組 //1.對象: var person={ name:'zhangsan' }; var packJSON={ "name":"alex",//字符串鍵值對須要加上引號 "pwd":123 }; console.log(packJSON);//是個對象 //2.數組 是值的有序的集合 var packJSON=[{ "name":"alex","pwd":123},{ "name":"wu","pwd":123}]; console.log(packJSON); //json對象和json字符串轉換,在數據傳輸中,JSON一般是字符串形式傳遞的 //js常見操做json對象,全部json對象和json字符串轉換很是重要的,用parse內置函數 var jsonStr = '{"name":"alex","pwd":123}'; var jsonobject = JSON.parse(jsonStr);//json要大寫 console.log(jsonobject); //(2).將json對象 轉爲 json字符串 var jsonStr2 = JSON.stringify(jsonobject); console.log(jsonStr2);//{"name":"alex","pwd":123} //3.遍歷JSON對象與JSON數組 //(1).遍歷json對象,使用for in var packJson = {"name":"alex","pwd":123}; for (var k in packJson){ //k指的是鍵值對的key值 console.log( k + ' ' +packJson[k]) } //(2).遍歷JSON數組 var packJson = [{"name":"alex","pwd":123},{"name":"wusir","pwd":123}]; for (var i in packJson){ console.log(i + ' '+ packJson[i].name+' '+packJson[i].pwd); }
正則表達式:
對象 RegExp 正則表達式:檢索字符串 用來規定文本檢索的內容
//1.-----------建立正則表達式--- //1.1構造函數 new RegExp(檢測文本,修飾符) i 不區分大小寫 g:全局匹配 var str = "luffy 2018"; var reg = new RegExp("l","ig"); //1.2 字面量方式建立 var reg1 = /y/ig; //不區分大小寫,全局匹配 //2.檢索方式: //2.1 test() 檢索字符串中是否包含定義字符模式,返回布爾 // 要檢索的字符在不在str中存在 在 返回true 不在 返回flase console.log(reg1.test(str)); //2.2 exec() 是檢測字符串中正則表達式 的匹配 //若是匹配到了 那麼就返回一個存放有結果的數組,若是沒有匹配就返回一個null console.log(reg1.lastIndex);//0 保存一次匹配時開始的下標 console.log(reg1.exec(str)); // 返回個數組結果,若無,則返回null console.log(reg1.lastIndex);// 5 //經常使用方法: //1.match 字符串.match(正則) var str = "hello world"; var reg = /o/g; //使用 正則表達式模式對字符串執行查找,並將包含查找的的結果做爲數組返回 console.log(str.match(reg)); //["o","o"] //2.replace 替換 replace(被替換的,替換的) console.log(str.replace(reg,"*")); //3.search() console.log(str.search(reg));//查詢字符串 在字符串中出現的下標 //4. split 以匹配的規則分割 console.log(str.split(reg));
元字符:一些匹配的規則
//1 . 匹配除換行符之外的任意字符 window.onload=function(){ var str = "luffyCity 2018"; var reg = /./g; //默認檢索第一個字符 console.log(reg.exec(str));//l }; //若是不想讓字符有其餘意義 轉移\ \.表明匹配 str = "www.baidu.com"; var reg = /www\......\.com/g; console.log(reg.exec(str));//www.baidu.com //2. []:匹配[]裏面的任意一個字符 var str1 = "hello"; var reg1 = /[a-zA-z0-9]/g;//a-z 小寫,A-Z大寫,0-9數字 console.log(reg1.exec(str1));//h var str2= 'a1343'; var reg2 = /[0-9][0-9][0-9]/g; console.log(reg2.exec(str2));//134 //3. [^] 全部不在這個範圍的字符 var str3 = "abd123"; var reg3 = /[^a-z][^A-Z]/g; //匹配條件 之外的字符,兩個字符兩個字符的匹配 console.log(reg3.exec(str3));//12 //4.\d:匹配數字 對立 \d:匹配非數字 var str4="web"; var reg4 = /\d/g; //匹配數字 var reg5 = /\D/g; //非數字 console.log(reg4.exec(str4));//null console.log(reg5.exec(str4));//w //5.\w:匹配數字 字母 下劃線 \w:匹配除數字、字母,下劃線之外的任意字符 var reg6 = /\w/g; //匹配數字 字母 下劃線 var reg7 = /\W/g; //匹配 \w 之外的任意字符(非\w) console.log(reg6.exec(str4));//w console.log(reg7.exec(str4));//null //6.\s:匹配空格 trim() var str5 = ' luffy'; var reg8 = /\s/g;//空格 var reg9 = /\S/g; //非空白字符 console.log(reg8.exec(str5)); // ' ' console.log(reg9.exec(str5));// l //7.^:以什麼開頭 $:是以什麼結尾 var str6 = "www.luffy.com"; var reg10 = /^www/g; //^字符 console.log(reg10.exec(str6));//www var reg11 = /^www\......\.com$/g; //字符$ console.log(reg11.exec(str6));//www.luffy.com //------------------------------------------------------------------- //重複的字符 //7. ?:匹配字符第一個字符 結果返回:空或'1'; var str7 = "webr44546ere"; var reg12 = /[0-9]?/g; console.log(reg12.exec(str7));//"1" //8.*:首位是否符合條件,不符合返回空;符合,則看首位一直向後符合的位數 var reg13 = /[a-z]*/g; //匹配小寫字母,0個或者多個 console.log(reg13.exec(str7));//' ', //9.+:匹配數字,至少匹配一次 var reg14 = /\d+/g; console.log(reg14.exec(str7));//123 //10.匹配連續的10個字符 //11.{min,max} 至少min個最多max個