Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js数组检查失败,即使在返回false时也无法处理条件_Javascript_Arrays_Regex_Node.js_Null - Fatal编程技术网

Javascript node.js数组检查失败,即使在返回false时也无法处理条件

Javascript node.js数组检查失败,即使在返回false时也无法处理条件,javascript,arrays,regex,node.js,null,Javascript,Arrays,Regex,Node.js,Null,node.js中有一个缓冲区,我正在用正则表达式检查mime类型。 regex中有一个捕获组,如果成功,它必须在exec返回的数组中的索引1处返回该捕获组 我正在使用 if(mime.exec(dt)[1]){ tip.push(mime.exec(dt)[1]); } 这个控制,我也试过了 if(1 in mime.exec) 而且 mime.exec.hasOwnProperty(1) 但无论如何,该条件已被处理并提供了回溯 TypeError: Cannot read pr

node.js中有一个缓冲区,我正在用正则表达式检查mime类型。
regex中有一个捕获组,如果成功,它必须在exec返回的数组中的索引1处返回该捕获组

我正在使用

if(mime.exec(dt)[1]){
    tip.push(mime.exec(dt)[1]);
}
这个控制,我也试过了

if(1 in mime.exec)
而且

mime.exec.hasOwnProperty(1)
但无论如何,该条件已被处理并提供了回溯

TypeError: Cannot  read property '1' of null
我可以使用什么样的机制来解决此问题

更新----

var mime=/^内容类型:(.+\S)/igm

更新----


如果没有更多的上下文(特别是
mime
的值是如何分配的),很难准确地说出发生了什么,但我们可以肯定地说:
mime.exec
在代码执行时
mime.exec.hasOwnProperty(1)
null
。因此,启动一个调试器,观察
mime
的值,看看发生了什么。

没有更多的上下文(特别是
mime
的值是如何分配的),很难准确地说出发生了什么,但我们可以肯定地说:
mime.exec
在代码执行时是
null
mime.exec.hasOwnProperty(1)
。因此,启动一个调试器,观察
mime
的值,看看发生了什么。

问题是您的正则表达式设置了全局标志-compare。因此,当您第一次调用
mime.exec(dt)
时,它会匹配某些内容并推进
mime.lastIndex
属性,但当您第二次调用
mime.exec(dt)
时,它在
dt
字符串中找不到第二个匹配项

所以有两件事要做:

  • 当您只想进行一次匹配时,不要将其设置为
    全局
    正则表达式。
    或者,如果您计划重用该对象(如示例中的多次回调调用),请确保在(m=regex.exec(input))期间耗尽搜索(通常
    )或重置
    regex.lastIndex=0每次
  • 不要调用
    exec()
    两次,只需将结果存储在变量中即可
还请注意,
.exec()
可能根本不会返回数组,但当它与任何内容都不匹配时,
null
可能会返回数组,因此您必须使用

var match = mime.exec(dt);
if (match) // possibly `&& match[1]` if you need to ensure that no empty string was captured
    tip.push(match[1]);

问题是您的正则表达式设置了全局标志-compare。因此,当您第一次调用
mime.exec(dt)
时,它会匹配某些内容并推进
mime.lastIndex
属性,但当您第二次调用
mime.exec(dt)
时,它在
dt
字符串中找不到第二个匹配项

所以有两件事要做:

  • 当您只想进行一次匹配时,不要将其设置为
    全局
    正则表达式。
    或者,如果您计划重用该对象(如示例中的多次回调调用),请确保在(m=regex.exec(input))
    期间耗尽搜索(通常
    )或重置
    regex.lastIndex=0每次
  • 不要调用
    exec()
    两次,只需将结果存储在变量中即可
还请注意,
.exec()
可能根本不会返回数组,但当它与任何内容都不匹配时,
null
可能会返回数组,因此您必须使用

var match = mime.exec(dt);
if (match) // possibly `&& match[1]` if you need to ensure that no empty string was captured
    tip.push(match[1]);
改变这个

if (mime.exec(dt)[1]) {
对此

if (mime.exec(dt) && mime.exec(dt)[1]) {
exec
返回null或数组——首先测试null,因为不能将null视为数组

编辑:如评论中所述,如果使用全局正则表达式,可能需要记住其他注意事项

因此,对于全局正则表达式,超级安全版本:

var rslt = mime.exec(dt)
if (rslt && rslt[1]) {
  tip.push(rslt[1]);
改变这个

if (mime.exec(dt)[1]) {
对此

if (mime.exec(dt) && mime.exec(dt)[1]) {
exec
返回null或数组——首先测试null,因为不能将null视为数组

编辑:如评论中所述,如果使用全局正则表达式,可能需要记住其他注意事项

因此,对于全局正则表达式,超级安全版本:

var rslt = mime.exec(dt)
if (rslt && rslt[1]) {
  tip.push(rslt[1]);

我在post@trott下添加mime变量,在赋值和检查属性之间的某个地方,
mime
的值被更改。这可能是一种使用
=
的情况,您的意思是使用
=
。这可能是一个范围问题。可能是其他原因。我正在post@trott下添加mime变量,在该赋值和检查属性之间的某个地方,
mime
的值被更改。这可能是一种使用
=
的情况,您的意思是使用
=
。这可能是一个范围问题。它可能是其他的。你能给我们看一个更完整的代码示例吗?@lispHK01我正在添加整个代码作为update,你能给我们看一个更完整的代码示例吗?@lispHK01我正在添加整个代码作为update,但它仍然不能解释为什么如果else语句不正确,你指的是哪个else语句,以及它如何“工作错误”?我正在检查是否定义了exec表示的数组的第一个索引,然后进行推送,但无论如何,即使这是空的,if块执行中的代码您是说
tip
最后包含意外值吗?如果是这样,请发布一个测试用例,其中包含您正在接收的
dt
值和预期输出。或者您是否引用了null的
无法读取属性“1”类型错误?请看我答案的最后一段,但它仍然没有解释为什么如果else语句不正确,你指的是哪个else语句,以及它如何“工作错误”?我正在检查是否定义了exec表示的数组的第一个索引,然后进行推送,但无论如何,即使这是空的,if块执行中的代码您是说
tip
最后包含意外值吗?如果是这样,请发布一个测试用例,其中包含您正在接收的
dt
值和预期输出。或者您是否引用了null的
无法读取属性“1”类型错误?看见