JS(ES_6)_2

1.創建對象的6種方式:

?1. ob=new Object() ob.name='ah' ob.age=18

2. ob={name:'ah',gae:18}

3.工廠模式:

設計一個函數,專門生產Person類型的對象

<script>function createPerson(name,age,family) {var o = new Object();o.name = name;o.age = age;o.family = family;o.say = function(){alert(this.name);}return o;}p1=createPerson('ah',18,['l','ys'])
</script>

4.構造函數模式:

構造一個對象Person

<script>
function Person(name,age){this.name=namethis.age=agethis.sh=Function(){console.log('hi)}}p1=new Person('ah',18)
</script>

缺陷:構造函數也有其缺陷,每個實例都包含不同的Function實例( 構造函數內的方法在做同一件事,但是實例化后卻產生了不同的對象,方法是函數 ,函數也是對象)

5.原型模式創建對象

?

?????實例成員:實例化過程中的新加的屬性或方法(私有屬性或方法)

? ? 靜態成員:new 一個對象所具有的基本屬性或方法(一般屬性或方法)

? ? 公共成員:對象.prototype 的屬性或方法,可被重新賦值,可直接使用(公共屬性或方法)

prototype見:詳解prototype、__proto__和constructor_prototype和constructor-CSDN博客

<script>function Person() { }console.log(Person.prototype);//Object//創建公共屬性Person.prototype.name = 'ah'Person.prototype.age = 21;Person.prototype.family = ["lida", "lier", "wangwu"];Person.prototype.say = function () {alert(this.name);};console.log(Person.prototype);//{name: 'ah', age: 21, family: Array(3), say: ?}let p1 = new Personconsole.log(p1);//Person {}console.log(p1.name);//ah//單獨設置私有屬性/實例屬性:p1.sh = function () {console.log('hi', this.name);}console.log(p1);console.log(Person.prototype);p1.sh()//hi ahp2 = new Personp2.sh()//報錯</script>

6.原型模式+構造函數模式:

<script>function Person(name, age) {this.name = namethis.age = age}//設置一般的屬性,方法// 公共的的函數Person.prototype.sh = function () {console.log('hi', this.name);}console.log(Person);/*Person(name, age) {this.name = namethis.age = age}*/let p1 = new Person('ah', 18)  //設置一般的屬性p1.sh() // hi ahconsole.log(p1);//Person {name: 'ah', age: 18}</script>

2.基本包裝類型:

詳情見:JS基礎知識(二十二):基本包裝類型_js包裝類型-CSDN博客

1.基本類型值: 指的是簡單的數據段Undefined、Null、Boolean、Number 和 String

2.引用類型值: 指那些可能由多個值構成的對象

3.基本包裝類型:為了便于操作基本類型值,ECMAScript 還提供了 3 個特殊的引用類型:Boolean、Number 和String。

與其他引用類型相似,但有各自類型相應的特殊方法,例如String的 ?s1.substring(2);

本來基本類型值不應有方法,但是有方法,這是因為后臺自動完成了一系列的處理,即

{

? ? ? ? ? ? ? ? 創建 String 類型的一個實例;

? ? ? ? ? ? ? ? 在實例上調用指定的方法;

? ? ? ? ? ? ? ? 銷毀這個實例;

?}經過以上處理,s1就跟個對象一樣了而且,上面這三個步驟也分別適用于 Boolean和 Number 類型對應的布爾值和數字值

引用類型 ?與 ?基本包裝類型 ?的主要區別就是對象的生存期

使用 new 操作符創建的引用類型的實例,在執行流離開當前作用域之前都一直保存在內存中。

而自動創建的基本包裝類型的對象,則只存在于一行代碼的執行瞬間,然后立即被銷毀。

3.Object的靜態方法:

? ? ? ? ?1.Object.keys(obj) ?返回一個數組,獲得屬性名

? ? ? ? ?2.Object.values(obj) 返回一個數組,獲得屬性值

? ? ? ? ?3.Object.assign(obj2, obj/{gender:'女'}) 將后者賦值/增加(拷貝)給前者 ?assign賦值,分配

    <script>// 只有構造函數Object可以調用// 1.Object.keys(obj)  返回一個數組,獲得屬性名// 2.Object.values(obj) 返回一個數組,獲得屬性值// 3.Object.assign(obj2, obj) 將后者賦值(拷貝)給前者let obj = {name: 'ah',age: 18,sh: function () {alert(this.name)}}console.log(Object.keys(obj));console.log(Object.values(obj));let obj2 = {}Object.assign(obj2, obj)// 后者給前者console.log(obj2);// let arr = Object.keys(obj)// console.log(arr[0]);// console.log(arr[1]);</script>

4.Array的實例方法:

?1.forEach:遍歷,無返回值,本質上等同于 for 循環,對每一項執行 function 函數。

使用方法:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>let arr = [1, 2, 3]let sum = 0arr.forEach(function (e) { sum += e })console.log(sum); //6</script>
</body></html>

2.map:迭代映射,map() 方法創建一個新數組,這個新數組由原數組中的每個元素都調用一次提供的函數后的返回值組成

使用方法:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>const array1 = [1, 4, 9, 16];// Pass a function to mapconst map1 = array1.map((x) => x * 2);console.log(map1);// Expected output: Array [2, 8, 18, 32]</script>
</body></html>

?3.reduce:累計器

使用方法:

<script>const array1 = [1, 2, 3, 4];// 0 + 1 + 2 + 3 + 4const initialValue = 0; //initialValue初始值const sumWithInitial = array1.reduce((accumulator, currentValue) => accumulator + currentValue,  //accumulator累加器  currentValue數組值initialValue,);console.log(sumWithInitial);// Expected output: 10</script>

相關過程:? ? ? ? ?

? 第一次調用回調時初始化 accumulator 的值。

? ? ? ? ? ? 如果指定了 initialValue,則 callbackFn 從數組中的第一個值作為 currentValue 開始執行,accumulator初始為initialValue

? ? ? ? ? ? 如果沒有指定 initialValue,則 accumulator 初始化為數組中的第一個值,并且 callbackFn 從數組中的第二個值作為 currentValue 開始執行。

? ? ? ? ? ? 在這種情況下,如果數組為空(沒有第一個值可以作為 accumulator 返回),則會拋出錯誤。

? ? ? ? ? ? 每次調用時,callbackFn 的返回值都作為 accumulator 參數傳遞到下一次調用中。

? ? ? ? ? ? accumulator 的最終值(也就是在數組的最后一次迭代中從 callbackFn 返回的值)將作為 reduce() 的返回值

4.filter:過濾返回數組

filter() 方法創建給定數組一部分的淺拷貝,其包含 通過所提供函數實現的測試 的所有元素。

使用方法:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>// filter() 方法創建給定數組一部分的淺拷貝,其包含 通過所提供函數實現的測試 的所有元素。const words = ['spray', 'elite', 'exuberant', 'destruction', 'present'];const result = words.filter((word) => word.length > 6);console.log(result);// Expected output: Array ["exuberant", "destruction", "present"]</script>
</body></html>

5.join:整合

?join() 方法將一個數組(或一個類數組對象)的所有元素連接成一個字符串并返回這個字符串,用逗號或指定的分隔符字符串分隔。?如果數組只有一個元素,那么將返回該元素而不使用分隔符。

使用方法:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>const elements = ['Fire', 'Air', 'Water'];console.log(elements.join());// Expected output: "Fire,Air,Water"console.log(elements.join(''));// Expected output: "FireAirWater"console.log(elements.join('-'));// Expected output: "Fire-Air-Water"</script>
</body></html>

6.find:查找第一個符合條件的,有則返回,無則undifind,可以用來根據對象的屬性篩選對象

使用方法:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>const array1 = [5, 12, 8, 130, 44];const found = array1.find((element) => element > 10);//括號內寫查找的函數/要求console.log(found);// Expected output: 12</script>
</body></html>

7.every:測試所有元素

every() 方法測試一個數組內的所有元素是否都能通過指定函數的測試。它返回一個布爾值。

使用方法:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>const isBelowThreshold = (currentValue) => currentValue < 40;const array1 = [1, 30, 39, 29, 10, 13];console.log(array1.every(isBelowThreshold));// Expected output: true</script>
</body></html>

8.some:測試是否包含

使用方法:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>let arr = [1, 2, 3, 4]console.log(arr.some(x => x == 1)); //true</script>
</body></html>

9.findindex:找index,返回要找元素的下標,沒找到則返回-1

使用方法:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>let arr = ['a', 'b', 'c', 'd']console.log(arr.findIndex(x => x == 'c'));</script>
</body></html>

特殊:Array.from():偽數組(可迭代對象)轉真數組

例如將獲得的 lis 數組轉化成真數組

案例:購物車展示

效果圖:

代碼:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {margin: 0;padding: 0;list-style: none;box-sizing: border-box;}.banner {width: 1000px;height: 500px;margin: 0 auto;padding: 0 20px;border: 1px solid #000;}li {display: flex;width: 100%;height: 100px;margin-bottom: 6px;justify-content: space-between;}li img {width: 100px;}li div {width: 250px;text-align: center;color: red;}li span {color: #b3b3b3a5;font-size: 13px;}li .title {width: 100%;text-align: left;color: #000;}.total {text-align: right;}.total span {color: red;}</style>
</head><body><div class="banner"><ul><!-- 樣例布局,可留可刪 --><li><img src="https://img10.360buyimg.com/jdcms/s460x460_jfs/t1/163511/10/41642/167436/65e18381Fa56cd005/a3dd2c0fa6881ad0.jpg.webp"alt=""><div class="title">誠心如意手搖咖啡磨豆機<br><span>【贈品】</span><br><span>【贈品】</span></div><div><span>青色/一大</span></div><div>289.90</div><div><span>x2</span></div><div>279.80</div></li></ul><div class="total">合計:<span>798.00¥</span></div></div><script>const goodlists = [{name: 'Apple 蘋果 iPhone 15 Plus 二手手機 藍色 128G',price: 4999,picture: 'https://img20.360buyimg.com/jdcms/s460x460_jfs/t1/182034/34/38675/27903/650a62f5F522fd836/10fd8e1d1809b325.jpg.webp',count: 2,spec: { color: '藍色' },gifts: '充電線,耳機'},{name: '電腦臺式桌家用辦公桌子臥室小型簡約租房學生學習寫字桌簡易書桌 經典款-100CM白柳木 圓滑桌角 穩固承重',price: 116,picture: 'https://img12.360buyimg.com/jdcms/s460x460_jfs/t1/219000/19/39060/94643/65fdb31dF791b2494/d73fccc8ca386203.jpg.webp',count: 1,spec: { size: '150cm*100cm', color: '原木色' }},{name: '科技布藝沙發小戶型客廳臥室簡約單人雙人三人北歐簡易服裝店網紅 深藍色 科技布 80cm 單人位【廠家直銷】',price: 888,picture: 'https://img11.360buyimg.com/jdcms/s460x460_jfs/t1/112292/24/44663/84229/65d19513F0af948f9/105acfa9e3bdc391.jpg.webp',count: 1,spec: { size: '3m*1.5m', color: '紫色' }}]const ul = document.querySelector('.banner ul')const total = document.querySelector('.banner .total')let subtotal = [] //求和ul.innerHTML = goodlists.map(function (e) {subtotal.push(e.count * e.price)let str = ``if (Object.keys(e).find(x => x == 'gifts')) {// let arr = Object.values(e.gifts).join('').split(',')let arr = e.gifts.split(',')console.log(arr);for (x of arr) {str += `<br><span>【贈品】${x}</span>`}}return `<li><img src="${e.picture}"alt=""><div class="title">${e.name}${str}</div><div><span>${Object.values(e.spec).join('/')}</span></div><div>${e.price.toFixed(2)}</div><div><span>x${e.count}</span></div><div>${e.count * e.price}</div></li>`}).join('')let initialvalue = 0total.innerHTML = `合計:<span>${subtotal.reduce((a, initialvalue) => a + initialvalue)}¥</span>`</script>
</body></html>

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

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

相關文章

軟件設計師備考 | 案例專題之數據流圖 概念與例題

案例分析專題大綱&#xff1a; 數據流圖基本概念 基本圖形元素&#xff1a;外部實體、加工、數據存儲、數據流 數據流&#xff1a;由一組固定成分的數據組成&#xff0c;表示數據的流向。在DFD中&#xff0c;數據流的流向必須經過加工。加工&#xff1a;描述了輸入數據流到輸出…

啊哈!算法-第2章-棧、隊列、鏈表

啊哈!算法-第2章-棧、隊列、鏈表 第1節 解密qq號——隊列第2節 解密回文——棧第3節 紙牌游戲——小貓釣魚第4節 鏈表第5節 模擬鏈表 第1節 解密qq號——隊列 新學期開始了&#xff0c;小哈是小哼的新同桌(小哈是個大帥哥哦~)&#xff0c;小哼向小哈詢問 QQ 號&#xff0c; 小…

算法提高之線段樹

算法提高之線段樹 存儲方式 線段樹除了最后一層葉子節點以外是一個滿二叉樹類似堆的形式 因此可以用堆來存儲線段樹同時注意到 數組是可以模擬堆的 因此我們可以用一位數組來存儲線段樹 節點編號為u&#xff0c;對應左子樹編號為2 * u&#xff0c;右子樹編號為2 * u 1裝逼一…

C++ 學習 指針上

&#x1f64b; 繼續C Primer 第五版的學習 注 后面還會有關于指針進一步的學習 本篇為基礎篇 &#x1f33f;可以先看看這兩篇 或許可以進一步加深一下對指針的理解 指針和數組 指針簡介 &#x1f308; 上一次講了 C中的引用&#xff0c;現在總結一下指針和引用的主要區別。 …

uniapp微信小程序解決open-type獲取用戶頭像,返回臨時路徑問題!

解決 open-type 為 chooseAvatar&#xff0c;返回臨時路徑問題 文章目錄 解決 open-type 為 chooseAvatar&#xff0c;返回臨時路徑問題效果圖Demo獲取頭像回調數據結構效果圖解決方式上傳到服務器轉base64 基于微信小程序獲取頭像昵稱規則調整后&#xff0c;當小程序需要讓用戶…

深入了解FreeRTOS:實時操作系統的核心概念和應用

前言&#xff1a; 在當今數字化世界中&#xff0c;嵌入式系統扮演著至關重要的角色&#xff0c;從工業自動化到智能設備&#xff0c;無所不在。而實時操作系統&#xff08;RTOS&#xff09;則是這些系統的核心引擎&#xff0c;它們負責管理任務、資源和時間&#xff0c;確保系統…

RmlUi 初試,hello world

前言 最近在研究GUI的各個方面&#xff0c;最后被導向了web render&#xff0c;真的是一言難盡。 這里就其中一個比較有意思的項目 RmlUi 淺試一下&#xff0c;沒想要還挺麻煩&#xff01;這里留下note以供后人參考。 環境搭建 Windows VS2022 pre-binary library 需要指…

高通Android 12/13 設置和獲取ADB狀態

/*** 設置ADB狀態** param isEnable*/public void setADB(boolean isEnable) {Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.ADB_ENABLED, isEnable ? 1 : 0);}/*** 獲取ADB狀態** return*/public boolean getADB() {return Settings.Global.getIn…

虛擬化技術[3]之網絡虛擬化

網絡虛擬化 網絡虛擬化簡介核心層網絡虛擬化接入層網絡虛擬化虛擬機網絡虛擬化案例: VMware網絡虛擬化技術虛擬網絡接口卡虛擬交換機vSwitch分布式交換機端口組VLAN 網絡虛擬化簡介 傳統的數據中心&#xff1a;服務器之間操作系統和上層軟件異構、接口與數據格式不統一&#x…

鏈表相交-力扣

在做這道題時&#xff0c;首先想到的解法是遍歷第一個鏈表&#xff0c;將其全部添加到哈希表中&#xff0c;然后遍歷第二個鏈表&#xff0c;如果能夠再哈希表中查到元素&#xff0c;則返回這個元素&#xff0c;否則返回NULL。 但在實際寫代碼時&#xff0c;第一次寫默認為鏈表相…

Redis實現MQ

MQ的提出 上游發出請求后阻塞等待下游給到反饋&#xff0c;否則整個流程將一直阻塞。 提出mq之后&#xff1a;即有producer mq consumer 三者 MQ的特點 異步解耦 在有了 mq 后&#xff0c;producer 不需要過分關心 consumer 的身份信息&#xff0c;只需要把消息按照指定的協議…

Python 潮流周刊#52:Python 處理 Excel 的資源

本周刊由 Python貓 出品&#xff0c;精心篩選國內外的 250 信息源&#xff0c;為你挑選最值得分享的文章、教程、開源項目、軟件工具、播客和視頻、熱門話題等內容。愿景&#xff1a;幫助所有讀者精進 Python 技術&#xff0c;并增長職業和副業的收入。 本期周刊分享了 12 篇文…

基于hive的酒店價格數據可視化分析系統設計和實現

摘要 本文基于Django框架和Hive技術&#xff0c;設計和實現了一種酒店價格數據可視化分析系 統&#xff0c;旨在為酒店管理者提供直觀、清晰的數據洞察和決策支持。在研究中&#xff0c;首先深入分 析了酒店價格數據可視化分析系統的背景和意義&#xff0c;認識到對于酒店行…

3.Redis之Redis的環境搭建redis客戶端介紹

1.版本的選取 安裝 Redis&#xff1a;Redis 5 系列~~ 在 Linux 中進行安裝~~ Redis 官方是不支持 Windows 版本的~~ 微軟維護了一個 Windows 版本的 Redis 分支 Centos和Ubuntu.Docker 2.如何進行安裝&#xff1f;&#xff1f;&#xff1f; 1.ubuntu 2.centos yum instal…

arcgisPro將一個圖層的要素復制到另一個圖層

1、打開兩個圖層&#xff0c;如下&#xff0c;其中一個圖層中有兩個要素&#xff0c;需要將其中一個要素復制到另一個圖層中&#xff0c;展示如下&#xff1a; 2、選中待復制要素&#xff0c;點擊復制按鈕&#xff0c;如下&#xff1a; 3、下拉粘貼按鈕列表&#xff0c;選擇【選…

利用oracle默認事務隔離級別(提交讀)提升多表聯查速度

利用oracle默認事務隔離級別(提交讀)提升查詢速度) 背景介紹&#xff1a; 數據量大查詢緩慢&#xff0c;添加太多條件&#xff0c;使用IN走了全表查詢導致查詢速度緩慢。 解決方案&#xff1a; 版本一&#xff1a; 新建臨時表&#xff0c;在查詢是將數據插入到臨時表中&#…

Python 根據點云索引提取點云

點云索引濾波 一、介紹1.1 概念1.2 參數設置二、代碼示例三、結果示例一、介紹 1.1 概念 點云索引濾波 是一種常用的點云濾波方法,根據給定的索引列表獲取點云中的索引點,或著根據給定的索引列表獲取點云中的非索引點。 1.2 參數設置 核心函數: def select_by_index(self, …

Ubuntu22.04虛擬機設置靜態IP

虛擬機設置靜態IP 按下電腦的 “win”鍵&#xff0c;在彈出的輸入框中輸入“控制面板”&#xff0c;選中控制面板 1.選擇 “網絡和Internet” 2.選擇 “網絡和共享中心” 3.選擇 “更改適配器設置” 4.選擇 “VMnet8”&#xff0c;雙擊打開 5.選擇 “屬性” 找到 “Internet …

【idea】idea2024最新版本下載_安裝_破解

1、下載 下載地址&#xff1a;下載 IntelliJ IDEA – 領先的 Java 和 Kotlin IDE 下載完成&#xff1a; idea破解腳本下載鏈接&#xff1a;https://pan.baidu.com/s/1L5qq26cRABw8XuEn_CngKQ 提取碼&#xff1a;6666 下載完成&#xff1a; 2、安裝 1、雙擊idea的安裝包&…

《計算機網絡微課堂》1-6 計算機體系結構

常見的計算機網絡體系結構 從本節課開始&#xff0c;我們要用 4 次課的時間來介紹有關計算機網絡體系結構的知識&#xff0c;具體包含以下內容&#xff1a; 一&#xff0c;常見的計算機網絡體系結構二&#xff0c;計算機網絡體系結構分層的必要性三&#xff0c;計算機網絡體系…