ES6拓展API

1.對象API拓展

? is

????????判斷兩個值是否相等 is(+0,-0);false? ?is(NaN,NaN) true? ? (NaN === NaN) false

// 1.is 判斷兩個值是否相等
console.log(Object.is(1,1));
console.log(Object.is(+0,-0));//返回false
console.log(+0 === -0);
console.log(Object.is(NaN,NaN));
console.log(NaN === NaN);

? assign

????????1.兩個參數 對象得復制?
? ? Object.assign(o,obj);將第二個參數得內容復制給第一個參數返回第一個參數
? ? 針對于基本數據類型實現的是深拷貝 針對于引用數據類型實現得是淺拷貝
? ? obj = {
? ? ? name:"",
? ? ? age:12,
? ? ? clazz:{
? ? ? ? no:'1001'
? ? ? }
? ? }
? ? 2.三個參數 對象合并
? ? Object.assign(o,obj,obj1);將后面兩個對象合并到o對象中 返回o對象

// 2.assign方法 兩個參數 代表的是復制對象 三個參數代表的是合并對象
/*** 兩個參數 assign(目標對象,要復制的對象) 返回值返回也是目標對象* */
let o = {};
let obj = {name:'zhangsan',age:12,//對基本數據類型實現深拷貝  (對引用數據類型實現淺拷貝--半深拷貝)clazz:{no:'2023'}
}
let res = Object.assign(o,obj);//將obj對象復制給o對象 同時返回o對象
console.log(res,res===o,res===obj);
o.clazz.no = '2024';
console.log(o,obj);/*** 三個參數:合并對象 (o,obj1,obj2) 將后面對象進行合并合并到第一個對象中 返回第一個對象* */
let o = {name:'zhangsan'};
let obj = {age:12};
let obj1 = {gender:'male'};
let res = Object.assign(o,obj,obj1);//返回第一個參數
console.log(res,res===o);

? getPropertypeOf

????????(目標對象) 獲取原型對象

let obj = {name:"zhangsan",age:12
}
// 獲取原型對象 getPrototypeOf 
console.log(obj.__proto__);
console.log(obj.constructor.prototype);
console.log(Object.getPrototypeOf(obj));
? setPropertypeOf

????????(obj,新原型對象) 設置原型對象

/*** 設置原型對象 setPropertypeOf*/
let obj = {};
let obj1 = {name:'zhangsan',age:12};
Object.setPrototypeOf(obj,obj1);//將obj原型對象設置為obj1
console.log(obj.__proto__)
console.log(obj.constructor.prototype);//注意 獲取不到新原型對象
console.log(Object.getPrototypeOf(obj));
? keys

????????獲取對象屬性名組成數組

? values

????????獲取對象屬性值組成數組

? entries

????????獲取對象屬性名和屬性值組成數組

? fromEntries

????????將屬性名和屬性值組成數組轉為對象

let obj = {name:'zhangsan',age:12,gender:'male'
}
console.log(Object.keys(obj));//獲取obj屬性名組成數組
console.log(Object.values(obj));//獲取obj屬性值組成數組
console.log(Object.entries(obj));//獲取obj屬性名和屬性值組成二維數組
console.log(Object.fromEntries(Object.entries(obj)));//將對象屬性名和屬性值組成二維數組轉為對象

2.數組API拓展

? 靜態方法:
? ? Array.from 將類數組轉為數組
? ? Array.of 創建數組實例
? 實例方法:
? ? find 查找數組元素 參數:回調函數(item,index,arr) 返回值:返回符合條件得第一個數組元素或者undefined
? ? findIndex 查找數組元素 參數:回調函數(item,index,arr) ?返回值:返回符合條件得第一個數組元素索引或者-1
? ? includes 檢測數組元素是否存在數組中 存在返回true ?不存在返回false NaN 返回true
? ? flat 展開數組層級 扁平化數組 ?參數:n 或者 Infinity
? ? fill 填充數組 修改原數組?
? ? flatMap flat和map結合?
? ? keys 返回得都是迭代器對象?
? ? values ?返回得都是迭代器對象?
? ? entries ?返回得都是迭代器對象?

/*** 靜態方法拓展 from of* 實例方法拓展 find findIndex flat keys values entries ....*/
// 1.將類數組對象轉為數組對象 from  
function foo(){console.log(arguments,'類數組對象');console.log(Array.from(arguments));console.log([...arguments]);console.log(Array.prototype.slice.call(arguments,0))
}
foo(1,2,3,4)// 2.of 創建數組實例
let arr1 = new Array(10);
let arr = Array.of(10);
console.log(arr,arr1,arr instanceof Array);// 3.find 返回第一個滿足條件得數組元素或者undefined  參數:回調函數
let arr = [1,2,3,4,5];
let res = arr.find(function(item,index,arr){return item>3
});
console.log(res);// 4.findIndex 返回第一個滿足條件得數組元素索引或者-1  參數:回調函數
let arr = [1,2,3,4,5];
let res = arr.findIndex((item,index,arr)=>{console.log(item,index,arr);return item>5
});
console.log(res,arr);// includes 檢測數組元素是否存在數組中 存在返回true 不存在返回false
let arr = [1,2,3,4,('hello'/2)];
console.log(arr.includes('2'));//針對于NaN優化
console.log(arr.includes(('hello'/2)));
console.log(arr.indexOf(('hello'/2)));// fill 填充數組  修改原數組
let arr = [1,2,3,4];
let res = arr.fill(8);
console.log(arr,res);/*** keys values entries  返回得是實現了迭代器接口對象  iterator */
let arr = [1,2,3,4,5];
console.log(arr.keys());
console.log(arr.values());
console.log(arr.entries());// flat方法 扁平化數組 數組層級展開 
let arr = [1,2,[3,4,5,[6,7,8,[9,10,[11]]]]];
console.log(arr.flat(1));
console.log(arr.flat(Infinity));// flatMap flat和map方法結合 需求 將數組展開 每個數組元素*2
let arr = [1,2,[3,4]];
let res = arr.flatMap((item,index,arr)=>{// console.log(item,index,arr)if(typeof item=='number'){return item * 2}else{return item.map((it)=>{return it*2})}
})
console.log(res);

3.類?

? ? 構造函數另一種寫法 創建對象模板 通過class創建類?

/*** 類看成構造函數得另一種寫法 使用class關鍵字創建類 創建對象模板*/
class Person{// 類體默認會提供一個空的構造器 constructor(name,age,gender){/*** new關鍵字作用:* 1.創建Person類實例對象* 2.將this指向Person類實例對象* 3.執行函數體* 4.返回Person類得實例對象*/// 實例私有屬性和私有方法this.name = name;this.age = age;this.gender =gender;this.say = function(){console.log(this,'查看this');}}// 寫在類體中的方法就是實例公共方法 ---類似于寫在原型對象中 Person.prototypesayName(){console.log(this.name)}
}
let p1 = new Person('zhangsan',12,'male');
let p2 = new Person();
console.log(p1);
p1.sayName();
console.log(p1.sayName === p2.sayName,'寫在類體中 實例公共方法');
console.log(p1.say === p2.say,'實例私有方法--寫在構造器中');
console.log(p1.constructor);


? ? ? 實例公共方法 相當于寫在Person.prototype?
? ? ? sayName(){

? ? ? }

class Person{// 使用static關鍵字聲明類得方法和屬性  靜態方法和靜態屬性 只能由類本身訪問static PersonAttr = 'Person靜態屬性';static PersonMethod = function(p){console.log('Person靜態方法');return p instanceof Person}// 默認提供一個空的構造器 constructor(){}
}
let p1 = new Person();
// console.log(p1.PersonAttr);
// console.log(p1.PersonMethod(p1));
console.log(Person.PersonAttr,'靜態屬性');
console.log(Person.PersonMethod(p1),'靜態方法');

?? ? ? 寫在類體中屬性也是私有屬性
? ? ? test = 'hello';
? ? ? firends = [];
? ? ? 靜態屬性 ?只能由類本身去調用屬性 ?Person.xxx = '' Person.method = function(){}
? ? ? static attr = '靜態屬性'
? ? ? static method = '靜態方法'

class Person {constructor(name, age, gender) {// 寫在構造器中屬性和方法是實例私有屬性和方法this.name = name;this.age = age;this.gender = gender;// this.test = xxx// this.friends=xxx}// 寫在類體中得方法是實例公共方法 相當于寫在Person原型對象中sayName() {console.log(this.name)}// 寫在類體中得屬性是是實例私有屬性test = 'hello';friends = [];static attr = 'Person類靜態屬性';static method = function(){console.log('Person類靜態方法');}
}
let p1 = new Person('terry',18,'male');
let p2 = new Person('larry',20,'female');
p1.sayName();//terry
p2.sayName();//larry
console.log(p1.sayName === p2.sayName);//true
p1.friends.push('tom');
console.log(p1.friends === p2.friends);//false
p1.test='我被修改了';
console.log(p1.test === p2.test);//false

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210437.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210437.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210437.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

音樂曲譜軟件Guitar Pro 8.1.1 破解版下載和網盤補丁

Guitar Pro 8.1.1 for Mac 中文破解版是一款功能強大的音樂曲譜軟件,非常適合學習如何玩,改進技巧,重現喜愛的歌曲或陪伴自己。可以幫助我們進行吉他的學習、繪譜與創作,它包含了幾乎所有的吉他現有指法及音色,在做彈撥…

角谷定理 C語言xdoj32

角谷定理定義如下: 對于一個大于1的整數n,如果n是偶數,則n n / 2。如果n是奇數,則n 3 * n 1,反復操作后,n一定為1。 例如輸入22的變化過程: 22 ->11 -> 34 -> 17 -> 52 -> 26 …

電源小白入門學習3——電源系統常見元件選型MOS管、二極管、電感篇

電源小白入門學習3——電源系統常見元件選型MOS管、二極管、電感篇 MOS管二極管電感 書接上文,上一期我們講了電阻、電容選型中需要注意的事項,下面我們接著來介紹MOS管和二極管。 MOS管 關于MOS管的基本原理和內部的一些結構,PN結、半導體的…

FPGA 低延時 TCP UDP IP協議棧兼容1G 10G 25G MAC

在計算和數據中心、軍事和航天、政府、儀器與測量、金融服務和廣播和視頻等行業,需要高可靠性的硬件和軟件產品,幫助客戶更快地開發部署新一代產品,減少技術和市場風險,我司研發的低延遲TCP/IP的IP核的傳輸速率高于傳統網口&#…

游戲Undercut使用python代碼實現

游戲Undercut是一個紙牌游戲,兩位選手各有編號1-5的5張牌。每一輪中每個玩家選擇一張牌,然后依次出示各自的牌。如果兩張牌數相同,則沒有比分。另有兩種情況:兩張牌的數字只相差1(這就是所謂的Undercut游戲&#xff09…

【工具類】Excel 多 Sheet 導入工具類

使用反射封裝,實現統一讀取 import cn.afterturn.easypoi.excel.annotation.Excel; import cn.afterturn.easypoi.excel.annotation.ExcelTarget; import cn.hutool.core.annotation.AnnotationUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.…

創建個人網站(一)從零開始配置環境,搭建項目

目錄 前言配置環境前端后端遇到的問題1.安裝了nvm和node,vscode沒反應2.安裝完腳手架之后vue指令不存在 前言 從剛開始學前端的html直到現在前后端都有在開發,我一直都有一個想法,就是創建自己的網站,我相信大家都有這個想法&…

uni-app 設置當前page界面進入直接變為橫屏模式

首先 我們打開項目的 manifest.json 在左側導航欄中找到 源碼視圖 然后找到 app-plus 配置 在下面加上 "orientation": [//豎屏正方向"portrait-primary",//豎屏反方向"portrait-secondary",//橫屏正方向"landscape-primary",//橫屏…

99、NeRF ray space

CG相機模型 在圖形學中最常用的相機模型的原理和小孔成像是類似的。 不同之處在于,如上圖,小孔成像得到的圖像是倒立的,但是我們希望得到的圖像是正向的,因此,我們選擇小孔前成像。 從 3D 到 2D 的投影,…

Grad-CAM原理

這篇是我對嗶哩嗶哩up主 霹靂吧啦Wz 的視頻的文字版學習筆記 感謝他對知識的分享 只要大家一提到深度學習 缺乏一定的解釋性 比如說在我們之前講的分類網絡當中 網絡它為什么要這么預測 它針對每個類別所關注的點在哪里呢 在great cam這篇論文當中呢 就完美的解決了在cam這篇論…

java多線程(常用方法、實現方式、線程安全問題、生命周期、線程池)

多線程相關的三組概念 程序和進程 程序(program):一個固定的運行邏輯和數據的集合,是一個靜態的狀態,一般存儲在硬盤中。簡單來說就是我們編寫的代碼 進程(process):一個正在運行的…

Python 中的 queue 模塊隊列詳解;隊列如何使用——如何處理信息在多個線程間安全交換的多線程程序?

queue 模塊即隊列,特別適合處理信息在多個線程間安全交換的多線程程序中。下面我們對 queue 模塊進行一個詳細的使用介紹。 1 queue 模塊定義的類和異常 queue 模塊定義了以下四種不同類型的隊列,它們之間的區別在于數據入隊列之后出隊列的順序不同。 …

cmake編譯數據庫

在使用CMake進行編譯時,如果你想生成編譯數據庫,你可以定義CMAKE_EXPORT_COMPILE_COMMANDS選項。具體的命令如下: cmake -DCMAKE_EXPORT_COMPILE_COMMANDS1或者在CMakeLists.txt顯示的使能配置 set(CMAKE_EXPORT_COMPILE_COMMANDS ON)這將會…

游戲玩家升級不傷手之選,光威龍武系列超強性能

得益于國產存儲芯片的崛起,現在的內存條價格太香了。要放在前幾年,購買內存條時都會優先考慮國際一線品牌。隨著內存條行業發生巨變,國產品牌光威GLOWAY,是全球前三的內存模組廠商嘉合勁威旗下品牌,它推出的內存條產品…

Zebec 推出由 Visa、萬事達網絡支持的即時支付卡,加密支付新征程

“Zebec現已推出全新的加密支付卡,該卡由Visa、萬事達網絡支持,具備即時、多鏈、非托管、無需KYC、免費等特性,其能夠通過加密錢包與多條主流公鏈鏈接并直接調用支付,這將是加密支付領域的里程碑事件。” 在2023年的12月8日&#…

C++中的string容器的substr()函數

一、作用 用來截取某段字符串。 二、頭文件 #include<string> 三、參數與用法 形式&#xff1a;s.substr(pos, len) 第一個參數是想要截取的字符串初始位置&#xff0c;第二個參數是截取字符串長度。 直接來說&#xff0c;就是從s[pos]開始截一個長度為len的子串。…

【python交互界面】實現動態觀察圖像在給定HSV范圍的區域顯示

HSV顏色空間 與RGB顏色空間相比&#xff0c;HSV顏色空間更適合進行顏色分析和提取特定顏色的目標。在HSV空間中&#xff0c;顏色信息被分布在不同的通道上&#xff0c;使我們能夠更準確地定義顏色的范圍&#xff0c;并使用閾值操作輕松地分離出我們感興趣的區域部分。 HSV三個通…

二叉樹查找值為x的結點(C語言)

目錄 前言 查找值為x的結點 返回值為指針 返回值為布爾類型 整體代碼 前言 在二叉樹結點個數、葉子結點個數、樹的高度、第k層結點個數的計算&#xff08;C語言&#xff09;中&#xff0c;我們解決了關于二叉樹的部分問題&#xff0c;但是還有一個問題我們放在本篇解決。 …

數據集成和人工智能驅動的見解

數字時代使數據成為人們關注的焦點&#xff0c;將其從單純的二進制序列轉變為有價值的組織資產。隨著企業越來越多地轉向數據驅動戰略&#xff0c;數據管理的復雜性也隨之增加。當前的任務不僅僅是存儲甚至收集數據&#xff0c;而是將其轉化為可操作的情報。本博客旨在剖析尋求…

Python中的selenium安裝的步驟(瀏覽器自動化測試框架)

一、前言 我們今天要安裝的selenium 就是瀏覽器自動化測試框架&#xff0c;是一個用于Web應用程序的測試工具&#xff0c;就是模擬用戶操作。支持的瀏覽器包括Chrome&#xff0c;IE&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Opera等。今天我們以Chrome為例講…