gpt4 book ai didi

javascript - 未定义的 JavaScript 对象构造函数

转载 作者:行者123 更新时间:2023-11-29 15:21:09 26 4
gpt4 key购买 nike

多年来我一直在使用我构建的同一个 JavaScript 库,现在我遇到了这个函数的错误:

IsArray : function ()
{
if (typeof arguments[0] == 'object')
{
var criterion = arguments[0].constructor.toString().match(/array/i);
return (criterion != null);
}

return false;
}

有时会在抛出以下错误时调用它:

TypeError: Cannot call method "toString" of undefined

我在定义 criterion 变量之前添加了以下内容以解决此问题:

if (arguments[0].constructor == null || arguments[0].constructor == undefined)
return false;

但是,我想了解这会如​​何发生或为什么会发生。我不知道为什么具有“对象”类型的变量没有构造函数。在此问题之前,我从未见过它。令我困扰的是,这一切都是在我更新另一个库函数几周后开始的,该库函数检查空值和空字符串以尝试过滤掉空数组(将空数组与空字符串进行比较时,它返回一个匹配项) .

最佳答案

嗯...您可能知道,JavaScript 有时会让人感到有些惊讶。使用 ES3,要确定一个数组是否真的是一个数组一点也不容易。因此,如果您想保留遗留代码,我认为您应该遵循 Douglas CrockfordJavaScript:The Good Parts 中给出的重要提示。

JavaScript does not have a good mechanism for distinguishing between arrays and objects. We can work around that deficiency by defining our own is_array function:

var is_array = function (value) {
return value && typeof value === 'object' && value.constructor === Array;
};

Unfortunately, it fails to identify arrays that were constructed in a different window or frame. If we want to accurately detect those foreign arrays, we have to work a little harder:

var is_array = function (value) {
return Object.prototype.toString.apply(value) === '[object Array]';
};

此外,当您使用null 时应该非常小心,因为Object.create(null) 创建了一个没有任何原型(prototype)的对象,typeof null 返回 objectnull == undefined 返回 true...

对于 ES5,最好的解决方案是使用 Array.isArray()

关于javascript - 未定义的 JavaScript 对象构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43616128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com