我正在尝试获取对象的长度,但是却收到此错误消息:
with open('input.txt', 'r') as input_file:
with open('output.txt', 'w') as output_file:
# We only have to loop through the large file once
for line in input_file:
# Looping through my data many times is OK as it only contains ~100 elements
for stuff in data:
# Search the line
line_data = re.search(r"(match group a)|(match group b)", line)
# Verify there is indeed a match to avoid raising an exception.
# I found using try/except was negligibly slower here
if line_data:
if line_data.group(1):
output_file.write('\n')
elif line_data.group(2) == stuff:
output_file.write('stuff')
output_file.close()
input_file.close()
我正在尝试获取长度,并且在长度为零时弹出一个窗口。
我尝试使用Uncaught TypeError: Cannot read property 'length' of undefined
情况1:数据不可用,因此this.props.storyboardTargets.length === 0
-> (!this.props.storyboardTargets)
案例2:数据在那里,后来被删除或清除,因此需要检查长度
以下是我的代码:
undefined
答案 0 :(得分:1)
您现在编写的方式无法解决this.props.storyboardTargets
可能不确定的问题。您需要像这样更新它:
handleShowPopupTarget = () => {
if (!this.props.storyboardTargets || !this.props.storyboardTargets.length) {
console.log(this.props.storyboardTargets);
toastWarning(WARNING_MSG_NO_TARGET);
}
};
这意味着如果storyboardTargets
未定义,或其长度为0,则会触发toastWarning
。
作为替代方案,您可以为storyboardTargets
的空数组的组件定义默认属性。这样一来,它永远不会undefined
。
答案 1 :(得分:0)
该错误消息表示storyboardTargets
未定义。尝试查看是否将storyboardTargets
传递到包含您的handleShowPopupTarget
方法的组件中。
答案 2 :(得分:-1)
使用 lodash 的 get ,它大大简化了此类错误检查:
_.get(this.props, 'storyboardTargets.length', 'default'); // you could use 0 instead of 'default' in your case
答案 3 :(得分:-1)
您的原始代码为
if (!this.props.storyboardTargets.length) {
它失败了,因为this.props.storyboardTargets
是未定义的,而且您无法读取未定义内容的属性,因此会引发错误。
因此,在此之后,您听取了建议并将代码更改为
if (this.props.storyboardTargets && !this.props.storyboardTargets.length)
因此现在这可以停止在此行上发生未定义的错误,因为对this.props.storyboardTargets
的真实检查会阻止对代码后半部分的评估。因此,这意味着该代码不会进入if
中。但是您希望它进入if语句(如果未定义)。
因此,您需要做的是将其更改为“或”检查,以便未定义它或没有长度
if (!this.props.storyboardTargets || !this.props.storyboardTargets.length)
现在它进入if语句ID,它是未定义的,不会引发错误。
另一种解决方案是查看它是否未定义并将其设置为默认值
this.props.storyboardTargets = this.props.storyboardTargets || []
if (!this.props.storyboardTargets.length)
现在,如果未定义数组,则将其设置为空数组,并且if检查将正常工作。如果其他事情依赖未定义,则更改数据可能不是最佳解决方案。