我正在构建一个用于解析的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)
你问为什么会发生,让我们看看:
该官方语言specificaion决定在内部调用[[GetValue]]方法.您的.attr返回未定义,并且您正在尝试访问其长度.
如果类型(V)不是参考,则返回V.
这是事实,因为undefined不是引用(与null,number,string和boolean一起)
设base是调用GetBase(V)的结果.
这得到了undefined一部分myVar.length.
如果是IsUnresolvableReference(V),则抛出ReferenceError异常.
这不是真的,因为它是可解析的并且它解析为未定义.
如果IsPropertyReference(V),那么
这是因为它是带.语法的属性引用.
现在它尝试转换undefined为导致TypeError的函数.
| 归档时间: |
|
| 查看次数: |
150983 次 |
| 最近记录: |