js 开发进阶之 开发中容易遇到的问题

来源:互联网 发布:念诗 知乎 编辑:程序博客网 时间:2024/05/22 03:23

在开发android 的开发习惯,转向js 开发的时候,回遇到些代码习惯的问题,今天就遇到了一个问题

需求场景 是当我门找到满足条件的信息 我门返回 true 没找到 返回 fasle ,对于一个写android 的人来说 通常会这么写:

showGroupCommentList(responseBody) {        responseBody.GroupList.map((data) => {       if (data.GroupType === 1 && data.CommentDetailList.length > 0) {          return  true;      }      });    return false;  }

但是在debug 过程中 发现 这个方法返回的值undefined
从java 的角度 我百思不得其解,不就是返回 对 boolean 值吗,为什么会出现问题,先说解决办法,代码应该这么写:

showGroupCommentList(responseBody) {    let hasGroupComment = false;       responseBody.GroupList.map((data) => {       if (data.GroupType === 1 && data.CommentDetailList.length > 0) {           hasGroupComment = true;      }      });    return hasGroupComment;  }

设置变量,在处理中赋值,为了弄明白这个问题,查了下js 语法,

 responseBody.GroupList.map((data) => {      } 

这里的map 的方法体中,其实是回调,所以我一开始在回调中返回true or false 写法是有问题的,.

•map:和forEach非常相似,都是用来遍历数组中的每一项值的,用来遍历数组中的每一项;
•区别:map的回调函数中支持return返回值;return的是啥,相当于把数组中的这一项变为啥(并不影响原来的数组,只是相当于把原数组克隆一份,把克隆的这一份的数组中的对应项改变了);

2 在写js 的程序的时候,会犯些低级错误,
比如一下代码

getTheSameKindPeople(list) {    if (!list) {      return;    }    for (let i = 0; i < list.length; i++) {      if (list[i].ItemType === 1) {        this.displayCommentOrderType = list[i].ItemValue;      }      if (list[i].ItemType === 3) {        this.sameKindPeopleTitle = list[i].ItemValue;      }      if (list[i].ItemType === 4) {        this.sameKindPeopleUrl = list[i].ItemValue;      }    }

这段代码是典型的java 思想 写的代码,那么如果想当然的去写 会写成

if(list.get(i).ItemType === 1){    this.displayCommentOrderType = list.get[i].ItemValue;}

这样写会使程序获取的值undinefed ,避免犯这些低级错误

4 在我门开发js 的过程中 我门会像java 中的for 循环中,当满足条件 直接 break 出来,其实这种写法看似简单 但是对于初接触 js 的人来说容易犯错
上面体到 不能用 forEach 或者 forMap

 for (const data of htlBaseInfo.RoomList) {        if (data.RoomId === roomId || data.RoomName === roomName) {          status = 1;          break;        }      }

for of 的形式 或者 比较常规 简单的写法

 for (const data of htlBaseInfo.RoomList) {        if (data.RoomId === roomId || data.RoomName === roomName) {          status = 1;          break;        }      }