TypeError:无法从未定义读取属性长度
2022-05-20
2545
我有两个字符串数组,它们可能未定义或已定义某些值。
var a ; // [Array of strings]
var b ; // [Array of strings]
var c; // result array
每当数组 a 或数组 b 已定义且其长度 > 0 时,我需要将一些静态值(如“abc”)推送到第三个数组(如 var c)。但我的脚本中断了,这是下面的代码行。
if((typeof a !== 'undefined' ||typeof b !== 'undefined' ) && (a.length > 0 || b.length > 0) )
当我为“a”分配一些值并且 b 未定义时,上述 loc 失败。错误日志显示以下内容。
by: javax.script.ScriptException: TypeError: Cannot read property \"length\" from undefined\n\tat
我如何更改此条件以满足我的要求。有没有更好的方法来实现这一点。另外,我使用的是 Rhino JS 引擎 1.13 版。
3个回答
您可以像这样重写它
if((a !== undefined && a.length > 0) || (b !== undefined && b.length > 0)) {
c = ...
}
以确保您仅在每个变量未定义时才检查其长度。
顺便说一句,如果您使用
'use strict'
模式,则只需使用
a !== undefined
而不是
typeof a !== 'undefined'
。
Pablo Lozano
2022-05-20
我在您的代码中看到的问题是第一次评估
(typeof a !== 'undefined' ||typeof b !== 'undefined' )
当
a
或
b
为
'undefined'
时,它返回 true。
例如,想象一个实例,其中
a
未定义,但
b
是一个数组;
(typeof a !== 'undefined' ||typeof b !== 'undefined' )
计算结果为
true
。
第二次计算使用
OR
(
||
) 运算,该运算从左到右开始;
(a.length > 0 || b.length > 0)
首先计算
a.length
但
a
为
'undefined'
,因此出现错误。
我会使用这个
if((a !== undefined && a.length > 0) || (b !== undefined && b.length > 0)) {
// Do something
}
Elias Gikonyo
2022-05-20
在 Javascript 中,您还可以使用以下方式检查变量的值是否为 null 或未定义。
我想这会对您有所帮助。试试这个:
if(a?.length > 0 && b?.length > 0){
// Code here
}
Nikhil
2022-05-20