日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

分享JS一题

發(fā)布時(shí)間:2023/12/31 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分享JS一题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
let obj ={} let a={n:100 } let b= {n:200 } obj[a]=100 obj[b]=200 console.log(obj[a])

說答案


結(jié)果 :200
原因:

因?yàn)樗饕?key 為數(shù)字或字符串,對(duì)象會(huì)被轉(zhuǎn)為字符串 "[object Object]",所以obj[a],obj[b]訪問的都是同一個(gè)key

let a={n:100 } let b= {n:200 }

中間 這段代碼無意義。


const 聲明
const 的行為與 let 基本相同,唯一一個(gè)重要的區(qū)別是用它聲明變量時(shí)必須同時(shí)初始化變量,且
嘗試修改 const 聲明的變量會(huì)導(dǎo)致運(yùn)行時(shí)錯(cuò)誤。

但是!

const 聲明的限制只適用于它指向的變量的引用。換句話說,如果 const 變量引用的是一個(gè)對(duì)象,
那么修改這個(gè)對(duì)象內(nèi)部的屬性并不違反 const 的限制。

const person = {}; person.name = 'Matt'; // ok

Null 類型同樣只有一個(gè)值,即特殊值 null。邏輯上講,null 值表示一個(gè)空對(duì)象指針,這也是給typeof 傳一個(gè) null 會(huì)返回"object"的原因:

let car = null; console.log(typeof car); // "object"

存儲(chǔ)浮點(diǎn)值使用的內(nèi)存空間是存儲(chǔ)整數(shù)值的兩倍, 所以 ECMAScript 總是想方設(shè)法把值轉(zhuǎn)換為整數(shù)

浮點(diǎn)值的精確度最高可達(dá) 17 位小數(shù),但在算術(shù)計(jì)算中遠(yuǎn)不如整數(shù)精確。例如,0.1 加 0.2 得到的不是 0.3,而是 0.300 000 000 000 000 04


NaN 不等于包括 NaN 在內(nèi)的任何值。例如,下面的比較操作會(huì)返回 false:

console.log(NaN == NaN); // false


8/27 又來一題

一:

let p = new Promise(function(resolve,reject){reject();resolve(); }) p.then(function(){console.log('成功') },function(){console.log('失敗') }) 不要試圖敲代碼輸出

答案: console.log('失敗')
解析: promise最重要的特性就是狀態(tài)一經(jīng)改變就無法更改, 首先初始化狀態(tài)為pending,執(zhí)行reject后狀態(tài)變?yōu)閞ejected,變?yōu)槭≈?即使后面是resolve, 也不執(zhí)行了


二:

Promise.resolve(1) .then(res => 2) .catch(err => 3) .then(res => 5). then(res=> console.log(res))

答案: 5
解析:除了第一個(gè) then ,以后的所有的 then 都是上一個(gè) then 中的返回結(jié)果,首先是promise具有鏈?zhǔn)秸{(diào)用的特性, then接收兩個(gè)函數(shù)一個(gè)成功,一個(gè)是失敗函數(shù), 第一個(gè)resolve(1), 不管括號(hào)里是什么。 其實(shí)就是返回一個(gè)成功的狀態(tài)


三:

Promise.resolve(1) .then((x) => x + 1) .then((x) => { throw new Error('My Error') }) .catch(() => 1) .then((x) => x + 1) .then((x) => console.log(x)) .catch(console.error)

答案: 2

promise為什么能形成鏈?zhǔn)秸{(diào)用? 因?yàn)樗祷氐牟皇潜旧韙his而是創(chuàng)建了一個(gè)新的promisePromise.resolve(1) .then((x) => x + 1) .then((x) => { throw new Error('My Error') }) .catch(() => 1) // 雖然上一個(gè)then拋出錯(cuò)誤,但是這里catch返回的是常量。 就會(huì)繼續(xù)走下一個(gè)then .then((x) => x + 1) // 1 +1 .then((x) => console.log(x)) // 2 .catch(console.error)

catch函數(shù)依舊return 的是常量。 就繼續(xù)走then。 沒有返回值,就停止了

鏈?zhǔn)秸{(diào)用只要有返回值就是返回新的promise函數(shù),這樣你就不會(huì)覺得錯(cuò)誤直接就停止


四:

Promise.resolve(1).then((res) => {console.log(res)return 2}).catch((err) => {return 3}).then((res) => {console.log(res)})

答案: 1,2


五:

Promise.resolve().then(() => {return new Error('error!!!') }).then((res) => {console.log('then: ', res)}).catch((err) => {console.log('catch: ', err)})

答案: console.log('then: ', res)

除了promise.reject或者throw error 。 其他無論返回什么都走外層then函數(shù),第一個(gè) .then(() => {return new Error('error!!!') }) 里面 是return 的一個(gè)錯(cuò)誤, 會(huì)繼續(xù)走下一個(gè)then。 如果第一個(gè) , 修改成這樣 .then(() => {throw error(‘xxx’)})答案就是console.log('catch: ', err)

六:

Promise.resolve().then(() => {return Promise.reject('錯(cuò)誤')}).then((res) => {console.log('then: ', res)}).catch((err) => {console.log('catch: ', err)})

答案: console.log('catch: ', err)


Promise.resolve(1).then(2).then(Promise.resolve(3)).then(console.log)

答案: 1
解析:

因?yàn)閞esolve后面的then傳遞的是一個(gè)非函數(shù),promise就會(huì)把值傳遞給下一個(gè)then函數(shù),發(fā)現(xiàn)下一個(gè)then函數(shù)還不是函數(shù),就一直傳到最后

.then((x) => x + 1) 這種即是 返回的是函數(shù) .then(2) 這種就是非函數(shù),意思就是個(gè)常量傳進(jìn)去了


這是then函數(shù)里面的實(shí)現(xiàn),throw error他會(huì)用try catch 捕獲,執(zhí)行reject。
而只是單純r(jià)eturn ,你傳的newError這個(gè)實(shí)例,他會(huì)走resolve
就是throw error 其實(shí)和reject 走的相同路線了







var lsg = '笨'let zqh =lsgzqh ='聰明'console.log('lsg', lsg)

打印"笨"。 lsg 是字符串。 zqh = lsg。 現(xiàn)在他倆值相同。 修改各自的值, 別人不會(huì)受影響

var lsg = {zs:'笨' }let zqh =lsgzqh.zs = '聰明'console.log('lsg', lsg.zs)

打印“聰明” 說明zs指向了同一個(gè)內(nèi)存地址,所以值相同 . 因?yàn)閘sg是obj類型。 zqh = lsg 也就是淺拷貝了一份lsg的數(shù)據(jù)。修改lsg 或者zqh 。 zs的值, 兩個(gè)都會(huì)被修改。
因?yàn)樗麄兎謱俨煌瑑?nèi)存地址

let a = {n: 1 }a.x = a = {n: 2 }let b = a console.log(a.x) console.log(b)

首先我們看執(zhí)行順序 首先我們命名變量 a,其次開啟一個(gè)空間去儲(chǔ)存n:1,然后變量a指向內(nèi)存地址1。
第二部分 a.x =a = {n:2}, 我們?cè)趦?nèi)存地址1的地方開辟一個(gè)x變量?jī)?chǔ)存a ,而a指向了內(nèi)存2,內(nèi)存2沒有x屬性,所以為 undefined

let a = {n: 1 } let b = a a.x = a = {n: 2 }console.log(a.x) console.log(b)

打印b:

{n: 1,x :{ n: 2} }

總結(jié)

以上是生活随笔為你收集整理的分享JS一题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。