TypeError: Cannot read property length from undefined

TypeError: Cannot read property length from undefined

我有两个字符串数组,它们可能未定义或定义了一些值。

var a ; // [Array of strings]
var b ; // [Array of strings]
var c; // result array

每当 定义了数组 a 或数组 b,并且它们的长度 > 0。但是我的脚本出错了,这是下面的代码行。

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 

如何更改此条件以满足我的 requirements.Is 还有更好的方法来实现 this.Also,我正在使用 Rhino JS 引擎 1.13 版本

你可以像这样重写它

if((a !== undefined && a.length > 0) || (b !== undefined && b.length > 0)) {
  c = ...
}

确保您只检查每个变量的长度,前提是它们不是未定义的。

顺便说一句,如果您使用'use strict'模式,您可以只使用a !== undefined而不是typeof a !== 'undefined'

您应该将 a 个测试分组,然后将 b 个测试分组。

if (
       typeof a !== "undefined" && a.length && a.length > 0
    || typeof b !== "undefined" && b.length && b.length > 0
) {
    c.push("abc");
}

而且,由于 Rhino 支持 Array.isArray(),这里有一个更小更清晰的代码:

if (Array.isArray(a) && a.length > 0 || Array.isArray(b) && b.length > 0) {
    c.push("abc");
}

我在你的代码中看到的问题是第一次评估

(typeof a !== 'undefined' ||typeof b !== 'undefined' )

ab'undefined' 时 returns 为真。 例如,想象一个 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
}

在Javascript中,您还可以通过以下方式检查变量的值是否为null或undefined。

我想这会对你有所帮助。试试这个:

if(a?.length > 0 && b?.length > 0){
    // Code here
}