成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS中的一些坑(持續(xù)更新)

Lin_YT / 3280人閱讀

摘要:?jiǎn)栴}高級(jí)程序設(shè)計(jì)第版第頁部分寫到首先,任何涉及的操作例如,都會(huì)返回。這一點(diǎn)寫錯(cuò)了,加性操作符就是個(gè)特例加性操作符中如果有一個(gè)操作數(shù)是字符串,即便有一個(gè),也會(huì)將其轉(zhuǎn)為字符串進(jìn)行拼接。而對(duì)于減性操作符,書中所寫是對(duì)的

1. 基本類型與引用類型

??途W(wǎng)上的一個(gè)題:

var arr=[{a:1},{}];
arr.forEach(function(item,idx){
    item.b=idx;
});

執(zhí)行完上面代碼后,arr 的值是?

覺得 forEach 方法中的 item 參數(shù)是按值傳遞,所以不會(huì)改變?cè)瓉淼?arr,答案為:[{a:1},{}] 。正確答案是:[{a:1, b:0},{b:1}] 。這里忽略了一個(gè)重要的點(diǎn),即函數(shù)參數(shù)雖然是按值傳遞,不是按引用傳遞,但是基本類型和引用類型本身的差別被忽略了。

基本類型占用的內(nèi)存空間不大,所以把變量 a 賦給 b,是把 a 的值拷貝一份給b,a、b 所在的內(nèi)存空間是獨(dú)立的,所以修改 a 不會(huì)影響 b:

var a = 1;
var b = a;
a = 2;
a; // 2
b; // 1

但是引用類型就不一樣了,因?yàn)橐妙愋痛鎯?chǔ)的內(nèi)容可能很多,比如將對(duì)象 a 賦值給對(duì)象 b,如果是簡(jiǎn)單拷貝一遍內(nèi)容,可能會(huì)帶來很大的內(nèi)存開銷,所以這種情況,對(duì)象a 和 b 實(shí)際上指向同一個(gè)內(nèi)存空間,賦值操作實(shí)際上是將 a 的內(nèi)存地址復(fù)制一份給 b,所以 a 對(duì)象的屬性改變也會(huì)影響到 b 對(duì)象:

var obja = {
  a: 1,
  b: 2
}
var objb = obja
obja.a = 2;
obja; // {a:2, b:2}
objb; // {a:2, b:2}

那么就很好理解啦,forEach 中的參數(shù) item 如果是一個(gè)引用類型,就要警惕啦,雖然是按值傳遞,但是傳遞的值是內(nèi)存地址。

2. NaN問題

<>第29頁NaN部分寫到:

首先,任何涉及NaN的操作(例如 NaN/10),都會(huì)返回NaN。

這一點(diǎn)寫錯(cuò)了,加性操作符就是個(gè)特例:

console.log(NaN + "A"); // "NaNA"
console.log(NaN + NaN); // NaN
console.log(NaN + 1); // NaN

加性操作符中如果有一個(gè)操作數(shù)是字符串,即便有一個(gè)NaN,也會(huì)將其轉(zhuǎn)為字符串進(jìn)行拼接。

而對(duì)于減性操作符,書中所寫是對(duì)的:

console.log(NaN - "A"); // NaN
console.log(NaN - NaN); // NaN
console.log(NaN - 1); // NaN

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/95941.html

相關(guān)文章

  • vue入筆記(持續(xù)更新

    摘要:如果我們能把不同路由對(duì)應(yīng)的組件分割成不同的代碼塊,只在路由被訪問的時(shí)候才加載對(duì)應(yīng)的組件,這樣就更加高效了。這樣會(huì)大大提高首屏顯示的速度,但是可能其他的頁面的速度就會(huì)降下來。 一、 代碼分割,讓頁面按需加載,加快首屏速率 vue.js構(gòu)建單頁應(yīng)用雖然能通過路由來實(shí)現(xiàn)多頁面效果,但是實(shí)際上打包后所有的代碼都只有一個(gè)入口文件app.bundle.js,當(dāng)項(xiàng)目變得十分龐大的時(shí)候,app.bun...

    tanglijun 評(píng)論0 收藏0
  • 微信網(wǎng)頁開發(fā)調(diào)用微信jssdk接口遇到的以及最終解決方法 (持續(xù)更新

    摘要:在系統(tǒng)的手機(jī)中,其實(shí)微信點(diǎn)擊網(wǎng)頁的圖片會(huì)自動(dòng)調(diào)用這個(gè)接口一次。然后在在下面進(jìn)行微信的接口的調(diào)用判斷是還是終端終端更新這個(gè)好像微信自己修復(fù)了,現(xiàn)在無論還是,如果不調(diào)用這個(gè)方法,微信自己不會(huì)去調(diào)用了。 1.微信網(wǎng)頁開發(fā)調(diào)用jssdk時(shí)報(bào)permission denied 大致是兩個(gè)原因 (1)首先注冊(cè)時(shí)未將你所調(diào)用的接口名字添加至jsApiList (2)第二個(gè)就是你的這個(gè)公眾號(hào)沒有權(quán)限使...

    Little_XM 評(píng)論0 收藏0
  • web app遇到的一些及小技能(持續(xù)更新...)

    摘要:遇到的一些坑問題手機(jī)端事件會(huì)有大約的延遲原因手機(jī)端事件,因?yàn)樵谑录|發(fā)之后,瀏覽器要判斷用戶是否會(huì)做出雙擊屏幕的操作,所以會(huì)等待來判斷,再做出是否觸發(fā)事件的處理,所以就會(huì)有的延遲解決方法使用事件來代替事件,如的事件和,還有我自己 遇到的一些坑 問題:手機(jī)端 click 事件會(huì)有大約 300ms 的延遲 原因:手機(jī)端事件 touchstart --> touchmove --...

    darry 評(píng)論0 收藏0
  • web app遇到的一些及小技能(持續(xù)更新...)

    摘要:遇到的一些坑問題手機(jī)端事件會(huì)有大約的延遲原因手機(jī)端事件,因?yàn)樵谑录|發(fā)之后,瀏覽器要判斷用戶是否會(huì)做出雙擊屏幕的操作,所以會(huì)等待來判斷,再做出是否觸發(fā)事件的處理,所以就會(huì)有的延遲解決方法使用事件來代替事件,如的事件和,還有我自己 遇到的一些坑 問題:手機(jī)端 click 事件會(huì)有大約 300ms 的延遲 原因:手機(jī)端事件 touchstart --> touchmove --...

    zhiwei 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Lin_YT

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<