ES5-14 【utils】三目運算符、對象克隆、淺拷貝、深拷貝

淺拷貝

  1. for-in(遍歷一個實例對象,原型上的屬性也會打印
Object.prototype.num = 1
function shallowClone(origin, target) {for (var key in origin) {target[key] = origin[key]}
}
var p1 = {name: '人類',daughter: {first: 'Jessica',}
}
var p2 = {}
shallowClone(p1, p2)
p2.daughter.second = 'Krystal'
console.log(p1, p2)

在這里插入圖片描述

  • 用hasOwnProperty剔除原型上的屬性
Object.prototype.num = 1
function shallowClone(origin, target) {var tar = target || {}for (var key in origin) {if (origin.hasOwnProperty(key)) {tar[key] = origin[key]}}return tar
}
var p1 = {name: '人類',daughter: {first: 'Jessica',}
}
var p2 = shallowClone(p1)
p2.daughter.second = 'Krystal'
console.log(p1, p2)

在這里插入圖片描述

深拷貝

  • 我的實現方式(未考慮正則、方法、Date)
var baseType = ['[object String]', '[object Null]', '[object Undefined]', '[object Boolean]', '[object Number]']
Object.prototype.num = 1
function isBaseType(target) {return baseType.includes(Object.prototype.toString.call(target))
}
function deepClone(origin, target) {var tar = target ? target : Array.isArray(origin) ? [] : {} // 關鍵語句for (var key in origin) {if (isBaseType(origin[key]) && origin.hasOwnProperty(key)) {tar[key] = origin[key]} else if (!isBaseType(origin[key])) {tar[key] = deepClone(origin[key], tar[key]) // 關鍵語句}}return tar
}
var p1 = {name: '人類',daughter: {first: 'Jessica',grandSon: [12, 15]}
}
var p2 = deepClone(p1)
p2.daughter.second = 'Krystal'
p2.daughter.grandSon.pop()
console.log(p1, p2)

在這里插入圖片描述
在這里插入圖片描述

  • JSON (不能拷貝正則、方法…)
var p1 = {name: '人類',daughter: {first: 'Jessica',grandSon: [12, 15],fun: function () { }}
}
var str = JSON.stringify(p1)
var p2 = JSON.parse(str)
console.log('p1', p1)
console.log('str', str)p2.daughter.second = 'Krystal'
p2.daughter.grandSon.pop()
console.log('p2', p2)

在這里插入圖片描述

練習

在這里插入圖片描述
注意
在這里插入圖片描述
注意

function Foo() {getName = function () { // 沒經過var 會被提升到全局console.log(1)}return this
}
Foo.getName = function () {console.log(2)
}
Foo.prototype.getName = function () {console.log(3)
}
var getName = function () {console.log(4)
}
function getName() {console.log(5)
}
Foo.getName()  // 函數也是對象,增加屬性 2
getName() // 4 變量聲明提升 函數聲明 變量賦值
Foo().getName() // 1 沒有new
getName() //  1
new Foo.getName()// 2 (new 2,.運算符優先級高于new)
new Foo().getName()// 3
new new Foo().getName()// 3 
GO = {getName:undefined(變量聲明)- fn(函數聲明) - 新fn(變量賦值)- 新fn
}
  • 判斷閏年(整除4&&不能整除100 || 整除400)

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

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

相關文章

java代理的原理及應用

什么是代理模式? 定義 為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下,一個對象不適合或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。 ——百度百科 代理模式的角色 抽象角色:代…

vue --- 過濾器、計算、方法、觀察屬性

過濾器屬性:filters: <div id "app">{{num}}<br>{{num | toInt}}<br>{{num | toFloor}}<br>{{num | toCeil}}<br> </div> <script>let vm new Vue({el: #app,data:{num:3.45,},// 過濾器filters:{toInt(value){return …

《你不知道的JavaScript(上卷)》讀書筆記

第一次嘗試用思維導圖記筆記&#xff0c;感覺還不錯~~~不過還是改不了我讀書筆記寫成抄書筆記的毛病 。 因為開始學JS的時候&#xff0c;一般瀏覽器就已經支持ES6了&#xff0c;所以比較喜歡使用ES6語法&#xff0c;let&#xff0c;>等&#xff0c;文中代碼不是抄書的&#…

ES5-15 數組基礎、數組方法、數組排序

創建數組 字面量 var arr []構造函數 var arr new Array()不使用new var arr Array() 所有數組都繼承于Array.prototype&#xff0c;能使用其中的數組方法 數組是另一種形式的對象&#xff0c;訪問機制相同數組的empty項打印出來是undefined&#xff0c;empty不是值只是一個…

Centos 7 配置 NFS

安裝NFS包 yum install nfs-utils.x86_64 啟動NFS服務需要首先啟動rpcbind服務&#xff0c;這個rpcbind包已經在上面安裝好了 先配置 /etc/exports 文件 vi /etc/exports /etc/exports文件內容格式&#xff1a; <輸出目錄> [客戶端1 選項&#xff08;訪問權限,用戶映射,其…

數學期望筆記

基礎知識點 首先明確期望公式:\[E(X)∑_ip_i*x_i\] 其中 \(p\) 代表概率 , \(x\) 代表發生貢獻。 然后期望的幾點性質: 對于數學期望&#xff0c;我們還應該明確一些知識點&#xff1a; (1) 期望的“線性”性質 對于所有滿足條件的離散型的隨機變量\(X,Y\)和常量\(a,b\)有: \[E…

vue --- vue中的幾個鉤子屬性

1.創建前:beforeCreate <div id"app">{{name}}</div><script>let app new Vue({el:#app,data:{name:31231312},beforeCreate(){console.log(掛在前);console.log(this.$data);console.log(this.$el);}})</script>// beforeCreate()是在Vue掛…

ES5-16【utils】數組方法、類數組

數組方法 concat 返回值是拼接后的數組 toString 將數組轉成字符串&#xff0c;用逗號隔開 slice(a&#xff0c;b) [a&#xff0c;b) 不傳值&#xff0c;拷貝了一份不傳b&#xff0c;截取到最后一位傳b&#xff0c;截取到b之前的那位a/b是負數&#xff08;和splice一樣&a…

Catalan卡塔蘭數

卡塔蘭數 卡塔蘭數是組合數學中一個常出現在各種計數問題中出現的數列。由以比利時的數學家歐仁查理卡塔蘭 (1814–1894)命名。 卡塔蘭數的一般項公式為 另類遞歸式&#xff1a; h(n)((4*n-2)/(n1))*h(n-1); 前幾項為: 1, 1, 2, 5, 14, 42, 132, 429, …

vue --- v-html、v-bind

v-html // 有時候,我們需要展示<strong>,但直接使用下面的語法并不會顯示 <div id "app">{{name}}</div><script>let app new Vue({el:#app,data:{name:<strong>啦啦啦</strong>}}); </scritp> // 結果當然沒讓人失望此…

在樹莓派是安裝并配置NTP服務

我們都知道樹莓派的小巧和省電節省空間等太多的優勢&#xff0c;這里就不一一列舉了&#xff0c;那么樹莓派就需要長時間的運行&#xff0c;可以724的方式運行&#xff0c;那么我們就把樹莓派當作一個小的服務器來運行&#xff0c;可以跑一些小的應用&#xff0c;例如可以在局域…

Oracle使用總結

1. 在ORACLE中Service Name即為數據庫名稱&#xff1b; 2. 在做刪除操作時&#xff0c;需要加Commit進行操作提交&#xff1b; 3. 使用sqlldr將數據進行批量導入到ORACLE中&#xff1a; 3.1 Sqlldr命令的用法&#xff1a; sqlldr useridLoginName/PasswordTNSName controlC:\U…

ES5-17/18 錯誤信息、try_catch、嚴格模式

錯誤信息 語法錯誤 標識符名稱&#xff08;變量、函數名&#xff09;不規范對關鍵字賦值基本語法錯誤&#xff0c;如分號打錯 引用錯誤 變量、函數未聲明給無法賦值的對象賦值var a 1 2 范圍錯誤 數組長度為負數方法參數超出可行范圍toFixed(-1) 類型錯誤 調用不存在…

vue --- v-text、v-show、v-if、v-else

v-text: <div id "app"><p v-text"msg"></p> </div> <script>let app new Vue({el:#app,data:{msg:Hello Vue}}) </script>// 可見v-text在某種程度上等價于 {{}}v-show: <div id "app"><div…

查找mac下騰訊視頻下載地址

mac 騰訊視頻下載的視頻是不可見的&#xff0c;也許是因為版權原因吧。使用以下方法可以在文件中找到緩存的視頻&#xff08;不過都是被斷開的很多短視頻&#xff09;。 在terminal輸入&#xff1a; cd Library/Containers/ 然后ls查看。查看當前的所有文件夾&#xff0c;你會看…

JS 新建web sql 數據表

//新建web sql數據庫數據表var tbName"tableName";var strSQL"create table if not exists tableName (id unique,th1,th2,th3)";function creatBDTable(strSQL,tbName){db openDB();db.transaction(function(tr) {tr.executeSql(strSQL,[],//SQL語句出成…

vue --- v-for、v-on、v-model、v-once

v-for: <div id "app"><ul><li v-for"item in list">{{item}}</li></ul> </div> <script>let app new Vue({el:#app,data:{list:[B,A,T]}}) </script>拿到索引index: <div id"app">&…

ES5-19 變量聲命周期、垃圾回收原理、arguments

變量聲命周期 垃圾回收 找出不再使用的變量釋放其占用內存固定的時間間隔運行 解除由于閉包產生的對fn AO的引用 標記清除 排除全局變量、排除閉包引用的AO中的變量進入環境 → 離開環境常用 引用計數 引用計數為0時清除對循環引用的情況&#xff0c;如果不手動接觸引用…

bzoj 1801: [Ahoi2009]chess 中國象棋【dp】

注意到一行只能放012個炮&#xff0c;我們只需要知道列的狀態&#xff0c;不用狀壓行 所以設f[i][j][k]表示前i行有j列有1個炮&#xff0c;有k列有2個炮的方案數 然后分情況討論轉移就行了 #include<cstdio> #include<iostream> using namespace std; const int N1…

vue --- compoent妙用

首先利用寫一個靜態模板的組件 <div id "app"><my-arti></my-arti> </div> <script>Vue.component(my-arti,{template:<div style"border:1px solid black"><span>date:2019年06月14日</span><br>…