1-過去咱們是用var來聲明變量的 var i=1;
或者直接i=1,
這兩種方式有什麼區別?
當咱們運行下面兩段代碼:
console.log(i)
var i=1;
console.log(i)
i=1;
輸出的結果分別是undefined和not defined可見var有提高變量的做用
注意:雖然不會報錯但儘可能不要用不加var的方式來聲明變量
javascript
2-如今Es6又新增了let(變量)和const(常量)兩種方式來聲明變量,這兩種方式聲明的變量都是處於塊級做用域中,並且let和const並不存在變量提高,因此必定要在定義後使用,不然報錯。
所謂的塊級做用域就是一個{},運行代碼以下:
java
{
var a=110;
let b=666;
}
console.log(a)
console.log(b)
複製代碼
輸出結果是:110和 not defined數組
用途二可以實現多行輸出,以下:
數據結構
var a='zk'
console.log(` my name i${a}`)
複製代碼
直接就實現了多行輸出的效果~函數
也就是函數的快捷寫法
例如:ui
x=>x*x;
function f(x){
return x*x;
}
複製代碼
這兩種寫法表達的函數是同樣的。
用法:當你的函數有且僅有一個參數的時候,是能夠省略掉括號的。當你函數返回有且僅有一個表達式的時候能夠省略{} 和 return。
this
注意:箭頭函數中是沒有this的spa
IIFES即函數當即表達式,一般用途是建立一個內部的做用域,而在Es6中咱們一樣能夠用一個塊級做用域來實現相同的功能:
以下列代碼:
rest
{
let f=()=>console.log("zzzzz~")
}
(function f(){console.log("zzzzz~"})
複製代碼
這兩個函數做用是相同的code
Arguments是個相似數組但不是數組的僞數組,說他相似數組是由於其具有數組相同的訪問性質及方式,可以由arguments[n]來訪問對應的單個參數的值,並擁有數組長度屬性length。還有就是arguments對象存儲的是實際傳遞給函數的參數,而不侷限於函數聲明所定義的參數列表,並且不能顯式建立 arguments 對象 用法以下:
function f(a,b,c){
for(var i=0;i<arguments.length;i++){
console.log(arguments[i])
}
}
f(1,2,3);
複製代碼
在非嚴格模式下,arguments老是能反映出命名參數的變化。看下面的代碼:
function foo(a, b) { //非嚴格模式
console.log(arguments[0] === a); //true
console.log(arguments[1] === b); //true
a = 10;
b = 20;
console.log(arguments[0] === a); //true
console.log(arguments[1] === b); //true
}
foo(1, 2);
複製代碼
function foo(a, b) {
//嚴格模式
"use strict"
console.log(arguments[0] === a); //true
console.log(arguments[1] === b); //true
a = 10;
b = 20;
console.log(arguments[0] === a); //false。 修改a的值不會影響到arguments[0]的值
console.log(arguments[1] === b); //false
}
foo(1, 2);
複製代碼
var arr=[1,2,3];
console.log(...arr);
//把數組展開後依次輸出
var arr2=[...arr];
//把數組展開後再賦值給arr2
複製代碼
function f(a,b,c){
console.log([...arguments])
}
f(1,2,3);
複製代碼
let arr1=[1,2]
let arr2=[3,4]
console.log([...arr1,...arr2])
//輸出合併後的數組
複製代碼
let[a,b,c]=[1,2,3]
console.log(a)
console.log(b)
console.log(c)
複製代碼
設置函數中形參的默認值 簡而言之:
function f(a=1,b=3,c=4){
console.log(a)
console.log(b)
console.log(c)
}
f()
//輸出結果是1,3,4
複製代碼
class 類名{
constructor(參數){
this.屬性=參數;
}
方法名(){}//不是箭頭函數
}
複製代碼
class 子類 extends 父類{
constructor(參數){
super(參數)
this.屬性=值
}
}
複製代碼
例如:
class A1{
constructor(a,b){
this.a=a;
this.b=b;
}
g(){console.log(this.a+this.b)}
}
class A2 extends A1{
constructor(a,b,c){
super(a,b)
this.c=c;
}
s(){console.log(this.c)}
}
複製代碼
rest 參數(形式爲...變量名),用於獲取函數的多餘參數,這樣就不須要使用arguments對象了。rest參數搭配的變量是一個數組,該變量將多餘的參數放入數組中。以下代碼:
function add(...values){
var sum=0;
for(var val of values){
sum+=val;
}
console.log(sum);
}
add(1,2,3)//6
複製代碼
set和數組差很少,也是一種集合,區別在於:它裏面的值都是惟一的,沒有重複的,是一個僞數組。
建立方式:
var s1=new Set();
Set s2=[1,2,3,"ad"];
s2.add(4);//使用add來添加元素
複製代碼
s2.forEach(item=>console.log(item));
for(var p of s2){
console.log(p)
};
複製代碼
小技巧:使用set爲數組去重:
var s1=new Set([1,1,1,2,2,3,3,4,5,2,1])
console.log([...s1])
複製代碼
它相似於對象,裏面存放也是鍵值對,區別在於:對象中的鍵名只能是字符串,若是使用map,它裏面的鍵能夠是任意值。 建立Map,以下:
var m=new Map();//1
var n=new Map(["a","hello"],[1,"123"]);//2
複製代碼
添加元素:
m.set(2,"asd")
m.set([1,2,3],{1:"asdd"})
複製代碼
獲取其中元素:
m.get("2")//能夠取得數據
m.get([1,2,3])//因爲get()時要比較棧區中的地址,而不是堆區中的數據,將沒法獲得數據
複製代碼
注意:若是有重複的鍵,後面的要把前面的覆蓋的