了解控制台错误“TypeError: undefined is not an object”和“Uncaught TypeError: Cannot read property '0' of undefined”

马特_50

我有一个 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] 错误!)。有人可以帮助我了解出了什么问题以及如何解决吗?

(发生这种情况的页面在这里

洛朗

你的函数只会在 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
}

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章