【進階】深拷貝

目錄:
1 深拷貝
2 淺拷貝
3 文字超出兩行顯示省略號
4 height: 100%如何才能生效
5 path不包括 ?和 #

前言

(1) 基本數(shù)據(jù)類型用踩,引用數(shù)據(jù)類型

基本數(shù)據(jù)類型:number, string, boolean, null, undefined, symbol
引用數(shù)據(jù)類型:object, array, function

  • 區(qū)別:
    基本類型沒有屬性和方法,保存在棧區(qū)。
    引用類型有屬性和方法,保存在棧區(qū)和堆區(qū)。
    引用類型按引用訪問
    引用類型: 棧區(qū)保存變量標識符和指針胁艰,指針指向堆內(nèi)存中該對象,保存在變量中的是對象在堆內(nèi)存中的地址
  • 淺拷貝只能用于對象中只包含基本類型的數(shù)據(jù)智蝠,修改其中一個的屬性后腾么,相互不影響,當對象中仍然包含對象類型的數(shù)據(jù)時杈湾,則是引用關系解虱,修改會相互影響,所以這種情況需要用到深拷貝
const arr = [1];
const obj = { a: 1 };
const newArr = arr;   
const newObj = obj; ------------------ 變量 newObj 和 obj 保存的都是指向同一對象堆內(nèi)存的指針(引用)漆撞, 是指針
arr[0] = 2;
obj.a = 2;
console.log(arr, newArr, obj, newObj);  // [2] [2] {a: 2} {a: 2}






var a = {}; // a保存了一個空對象的實例
var b = a;  // a和b都指向了這個空對象
a.name = 'jozo';
console.log(a.name); // 'jozo'
console.log(b.name); // 'jozo'
b.age = 22;
console.log(b.age);// 22
console.log(a.age);// 22
console.log(a == b);// true
QQ截圖20190219105922.png

深拷貝方法一

JSON.parse(JSON.string(obj))

  • 缺點: 只能拷貝對象和數(shù)組殴泰,無法拷貝函數(shù)于宙,無法拷貝原型鏈上的屬性和方法(Date, RegExp, Error等)
 const ojbComplex = {
      name: 'wu',
      age: 20,
      address: {
        city: 'chongqing',
        district: 'yubei',
        town: 'jiazhou',
        detail: ['chognqing', 'yubei', 'jiazhou']
      },
      bwh: [20, 30, 40, {l: 20, w: 30, h: 40}],
      fn: function(){},
      date: new Date(),
      err: new Error(),
      reg: new RegExp(),
      null: null,
      undefined: undefined,
    }
    const deepClone = JSON.parse(JSON.stringify(ojbComplex));
    console.log(ojbComplex, 'ojbComplex')
    console.log(deepClone, 'deepClone');


缺點:
不能拷貝fn, date, err, reg
QQ截圖20190219111653.png

深拷貝方法二

for...in 循壞遞歸


function deepClone(obj) {
  let objClone = Array.isArray(obj) ? [] : {};
  if (obj && typeof obj === 'object') {
    for(let key in obj) {
        if ( obj.hasOwnProperty(key) ) {
          if ( obj[key] && typeof obj[key] === 'object') {
            objClone[key] = deepClone(obj[key]);   --------- 遞歸調(diào)用,deepClone()函數(shù)的返回值是objClone
          } else {
            objClone[key] = obj[key];
          }
         }
        }
      }
  return objClone;
}




    const params = {
      name: 'wang',
      address: {
        city: ['china', 'choing'],
        district: {
          town: 'jiazhou'
        }
      }
    };
    const b = deepClone(params);
    console.log(b)


缺點: 和JSON.parse(JSON.stringify(ojb)) 一樣艰匙, 不能拷貝 fn, date, reg限煞,err

https://zhuanlan.zhihu.com/p/41699218 lodash deepclone 源碼分析
http://www.reibang.com/p/c651aeabf582
http://www.reibang.com/p/b08bc61714c7
https://segmentfault.com/a/1190000015455662

淺拷貝

  • slice()
  • concat()
  • Object.assign(target, ...sources)
  • {...obj} 和 [...arr]
  • 循壞push
淺拷貝

const a = [1, {name: 'wang'}];
const b = [...a];
a[0] = 2;
a[1].name = 'li';
console.log(b)   
b // [1, { name: 'li' } ]




const a = [1,2,3];
const b = a.concat();
const c = a.slice();
a[0] = 111111;
console.log(b);
console.log(c);
b // [1,2,3]
c // [1,2,3]




const a = { name: 'wang' };
const b = Object.assign({}, a);
a.name = 'li';
console.log(b);
b  // { name: 'wang'}

文字超出兩行顯示省略號

overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;



英文單詞時:
word-wrap:break-word; --- word-wrap: 屬性允許長單詞或URL地址換行到下一行, break-word: 單詞內(nèi)換行
word-break:break-all;  ------------------ word-break: 規(guī)定自動換行的處理方式,break-all: 允許單詞內(nèi)換行



總結:
word-wrap: break-word员凝;  ------------ 整個單詞換行
word-break: break-all;   ------------ 單詞內(nèi)換行
white-space: nowrap;     ------------ 單詞不換行

文字超出單行不換行署驻,顯示省略號

.word {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;   --------------- 單詞不換行

  word-wrap: break-word; --------------- 整個單詞換行
  word-break: break-all; --------------- 單詞內(nèi)換行 (單行顯示省略號,后面兩個屬性可以不加)
}

https://www.cnblogs.com/ldlx-mars/p/6972734.html

height: 100%如何才能生效健霹?

  • 原理:height: 100%是根據(jù)父元素作為參照的旺上,如果父元素的高度是一個缺省值,即height:auto糖埋,則子元素設置height: 100%將不能達到效果宣吱。
  • 結論:普通文檔流中的元素,百分比高度值要想起作用瞳别,其父級必須有一個可以生效的高度值征候!
讓div充滿整個屏幕


方法1
解析:當html和body都設置了height: 100%時,子元素的height:100%就會生效
<!DOCTYPE html>
<html>
<head>
  <style>
    html, body {  
      height: 100%;
      width: 100%;
      background: red;
      padding: 0;
      margin: 0;
    }
    .a {
      height: 100%;
      width: 100%;
      background: black;
    }
  </style>
</head>
<body>
  <div class="a">
    <div class="b">居中</div>
  </div>
</body>
</html>





方法2
解析:使用絕對定位祟敛,當所有父節(jié)點都沒有設置定位信息時疤坝,是根據(jù)html來定位的
<!DOCTYPE html>
<html>
<head>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    .a {
      height: 100%;
      width: 100%;
      position: absolute;
      background: yellow;
    }
  </style>
</head>
<body>
  <div class="a">
    <div class="b">居中</div>
  </div>
</body>
</html>
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市馆铁,隨后出現(xiàn)的幾起案子跑揉,更是在濱河造成了極大的恐慌,老刑警劉巖埠巨,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件历谍,死亡現(xiàn)場離奇詭異,居然都是意外死亡辣垒,警方通過查閱死者的電腦和手機望侈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勋桶,“玉大人脱衙,你說我怎么就攤上這事「缯冢” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵陵究,是天一觀的道長眠饮。 經(jīng)常有香客問我,道長铜邮,這世上最難降的妖魔是什么仪召? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任寨蹋,我火速辦了婚禮,結果婚禮上扔茅,老公的妹妹穿的比我還像新娘已旧。我一直安慰自己,他們只是感情好召娜,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布运褪。 她就那樣靜靜地躺著,像睡著了一般玖瘸。 火紅的嫁衣襯著肌膚如雪秸讹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天雅倒,我揣著相機與錄音璃诀,去河邊找鬼。 笑死蔑匣,一個胖子當著我的面吹牛劣欢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播裁良,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凿将,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了趴久?” 一聲冷哼從身側響起丸相,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎彼棍,沒想到半個月后灭忠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡座硕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年弛作,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片华匾。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡映琳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜘拉,到底是詐尸還是另有隱情萨西,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布旭旭,位于F島的核電站谎脯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏持寄。R本人自食惡果不足惜源梭,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一娱俺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧废麻,春花似錦荠卷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屑彻,卻和暖如春验庙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背社牲。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工粪薛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搏恤。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓违寿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親熟空。 傳聞我的和親對象是個殘疾皇子藤巢,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,101評論 1 32
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標準息罗。 注意:講述HT...
    kismetajun閱讀 27,485評論 1 45
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案掂咒? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,753評論 1 92
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔,今天18年5月份再次想寫文章迈喉,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 2,756評論 2 9
  • 還沒想好怎么寫绍刮,敬請期待下期,謝謝~ 到了的小伙伴請留下足跡挨摸,哈哈~
    Wheat__閱讀 213評論 1 1