使用typeof时,获取“无法读取属性'0'的null”

时间:2015-06-22 14:13:54

标签: javascript jquery arrays

我想要什么

我正在尝试使用typeof来检查数组元素是否存在。原因是为了防止Cannot read property '0' of null错误。但是,只是尝试检查元素是否存在会导致错误。

我尝试了什么

if (typeof foo[0] !== 'undefined') 
{ 
    // I want to get here
}

if (typeof(foo[0]) !== 'undefined') 
{ 
    // I want to get here
}

这是循环的一部分,前四次迭代起作用,第五次迭代不起作用,第六次假设起作用。但是,它在第​​五个循环中失败了。我不能写一个异常,因为输入可以改变循环的哪些迭代被认为是有效的,哪些不会起作用。

我认为这是正确的方法,我不应该根据这些stackoverflow答案接收这种行为。

Check if an array item is set in JS

Checking if a key exists in a JavaScript object?

JavaScript isset() equivalent

How to check if a multidimensional array item is set in JS?

我认为关键是你可以在尝试使用它之前检查一个元素是否已设置并自行抛出错误。其他用户似乎可以使用完成此操作。我猜我在做一些与众不同的事情。如何在不使脚本失败的情况下检查是否设置了数组索引,因为我正在查看未设置的数组索引。

更多情境中的代码

不应该,但只是想要。

            for (templ_i=0; templ_i<number_of_fields; templ_i++)
            {
                // Font size
                if (d['font_size_group'][templ_i]['font_size'])
                {
                    size_re = new RegExp('"text_' + line + '" font-size="\\d+(\\.[0-9]+)?"', 'g');
                    current_line = svg_template.match(size_re);
                    size_re = new RegExp('[^_"]\\d+(\\.[0-9]+)?', 'g');
                    if (typeof current_line[0] !== 'undefined') { current_font_size = current_line[0].match(size_re); }
                    console.log(current_font_size);
                }
            }

3 个答案:

答案 0 :(得分:6)

response = @google_mail_session.execute( :api_method => @gmail_api.users.messages.list, :parameters => {:userId => 'me'}) # you can use the standard address here if you don't want to authorize to a specific account above 这样做:

  • 评估typeof foo[0]
  • 返回名称类型为
  • 的字符串

但是,如果foo[0]为空,则foo将抛出。

所以你可以使用

foo[0]

答案 1 :(得分:0)

if (typeof(foo && foo[0]) !== 'undefined') 
{ 
   // I want to get here
}

答案 2 :(得分:-1)

typeof return'string'。

如果你想使用typeof - 使用它是正确的:

if (typeof foo[something] != 'undefined') 
{
    // Now you can get foo[something]
}

重要

a = null;
typeof a

将返回“对象”