目錄:javascript
一、ECMAScript 6 簡介html
二、let,var和const命令vue
三、變量的解構賦值java
四、字符串的擴展之模板字符串es6
五、函數的擴展ajax
六、數組的擴展編程
七、對象的擴展json
八、類數組
九、維護學生信息的一個小示例app
十、import 和 export
一、ECMAScript 6 簡介
ECMAScript 6.0(如下簡稱 ES6)是 JavaScript 語言的下一代標準,已經在 2015 年 6 月正式發佈了。
它的目標,是使得 JavaScript 語言能夠用來編寫複雜的大型應用程序,成爲企業級開發語言。
ECMA:國際標準組織
二、let,var和const命令
const:是用來定義一個常量的
const a ='hello' //const就是定義一個常量 //常量是不能修改的
let:是用來定義一個塊級做用域的變量
let和val都是用來聲明變量的,可是兩者又有不一樣
let 先聲明後使用,不存在變量提高 let 不能重複定義,可是能夠修改 var 既能夠先聲明後使用,也能夠先使用後聲明,這樣不會報錯,會打印undified,而let必須是先聲明後使用,若是沒有聲明就會報錯
例子:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width"> <title>Title</title> </head> <body> <script> // const PI = 3.14; // const a='hello'; //// a = 'word' ; //這樣會出錯,常量是不能夠被修改的 // s = a.split("l"); //js中字符串的切割方法 // console.log(a); // console.log(s); // ============================== //變量提高, // // console.log(b); //會打印undefined,先使用後聲明,可是不會報錯 // var b=123456; // var b; // console.log(b); //undefined 先聲明後使用 // b=123456; // // ================================= let c=100; //let不存在變量提高 if (10>9){ let c=200; console.log(c) //200 } console.log(c) //100 </script> </body> </html> const-let示例
三、變量的解構賦值
數組解構賦值,就是把數組元素的值按照順序依次賦值
解構變量就是賦值,用更少的代碼來解決更多的事情
let ary = [1,2,3]
解構:
let [a, b, c] = ary
let obj = {
username: 'xxx',
age:23
}
let {username, age}= obj; # 沒有賦值是默認二者相同
let {username:新的名字, age:新的名字}= obj;
解構的左右兩端爲相同的數據類型
let a=1;
let b=2;
[a, b] = [b, a]
交換數據的賦值須要放入數組中
例子
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width"> <title>Title</title> </head> <body> <script> // ==============通常的操做================ // let arr = [11,22,55,444]; // let a = arr[0]; // let b = arr[1]; // let c = arr[2]; // let d= arr[3]; // console.log(a,b,c,d) //11 22 55 444 // ===============升級版的操做============ // let[a,b,c] = [88,55,77]; //解構賦值的目的就是縮減代碼,吧上面幾行顯示的用一行來替代 // console.log(a,b,c) //88 55 77 // // let[a,b,c,[d]] = [88,55,77,100]; //會報錯 // let[a,b,c,[d]] = [88,55,77,[100]]; //左邊和右邊的格式定義成同樣的 // console.log(a,b,c,d) ; //88 55 77 100 // // let obj={ // al:"json", // a2:23, // a3:666 // }; // let {aa,bb}=obj; // console.log(aa,bb); //undified let obj2={ a5:"dddff", "a4":"jggz", a2:[11,22], a3:666, a1:'jaas' }; let {a1,a2,a3,a4,a5}=obj2; //注意格式是一致的,而且和裏面的鍵對應 console.log(a2,a1,a3,a4,a5); //undified </script> </body> </html> 變量的解構賦值
四、字符串的擴展之模板字符串
經過反引號來使用,字符串當中可使用變量。能夠當作普通字符串來處理,可使用多行字符串
傳統的 JavaScript 語言,輸出模板一般是這樣寫的。
上面這種寫法至關繁瑣不方便,ES6 引入了模板字符串解決這個問題。
模板字符串(template string)是加強版的字符串,用反引號(`)標識。它能夠看成普通字符串使用,也能夠用來定義多行字符串,或者在字符串中嵌入變量。
例子
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width"> <title>Title</title> </head> <body> <div> <h1>asdasd</h1> <ul id="qwe"></ul> </div> <script> let name=`瞎耍`; console.log("他的名字叫"+name); console.log(`他的名字叫${name}`); //反引號,不是單引號 let ele = document.getElementById("qwe"); console.log(ele); ele.innerHTML=` <li>11</li> <li>22</li> <li>33</li> <li>44</li> ` </script> </body> </html> 反引號示例
五、函數的擴展
let number = y || 10;
return number
}
foo(1, 2)
foo(1)
foo(1, 0)
function foo(x, y=10){}
ES6有了默認值參數
箭頭函數
一個參數
v => v;
let foo = v => v;
ret = foo(10);
console.log(ret); 10
0和或者多個參數
let bar = (x, y)=>{return x + y;}
箭頭函數的使用規則
定義的時候在什麼地方,未來就不會改變了
箭頭函數的this指向定義時的做用域
普通函數的this指向調用者的做用域
能夠給函數設置默認參數
剩餘參數:function func(a,...b){} func(11,22,33) 則:b=[22,33]
例子:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width"> <title>Title</title> <script> // function func1(x) { // alert(x) // } // func1(12306); // function func2(x=12,y=90,z=6) { //默認參數 // alert(x+y+z) //108 // } // func2() // // function func3(x) { //默認參數 // console.log(x) //11 // } // func3(11,22,33,44) // // function func4(x,...y) { //默認參數 // console.log(y) // } // func4(11,22,33.22,44); //多餘的參數給了y // function func4(x,...y) { //默認參數 console.log(x,y)//{a: 22, b: 33} [] } // func4({a:22,b:33}); func4(x=2,y=300); //2,300 </script> </head> <body> </body> </html> 函數的擴展
let obj = {
naem : 'xxx'.
foo(){
console.log(this.name);
}
}
obj.foo() # xxx
解決了箭頭函數的this指向問題
六、數組的擴展
一、判斷數組當中是否存在某個數值 console.log(arr.indexOf(1000)) console.log(arr.includes(201)) 二、對數組的遍歷 forEach():範圍比map廣,他能作的事情map不必定能作 map():map能作的事情forEach必定能作 arr.forEach(function (value,index) { console.log(value); }) //也能夠不用map,在forEach裏面就能作操做,爲了簡單用一個map也能夠解決,具體見示例 var arr2 = arr.map(function (value,index) { return value+1 }) 3)對數組的過濾 var arr4 = arr.filter(function (value,index) { return value > 50 }) console.log(arr4);
例子:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width"> <title>Title</title> <script> // var arr=[77,88,99,44]; // //若是對數組進行循環,用for循環 // var arr2=[]; // for (var i=0;i<arr.length;i++){ // arr2.push(arr[i]+1); // } // console.log(arr2); // =============================== // var arr=[77,88,99,44]; // //在es6中的循環以下,對裏面的元素都加1 // arr.forEach(function (value,index,arr) { // console.log(value);// 77 88 99 44 // console.log(index); //0 1 2 3 // }); // var arr2=arr.map(function (value,index) { //map是一個循環生成一個新的數組 // return value+1 // }); // console.log(arr2);//78 89 100 45 // //查詢一下90在不在arr裏面,通常可用於判斷 // var arr2=[11,22,33,44]; // console.log(arr2.indexOf(44)); //3 根據值取索引,若是有就顯示索引,沒有就顯示-1 // console.log(arr2.indexOf(1000)) ; //-1 根據值取索引,若是有就顯示索引,沒有就顯示-1 // // console.log(arr2.includes(33)) ; // true 看包含不包含,若是包含返回true,不包含返回false //============================================== // let arr3=[11,22,33]; // for (var i in arr3){ // console.log(i) ; //打印的是索引 // console.log(arr3[i]); //打印值 // } // for (var j of arr3) { // console.log(j); //打印的是值 // } // 過濾 ===================================== arr = [51,2,14,845]; // var arr4 = arr.filter(function (value,index){ // console.log(value); // if (value>50){ // return value //[51, 845] // } // }); // console.log(arr4) var arr4 = arr.filter(function (value,index) { return value>50 //和map同樣,必定要有個返回值 }) console.log(arr4) </script> </head> <body> </body> </html> 對數組的擴展
七、對象的擴展
對象當中的屬性能夠簡寫,對象當中的方法也能夠簡寫
例子:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width"> <title>Title</title> <script> // let username="海燕"; // function fun() { // alert(888) // } // let obj={username,fun}; //若是上面定義的變量和對象的key的名字同名,就不用寫value了,直接把變量賦值給了對象的value // console.log(obj.username); //海燕 // obj.fun(); //alert(888) //對函數的簡寫 // let username="海燕"; // console.log(obj.username) ; // let obj={username,fun(){console.log(123)}}; // obj.fun(); //123/海燕 //發送ajax請求的簡寫 var username=$("#text1").val(); var password=$("#text2").val(); $.get( url, {username, password}, function () {}) </script> </head> <body> </body> </html> 對象的擴展
八、類
<script>
# ES5
function Person(){
this.username = 'xxx';
this.age = 20;
}
Person.prototype.showInfo = function(){
console.log(this.username);
}
let xxx = new Person();
</script>ES6
class Person{
constructor (username, age, mind){
this.username = username;
this.age = age;
this.mind = mind;
}
showInfo(){
console.log(this.username, this.age. this.mind)
}
}
let xxx = new Person('xxx', 18, '000);
xxx.showInfo()
class關鍵字定義一個類
必須有constructor方法(構造方法,若是沒有,constructor{}
必須使用new來實例化
類的繼承
必須在子類的constructor方法中寫super方法
class Peiqi extends Person{
constructor (username, age){
super()
this.username = username;
this.age = age;
}
}
let peiqi = new Peiqi('peiqi', 73)
peiqi.shoeInfo() # 繼承了父類
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width"> <title>Title</title> <script> var age2 = 99; Object.prototype.age2=age2; function Person(name,age) { //建立一我的類 this.name = name; //屬性 this.age = age; this.run = function () { // alert(this.name+"跑起來") alert(`${this.name}跑起來`) }; this.sing = function () { alert(`${this.name}能唱歌能條`) } //會執行裏面的sing方法,若是這裏沒有,執行外面的sing } Person.prototype.sing = function () { //對函數進行擴展,增長了一個方法 alert(`${this.name}能唱歌`) }; let man = new Person('小妹',19); console.log(man.name); console.log(man.age); man.run(); man.sing(); </script> </head> <body> </body> </html> 類的示例
九、維護學生信息的一個小示例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width"> <title>Title</title> <script src="vue.js"></script> <style> .box{ position: absolute; top: 250px; left: 600px; border: 1px solid black; background-color: slategray; width: 200px; height: 180px; } </style> </head> <body> <div id="app"> <p><input type="text" v-model="username"></p> <p><input type="text" v-model="age"></p> <p><input type="submit" value="添加" @click="add"></p> <table border="1" cellpadding="0"> <tr v-for="(item,index) in arr"> <td>{{item.username}}</td> <td>{{item.age}}</td> <td><input type="submit" value="刪除" @click="del(index)"></td> <td><input type="submit" value="編輯" @click="edit(index)"></td> </tr> </table> <div class="box" v-show="isshow"> <p><input type="text" placeholder="姓名" v-model="n_username"></p> <p><input type="text" placeholder="年齡" v-model="n_age"></p> <p> <input type="submit" value="肯定" @click="save"> <input type="submit" value="取消" @click="quxiao"> </p> </div> </div> <script> new Vue({ el:"#app", data:{ username:"", age :"", arr:[], isshow:false , //默認是隱藏的 n_username:"", n_age:"", n:0 }, methods:{ add:function () { this.arr.push({"username":this.username, "age":this.age}) }, del:function (index) { this.arr.splice(index,1) }, edit:function (index) { // this.isshow = true //這是一種表現方式,也能夠按照下面的這種方式 this.isshow = !this.isshow; this.n = index; this.n_username = this.arr[index].username; this.n_age = this.arr[index].age; console.log(this.n_username) }, save:function () { this.arr[this.n].username = this.n_username; this.arr[this.n].age = this.n_age; this.isshow = false }, quxiao:function () { this.isshow = false } }, }) </script> </body> </html>
import 導入模塊、export導出模塊
// main.js // 導出多個聲明 export var name = "gaoxin" export var age = "18" export function aa() { return 1 } // 批量導出 export {name, age, aa} // test.js import {name, age, aa} from "./main" console.log(name) console.log(age) console.log(aa()) // 整個模塊導入 把模塊當作一個對象 // 該模塊下全部的導出都會做爲對象的屬性存在 import * as obj from "./main" console.log(obj.name) console.log(obj.age) console.log(obj.aa())
// main.js // 導出多個聲明 export var name = "gaoxin" export var age = "18" export function aa() { return 1 } // 批量導出 export {name, age, aa} // test.js import {name, age, aa} from "./main" console.log(name) console.log(age) console.log(aa()) // 整個模塊導入 把模塊當作一個對象 // 該模塊下全部的導出都會做爲對象的屬性存在 import * as obj from "./main" console.log(obj.name) console.log(obj.age) console.log(obj.aa())
// 一個模塊只能有一個默認導出 // 對於默認導出 導入的時候名字能夠不同 // main.js var app = new Vue({ }); export default app // test.js // import app from "./main" import my_app from "./main"
// 一個模塊只能有一個默認導出 // 對於默認導出 導入的時候名字能夠不同 // main.js var app = new Vue({ }); export default app // test.js // import app from "./main" import my_app from "./main"