用於es6,主要是有塊級作用域,用let修飾的變數只存在於塊級作用域,用const修飾的變數只能在宣告的時候完成初始化,後續不能被修改
1.不能先使用在宣告
2.不能重複宣告
3.有塊級作用域
console.log(b) //30
console.log(a) //報錯
var 修飾的變數相當於在全域性中宣告,但是let修飾的變數只存在於當前作用域,所以無法訪問到.
var arr = [, , ]
for (var i = 0; i < arr.length; i++) (i)
})(i)
}
做出函式來遍歷陣列裡面的變數,因為for中的i是用var來修飾的,所以只能做成閉包的形式,如果不這樣,在函式外部訪問就訪問不到裡面的i,但是如果使用let,就可以很好的解決這個情況
for (let i = 0; i < arr.length; i++) (i)
}
用let修飾的變數很像函式的變數,裡面**塊能夠訪問到外面**塊的變數,但是外面訪問不到裡面變數的值
const a =20;
a=100;
console.log(a);
這樣會報錯,因為a是由const修飾的,所以是不能修改的,他和之前的直接修改object的__proto__屬性不同,後者不會報錯,但是沒有用,用const直接就會報錯
var flag=true
if(flag)
console.log(a) //20
console.log(b) //報錯
const也是有塊級作用域的,他只在宣告直接的作用域有效,很好的避免的全域性變數被汙染的情況(使用塊級作用域後),但是雖然說不能被改變,但是如果他是乙個陣列,乙個物件,可以新增屬性進去,只是位址不被改變,裡面的屬性是可以改變的
const a=
a.push(100)
console.log(a)
const obj={}
obj.age=18
console.log(obj)
拷貝的區別:深拷貝和淺拷貝
深拷貝相當於重新開拓一塊空間,在這空間裡面講要拷貝的資料原模原樣的新增進去,淺拷貝只是申明乙個變數,讓這個變數的指標指向這塊空間
淺
var a=
var b=a
b[100]=100
console.log(a)
深var a=[1900,200,3004]
var b=//[...a]
a.foreach(function(el) )
b.push(999)
console.log(a,b)
var =
console.log(name1)
列印出來的結果是name1所帶的值karen
var arr=
var =arr;
console.log(b); //10
將要解構的物件放在等號後面,將要取的值放在前面,屬性名必須要對,要去的值用變數表示,列印這個變數就是列印出來這個值
var arr=[,] } ]
let=arr
]=its
console.log(name)
}console.log(name)
要想學好這個,就去網上拿乙個大資料,將裡面的屬性全部解構出來,
var arr = [100, 20]
var m1 = new map()
m1.set(999,arr )
console.log(m1)
set方法,將括號裡面的arr set進去,然後如果需要訪問他,他的keys是999
get方法,將set進去的值取出來
m1.set("name","karen")
console.log(m1.get("name")) //karen
for ([k,v] of m1)
這段**就是將解構和map結合在一起,map中有乙個屬性[[entries]],他是乙個陣列,將我們存的keys和value存在裡面
map會幫我們把陣列解析出來,前面的值為keys,後面的值為value,如果,有3個,那麼後面的不會被放入value,
var m2=new map()
m2.set("name","karen")
m2.set("name2","karen2")
m2.set("name3","karen3")
var arr=array.from(m2)//把容器轉化為真陣列
array.from會將()的東西轉化為真陣列
重點 …xx
2個用法
…xx xx是已知的容器名字:把容器中資料取出來: var arr=[1,2,2,1,3];var arr2=[…arr]
…xx xx是自己取的名字 在解構賦值中把容器中剩餘資料取出來,給剩餘資料去個xx的名字
let =;
function log(num1,…arg)
log(100,200,300,400)
set容器可以看做數學裡面的集合,集合裡面的資料不會重複,
將陣列中重複的值去除
var a = new set([1, 2, 3]);
var b = new set([4, 3, 2]);
var union = new set([...a, ...b]); //
console.log(union);
取陣列的並集
取陣列的交集
var a=new set([1,2,3,4,5])
var b=new set([2,9,3,10])
var arr=[...a].filter(function(x) )
console.log(arr)
filter會通過返回值,如果true,將這個value放入容器,如果為false則不放入,has函式是判斷後面的值是否在前面的容器中有,
var str1="6480950"
var re=str1.padstart(11,"0991")
console.log(re) //099106480950
var re=str.repeat(10)
console.log(re)
//重複10次
string.prototype.mypadstart=function(count,str)
}return arr.join("")
} var str="hello"
var re=str.mypadstart(20,"abcde")
console.log(re)
設計乙個工具,讓乙個字串被填充到20位,以abcde來填充
var re=math.cbrt(27)
console.log(re)
取立方根
var a=-10
var b=-20
var re=math.imul(a,b)
console.log(re)
乘 《演算法概論》習題8 19
問題描述 所謂風箏圖是這樣的,其頂點數為偶數,如2n,且其中的n個頂點構成了乙個團,剩餘的n個頂點則由一條稱為尾巴的路徑連線,尾巴的某個端點與團的乙個頂點相連。給定乙個圖和目標g,風箏圖問題要求圖的乙個包含2g個頂點的風箏子圖。請證明該問題是np 完全。解答 可以將團問題歸約到 kite 問題。若要...
訓練日記8 19
最近學的樹狀陣列,感覺這方面的題得多看,多了解,才能在做題的時候很好的用它。下午的ccpc網路賽,怎麼說,剛上來做一道字串的題,給你兩個字串s1,s2,例如s2 aba,依次擷取s2的是 我們n代表擷取的片段的長度 之後看看片段在字串s1中的個數,用l代表,舉個例子吧,擷取的片段 在s1 中的個數由...
《演算法概論》習題8 19證明
題目 所謂風箏圖是這樣的,其頂點數為偶數 比如2n 且其中的n個頂點構成了乙個團,剩餘的n個頂點則由一條稱為 尾巴 的路徑連線,尾巴的某個端點與團中乙個頂點相連。給定乙個圖和目標g,風箏圖問題要求該圖的乙個包含2g個頂點的風箏子圖。請證明該問題是np 完全的。證明 我們可以將團問題歸約到風箏圖問題。...