理解控制台错误“TypeError:undefined不是对象”和“Uncaught TypeError:无法读取未定义的属性'0'”[duplicate]

问题描述 投票:1回答:2

这个问题在这里已有答案:

我有一个jQuery脚本在Safari 10中出现此控制台错误:

TypeError: undefined is not an object (evaluating 'iOSversion()')

这在Chrome中:

Uncaught TypeError: Cannot read property '0' of undefined

这是有问题的脚本(简化):

$(document).ready(function() {

    //detect iOS version
    function iOSversion() {
        if (/iP(hone|od|ad)/.test(navigator.platform)) {
            // supports iOS 2.0 and later
            var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
            return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
        }
    }

    // this causes a console error
    var ver = iOSversion();
    if (ver[0] < 10) {
        alert('this is version 9 or below');
    }

    if (ver[0] >= 10) {
        alert('this is version 10 or above');
    }

});

问题:我是JavaScript的初学者并且很难理解问题的原因是什么(因为变量看起来是正确定义的?)而且我不知道[0]错误!)。有人可以帮我理解出了什么问题以及如何解决?

(这个页面正在发生的是here

javascript jquery ios feature-detection
2个回答
1
投票

您的功能仅在iOS平台上返回内容,因此如果您在Chrome或Safari(macOS)上进行测试,则会出现错误。 verundefined,因此没有[0]钥匙。

快速解决方法是使函数在所有平台上返回有效的内容。就像是:

function iOSversion() {
    if (/iP(hone|od|ad)/.test(navigator.platform)) {
        // supports iOS 2.0 and later
        var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
        return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
    }
    return [0]; // Return '0' by default
}

也许更好的解决方案(取决于您的确切问题)将不是操作系统检测,而是feature detection


1
投票

你的iOSVersion()函数没有默认情况。如果条件未评估为true,则它需要返回值。

//detect iOS version
    function iOSversion() {
        if (/iP(hone|od|ad)/.test(navigator.platform)) {
            // supports iOS 2.0 and later
            var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
            return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
        }
        else{
             return [-1];
        }
    }

    var ver = iOSversion();
    if (ver[0] < 10 && ver[0] != -1) {
        alert('this is version 9 or below');
    }
    else if (ver[0] >= 10) {
        alert('this is version 10 or above');
    }
    else{
        alert('this is not iOS');
    }

当您尝试上述操作时会发生什么?

© www.soinside.com 2019 - 2024. All rights reserved.