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' )
当 a
或 b
为 '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
}
我有两个字符串数组,它们可能未定义或定义了一些值。
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' )
当 a
或 b
为 '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
}