Javascript"检查变量的长度时,无法读取未定义的属性'长度'

JVG*_*JVG 22 javascript

我正在构建一个用于解析的node刮刀.这是更多或一个香草javascript问题.在我的一部分中,我将一些内容加载到一个变量中,然后检查变量,如下所示:cheerioDOMlength

var theHref = $(obj.mainImg_select).attr('href');
if (theHref.length){
   // do stuff
} else {
  // do other stuff
}
Run Code Online (Sandbox Code Playgroud)

这很好用,直到我遇到一个$(obj.mainImg_select).attr('href')不存在的URL .我认为我的theHref.length支票会解释这个并跳过else: do other stuff声明,但我得到了:

TypeError: Cannot read property 'length' of undefined

我在这里做错了什么,我该如何解决这个问题?

Pau*_* S. 42

您可以theHref通过检查undefined来检查是否已定义.

if (undefined !== theHref && theHref.length) {
    // `theHref` is not undefined and has truthy property _length_
    // do stuff
} else {
    // do other stuff
}
Run Code Online (Sandbox Code Playgroud)

如果你想保护自己免受虚假价值的影响,null那么检查theHref是真的,这有点短

if (theHref && theHref.length) {
    // `theHref` is truthy and has truthy property _length_
}
Run Code Online (Sandbox Code Playgroud)


Ben*_*aum 5

为什么?

你问为什么会发生,让我们看看:

官方语言specificaion决定在内部调用[[GetValue]]方法.您的.attr返回未定义,并且您正在尝试访问其长度.

如果类型(V)不是参考,则返回V.

这是事实,因为undefined不是引用(与null,number,string和boolean一起)

设base是调用GetBase(V)的结果.

这得到了undefined一部分myVar.length.

如果是IsUnresolvableReference(V),则抛出ReferenceError异常.

这不是真的,因为它是可解析的并且它解析为未定义.

如果IsPropertyReference(V),那么

这是因为它是带.语法的属性引用.

现在它尝试转换undefined导致TypeError的函数.