第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JS中if語句條件如果是賦值語句,那么結(jié)果會是什么?

JS中if語句條件如果是賦值語句,那么結(jié)果會是什么?

一只萌萌小番薯 2019-03-20 18:15:42
比方說下面這段代碼:var arr = [0,1,2,3,4,5]for (var i = 0; i < arr.length; i++) {    if(arr[i] = 0){        arr.splice(i , 1)    } }console.log(arr);    //結(jié)果是[ 0, 0, 0, 0, 0, 0 ]而如果把條件的右邊換成其他數(shù),比方說5或者8,只要不是0就可以,結(jié)果如下:var arr = [0,1,2,3,4,5]for (var i = 0; i < arr.length; i++) {    if(arr[i] = 5){        arr.splice(i , 1)    } }console.log(arr);    //結(jié)果是[ 1, 3, 5 ]我想知道if語句的括號里面發(fā)生了什么,我試著用一個小demo去理解,發(fā)現(xiàn)只要是等式成立,那么返回的結(jié)果都可以被轉(zhuǎn)換成true,我的demo如下,在控制臺的顯示是:var a = 1    //undefinedBoolean(a = 3)    //true請問怎么理解上面的代碼呢,為什么if語句賦值恒為true不是刪完所有的數(shù)組項呢?輸出結(jié)果有些讓人匪夷所思。
查看完整描述

5 回答

?
Qyouu

TA貢獻1786條經(jīng)驗 獲得超11個贊

第一個: arr[i] = 0執(zhí)行的是先賦值,得到結(jié)果0,再執(zhí)行if(0),0是false啊,所以不進if語句,所以循環(huán)一遍其實就是挨個賦值了,得到6個0不難理解吧

if(arr[i] = 0){


    arr.splice(i , 1)

第二個:其實看起來結(jié)果很詫異,運行一下就知道了

當(dāng)i=0時,進入if,數(shù)組變?yōu)閇5,1,2,3,4,5],執(zhí)行刪除——>[1,2,3,4,5]

當(dāng)i=1時,進入if,數(shù)組變?yōu)閇1,5,3,4,5],執(zhí)行刪除——>[1,3,4,5]

當(dāng)i=2時,進入if,數(shù)組變?yōu)閇1,3,5,5],執(zhí)行刪除——>[1,3,5]

當(dāng)i=3時,此時數(shù)組長度僅為3,跳出循環(huán),得到最終結(jié)果


查看完整回答
反對 回復(fù) 2019-03-22
?
呼如林

TA貢獻1798條經(jīng)驗 獲得超3個贊

賦值語句的返回值是被賦的值本身。


也就是說你第一段代碼的 if 進不去是因為都是 if(0),第二次都是 if(5) 所以就進去了


我們經(jīng)常會這樣利用這個特性:


var a5 = a[5] || (a[5] = 100)

// 取 a 的 5 號位,如果沒有值(或者 falsey),為它賦值并取它的值

聰明如你應(yīng)該一下就能看懂


注意一個區(qū)別,變量聲明語句沒有返回值,這解釋你最后一段的倒數(shù)第二行代碼

簡單的驗證:


var a = 1 // undefined

a = 2 // 2

希望對你有幫助


查看完整回答
反對 回復(fù) 2019-03-22
?
慕碼人8056858

TA貢獻1803條經(jīng)驗 獲得超6個贊

我找到答案了!
一、首先說if(arr[i] = 0)的情況,這里也用上面類似的小demo演示:

var a = 1    //undefinedBoolean(a = 0)    //false

看到了嗎,此時if語句的條件最終的結(jié)果是false,也就是說每次循環(huán)都執(zhí)行了if語句里面的賦值,但是條件不符合,所以if語句里面的代碼塊沒有執(zhí)行,結(jié)果就是6個0。

二、再說說if(arr[i] = 8)的情況:

  1. 第一次循環(huán),i=0,if語句括號里面賦值后結(jié)果是true,所以執(zhí)行條件體,刪除數(shù)組第0項,

此時的數(shù)組是[1,2,3,4,5]

  1. 第二次循環(huán),i=1,if語句括號里面賦值后結(jié)果是true,所以執(zhí)行條件體,刪除數(shù)組第1項,

此時的數(shù)組是[1,3,4,5]

  1. 第三次循環(huán),i=2,if語句括號里面賦值后結(jié)果是true,所以執(zhí)行條件體,刪除數(shù)組第2項,

此時的數(shù)組是[1,3,5]

  1. 第四次循環(huán)的時候,i=4,而此時數(shù)組長度為3,條件不符合,循環(huán)結(jié)束。

這樣就縷清楚了!


查看完整回答
反對 回復(fù) 2019-03-22
?
慕森卡

TA貢獻1806條經(jīng)驗 獲得超8個贊

第一段代碼對數(shù)組進行了賦值操作
第二段代碼對數(shù)組進行刪除元素操作,結(jié)果:[ 1, 3, 5 ] 是刪除后剩下的元素
希望能幫到你

查看完整回答
反對 回復(fù) 2019-03-22
?
猛跑小豬

TA貢獻1858條經(jīng)驗 獲得超8個贊

其實這個都是因為賦值表達式的值是賦值表達式右值。

所以你第一段代碼中的


if(arr[i] = 0){ // 這里因為賦值值為0,永遠為假,下面的語句不會執(zhí)行

        arr.splice(i , 1)

    } 

后面


Boolean(a = 3) //這里如果賦值為a=3 !=0 所以返回真,如果是a=0,則返回假。


查看完整回答
反對 回復(fù) 2019-03-22
  • 5 回答
  • 0 關(guān)注
  • 1621 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號