ES6簡介
ECMAScript 6.0(以下簡稱 ES6)是 JavaScript 語言的下一代標準,已經(jīng)在
2015 年 6月正式發(fā)布了。它的目標,是使得 JavaScript 語言可以用來編寫復雜的
大型應用程序,成為企業(yè)級開發(fā)語言
ES6 既是一個歷史名詞,也是一個泛指,含義是 5.1版以后的 JavaScript 的下
代標準,涵蓋了 ES2015、ES2016、ES2017 等等,而 ES2015 則是正式名稱,特
指該年發(fā)布的正式版本的語言標準
1.let和const
let聲明變量沒有變量提升
塊級作用域
let不能重復聲明
const聲明常量一旦聲明無法被修改? (獨有的)
const聲明對象時不能直接修改如
const person = {name:'1'};
person = {age:10};
但是可以
person.name = ‘a(chǎn)lex
不會污染全局變量
let聲明的變量不會影響window里邊的對象
在默認情況下使用const,而只有在知道變量值要修改的情況下使用let
2.模板字符串
let value = 1;
``反引號里邊插入變量時${value};
剩余運算符,把多個獨立的合并到一個數(shù)組中? 如果用{}包裹起來則返回一個對象 {...other}
擴展運算符:將一個數(shù)組分割,并將各項作為分離的參數(shù)傳給函數(shù)
求數(shù)組最大值es5
const arr = [10,20,15,30,90,100];
? ? ? ? console.log(Math.max.apply(null,arr));
es6中 ...擴展運算符將arr拆開
console.log(Math.max(...arr));
3.箭頭函數(shù)? a,b為參數(shù)? =>為函數(shù)
let add = (a,b)=> {
? ? ? ? ? ? return a + b;
? ? ? ? }
()相當于return? 可加可不加? ? let add = (val1,val2)=> val1 + val2;
let add = val =>(val + 5);
如果返回形參的話
let add = val =>val;
返回對象或者數(shù)組時要用()括起來
let getObj = id =>({id:id,name:'12312'});
? ? ? ? console.log(getObj(1));
箭頭函數(shù)里邊是沒有this指向的? 要是用this內(nèi)部的值向上查找作用域
給對象里邊的方法設置函數(shù)時不要用箭頭函數(shù),不然this就向上尋找作用域
一旦使用箭頭函數(shù)里邊就沒有arguements? 因為沒有作用域鏈了
箭頭函數(shù)不能使用new關鍵字來實現(xiàn)實例化對象
function函數(shù)是一個對象,但是箭頭函數(shù)不是一個對象他是一個表達式
4.解構賦值
解構賦值是對運算符的一種擴展
他針對數(shù)組和對象來進行操作
有點:代碼書寫上簡單易讀
完全結構
let node = {
? ? ? ? ? ? type:'hide',
? ? ? ? ? ? name:'foo'
? ? ? ? }
? ? ? ? let {type,name} = node;
? ? ? ? console.log(type,name);
不完全結構
let (type) = node;
默認值
let {a,b = 30} = {a:20};
? ? ? ? console.log(a,b);
數(shù)組同理
5.擴展對象功能
const name = 'xiaomage',
? ? ? ? age = 20,
? ? ? ? city = 'Beijing';
? ? ? ? const person = {
? ? ? ? ? ? name,? 等同于name:name
? ? ? ? ? ? age,
? ? ? ? ? ? city,
? ? ? ? ? ? sayName(){
? ? ? ? ? ? ? ? console.log(this.name);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? person.sayName()
同名簡寫
拋出錯誤
if(newVal < this.wheel){
? ? ? ? ? ? ? ? ? ? throw new Error('輪子太少');
? ? ? ? ? ? ? ? }
給對象添加key時可以用【】里邊可以拼接
const obj = {};
? ? ? ? obj.isShow = true;
? ? ? ? const name = 'a';
? ? ? ? obj[name + 'bc'] = 123;
? ? ? ? obj['f'+'bc'] = function(){
? ? ? ? ? ? console.log(this);
? ? ? ? }
? ? ? ? console.log(obj);
總結:屬性名要動態(tài)變化時要用中括號里邊用+進行拼接
===不嚴謹? ? +0 === -0 返回的時false? NaN === NaN返回也是false
Object.is(NaN,NaN)? 嚴格意義上比較
assign()
對象合并? 返回合并之后的新對象
let target =? Object.assign({},{a:1},{b:2});? 將obj1? onj2合并到traget
? ? ? ? console.log(target);? ?
6.Symsbol? ? ? 了解一下不太常用
原始數(shù)據(jù)類型,Symbol,他表示獨一無二
最大用途? 用于定義對象的私有變量
如果Symbol定義的對象的變量,取值時一定要用[變量名]
let s1 = Symbol('s1');
? ? ? ? // console.log(s1);
? ? ? ? let obj = {};
? ? ? ? obj[s1] = '12312312';
? ? ? ? console.log(obj[s1]);
? ? ? ? console.log(obj.s1); ? 一定不能用.來獲取
使用Symbol時? for i遍歷對象無法獲取
let s = Object.getOwnPropertySymbols(obj);? 通過這個來獲取Symbol
let m = Reflect.ownKeys(obj);
? ? ? ? console.log(m);
7.set和map
set創(chuàng)建
let set = new Set();
? ? ? ? set.add(1);
添加時沒有重復值不會重復會合并
set.add([1,2,3]);? ? 添加數(shù)組? ?
set.delete(2)? 刪除2的元素
set.has(4)? 判斷書否含有4這個元素
將set轉(zhuǎn)換為數(shù)組
let set2 = new Set([1,2,3,4,5]);
? ? ? ? let arr = [...set2];
? ? ? ? console.log(arr);
set里邊的對象無法被釋放
let set3 = new Set(),obj = {};
? ? ? ? set3.add(obj);
? ? ? ? obj = null;
? ? ? ? console.log(set3);
weakSet可以刪除對象? 但是里邊的方法比較少
不能傳入非對象類型的參數(shù)
不可迭代
沒有forEach()
沒有size屬性
let set4 = new WeakSet(),obj2 = {};
? ? ? ? set4.add(obj2);
? ? ? ? obj2 = null;
? ? ? ? console.log(set4);
map類型時鍵值對的有序列表,鍵和值時日益類型
let map = new Map();
? ? ? ? map.set('name','zhangsan');
? ? ? ? map.set('age',20);
? ? ? ? console.log(map.get('name'));? ? 獲取值
? ? ? ? console.log(map);
? ? ? ? map.has('name');? ? 是否含有
? ? ? ? map.delete('name');? 刪除
? ? ? ? map.clear(); 清空
? ? ? ? console.log(map);
鍵和值可以是任意類型的
let map = new Map();
map.set(['a',[1,2,3]],'hellow');
復合寫法
let m = new Map([
? ? ? ? ? ? ['a',1],
? ? ? ? ? ? ['b',2]
? ? ? ? ])
1.只有input 和 textarea才有select() 方法 用這個方法可以進行選中 配合 document.execCommand('copy')來進行復制
2.npm出錯
以管理員身份運行PowerShell
右鍵點擊PowerShell圖標,選擇 “以管理員身份運行”。
輸入以下命令
powershell
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
RemoteSigned:允許運行本地腳本,遠程腳本需簽名。
-Scope CurrentUser:僅對當前用戶生效,無需全局修改。
重啟PowerShell
關閉當前窗口,重新打開PowerShell測試 npm -v。
3
// 發(fā)起 GET 請求
fetch('https://api.example.com/data')
? .then(response => {
? ? // 檢查 HTTP 狀態(tài)碼(如 200)
? ? if (!response.ok) {
? ? ? throw new Error('網(wǎng)絡響應異常: ' + response.status);
? ? }
? ? // 解析 JSON 數(shù)據(jù)
? ? return response.json();
? })
? .then(data => {
? ? console.log('獲取的數(shù)據(jù):', data);
? })
? .catch(error => {
? ? console.error('請求失敗:', error);
? });數(shù)必須要有返回值
返回值也可以這樣寫
await? 是等異步返回結果時返回結果,不會向下執(zhí)行