0%

关于JS的length可以修改这件事

js中的length居然是可以修改的

起因

写了一个函数用于比对用户名和密码,函数内容大概如下:

var temp=await this.userService.selectUser(body.userName)
console.log(temp[0].password!=body.password)
if(temp.length=0){
return ResponseErr(ResponseCode.ERR,"该用户名不存在")
}
if(temp[0].password!=body.password){
return ResponseErr(ResponseCode.ERR,"密码错误")
}
return ResponseSuccess()

然后发现,第二行也就是console.log是可以正常输出的,但是在第六行确报了password undefined的错误。这是我就很迷惑啊,以为是异步处理出现了什么问题。找了半天错了,最后发现错误很离谱…..

错误分析

错误的根源在于第三行判断长度时,少写了一个等号!也就是temp.length=0应该是temp.length==0,这时我就想,难道length是可以重新赋值的?

查了一下文档,果然是这样的,具体参考Array.length

仔细想了一下,也没什么奇怪的,毕竟是x.length而不是x.length()或者len(x)。length是array的一个属性而已。认为其不可改可能是受到其他语言习惯的影响,认为其原理是执行函数计算一下大小。