Understanding console error "TypeError: undefined is not an object" and "Uncaught TypeError: Cannot read property '0' of undefined"
Understanding console error "TypeError: undefined is not an object" and "Uncaught TypeError: Cannot read property '0' of undefined"
我有一个 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)
您的函数将 return 仅在 iOS 平台上运行,因此如果您在 Chrome 或 Safari (macOS) 上测试,您将收到错误消息。 ver
是 undefined
,因此没有 [0]
键。
一个快速的解决方法是使函数 return 在所有平台上都有效。类似于:
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
}
也许更好的解决方案(取决于您的具体问题)不进行 OS 检测,而是 feature detection.
您的 iOSVersion() 函数没有默认大小写。如果条件未计算为真,它需要一个 return 值。
//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');
}
当您尝试上述操作时会发生什么?
我有一个 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)
您的函数将 return 仅在 iOS 平台上运行,因此如果您在 Chrome 或 Safari (macOS) 上测试,您将收到错误消息。 ver
是 undefined
,因此没有 [0]
键。
一个快速的解决方法是使函数 return 在所有平台上都有效。类似于:
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
}
也许更好的解决方案(取决于您的具体问题)不进行 OS 检测,而是 feature detection.
您的 iOSVersion() 函数没有默认大小写。如果条件未计算为真,它需要一个 return 值。
//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');
}
当您尝试上述操作时会发生什么?