相关疑难解决方法(0)

是否可以确定使用Object.create创建的对象是否继承自JavaScript中的Array?

确定哪些对象在JavaScript 中是复杂的,并确定哪些对象是数组有一些hacky解决方案.幸运的是,它设法在以下两种情况下工作:

Object.prototype.toString.call([]);           // [object Array]
Object.prototype.toString.call(new Array());  // [object Array]
Run Code Online (Sandbox Code Playgroud)

很棒,没有[object Object]在视线中!可悲的是,这种方法仍然设法失败:

var arr = Object.create(Array.prototype);
Object.prototype.toString.call(arr);          // [object Object]
Run Code Online (Sandbox Code Playgroud)

这是令人沮丧的,所以至少可以这么说.我的arr对象具有数组的所有方法,它的功能类似于数组,并且出于所有目的,它一个数组.然而,JavaScript并没有提供识别它的工具.

有没有办法弄清楚一个对象是否继承了特定的原型?我想你可以像这样迭代原型:

function inherits(obj, proto) {
    while (obj != null) {
        if (obj == proto) return true;
        obj = Object.getPrototypeOf(obj);
    }
    return false;
}

inherits(Object.create(Array.prototype), Array.prototype);  // true
Run Code Online (Sandbox Code Playgroud)

但感觉有点黑客.有没有更清洁的方法?

javascript prototypal-inheritance ecmascript-5

7
推荐指数
1
解决办法
301
查看次数

重置Javascript对象中所有值的最佳方法

我的javascript对象看起来像:

$scope.display = {
  current: {
       key1: 'value1',
       key2: ['a', 'b'],
       key3: 'value2'
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的代码中的一些事件,我想将这些值重置为undefined,如下所示:

$scope.display = {
  current: {
       key1: undefined,
       key2: [],
       key3: undefined
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用像lodash这样的库,但是我没有看到任何可以执行此操作的函数.我知道如何手动执行此操作,但我想知道是否有"最佳实践"方法来执行此任务.

javascript lodash

7
推荐指数
1
解决办法
2万
查看次数

在 JavaScript 中如何检测天气类型是数组还是对象?

我需要知道如何检查变量是数组还是对象

var arr = ['foo', 'bar'];
var obj = {
  0: 'foo',
  1: 'bar'
}

document.write('arr is an: ' + typeof arr + ', obj is an: ' + typeof obj)

// The result is always:
// arr is an: object, obj is an: object
Run Code Online (Sandbox Code Playgroud)

有什么办法可以区分这两种类型吗?

javascript variable-types

7
推荐指数
1
解决办法
386
查看次数

对象原型上的toString().call()是如何获取Array的类型的

我正在查看代码,以确定对象是否是一个数组,我发现了这个答案.

代码工作正常,但我无法理解它是如何进行比较的 [object Array]

我试图得到它typeof Array,但这是一个错误.所以我对这段代码感到困惑"

if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {
Run Code Online (Sandbox Code Playgroud)

我很想知道toString.call( _ON_AN_ARRAY_ )对Object 的方法调用是如何正确获取Array对象的类型的.

javascript arrays object call prototype-programming

6
推荐指数
1
解决办法
99
查看次数

通过 SignalR 在 IE 中缺少原型方法

我遇到了处理原型方法消失(在本例中为 Array.prototype 方法)的问题,仅在 IE 中且仅当数组通过 SignalR 时。

我写了一个小/愚蠢但简单的概念验证网络应用程序来演示这个问题(代码如下)。请注意,当您单击“更新所有客户端”,然后单击“包含字母 'r' 的水果”时,_list 中的原型方法丢失导致异常。在那种情况下,数组来自 SignalR。现在,当您单击“重置”并将数组重置为硬编码值时,“包含字母 'r' 的水果”按钮突然起作用了 - 原型方法又回来了。请记住,此问题仅发生在 IE 中。

提示:当我第一次编写概念证明时,我无法重现该问题。当数组通过 SignalR 传入时,IE 仍然具有原型方法,但是在加载页面时我确实遇到了另一个错误。我不小心包含了两次 jQuery。当我取出多余的脚本以包含第二个 jQuery 时,它修复了该错误(显然),但现在可以重现该问题。然后 IE 缺少我创建的 Array 原型方法,但仅当数组通过 SignalR 出现时。

myExtensions.js:

Array.prototype.where = function (del)
{
    var ret = new Array();
    for (var i = 0; i < this.length; i++)
    {
        if (del(this[i])) ret.push(this[i]);
    }
    return ret;
}

Array.prototype.select = function (del)
{
    var ret = new Array();
    for (var i = 0; i < this.length; i++)
    {
        ret.push(del(this[i])); …
Run Code Online (Sandbox Code Playgroud)

internet-explorer prototype signalr

5
推荐指数
1
解决办法
418
查看次数

基于json对象树的html表

我有一个动态的json对象,它可以在内部包含不同类型的属性和对象,甚至可以包含平面字符串甚至数组。我制作了一个JavaScript代码,将单个JSON结构转换为HTML表,效果很好,但id希望将其用于动态JSON,因此基本上,我需要遍历JSON树的父级和子级,以了解如何创建此结构HTML表格。

但是在尝试验证孩子是否有对象时确实存在一些问题,例如:(我不想在JSON中添加很多细节)

parent: {
    child_1: {
        attr1 : value1
    },
    child_2: {
          [{ attribues and values in an array }]
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我当时正在考虑像这样使用“ typeof”函数:

if (typeof key === 'array') {
    // do something
}else{
    // do another stuff
}
Run Code Online (Sandbox Code Playgroud)

但是我不相信它会很好,你们能帮我吗?

提前致谢。

html javascript json

5
推荐指数
1
解决办法
776
查看次数

类型的东西返回对象而不是数组

x 是一个数组。

console.log(x)知道了

[ 'value' ]
Run Code Online (Sandbox Code Playgroud)

但是当我检查x的类型console.log(typeof x)时说它是一个对象。为什么?

javascript jquery

5
推荐指数
2
解决办法
484
查看次数

Javascript:比较运算符中的操作数顺序

是否有一个特定的原因,为什么我看到很多人写作

if(1 === a) {...}
Run Code Online (Sandbox Code Playgroud)

代替

if(a === 1) {...}
Run Code Online (Sandbox Code Playgroud)

我给出了一个答案,其中我写了一些类似的东西Array === obj.constructor,当有人问我他经常看到人们这样写而不是obj.constructor === Array.

那么我使用哪种方式真的很重要?

javascript comparison performance

5
推荐指数
1
解决办法
141
查看次数

Javascript 数组初始化为一个对象

我只是在这段代码上扯掉我的头发!我必须遗漏一些明显的东西。我声明了一个数组,它的类型返回“对象!”

代码如下:

var markers = new Array();
console.log(typeof markers);
d3.json(queryUrl, function(data) {
    console.log(data.features)
    data.features.forEach( function(each) {
        let ball = each["geometry"]["coordinates"]
        console.log(typeof markers)
        markers.push(
            L.marker([ball[1], ball[0]])
            .bindPopup(`Magnitude: ${each["properties"]["mag"]}`);
        )
    });
});

markers = L.layerGroup(markers);
Run Code Online (Sandbox Code Playgroud)

在两者中console.log(typeof),它们都返回对象,并且该markers.push()行引发错误(这是首先提示检查类型的原因)

我的第一个下意识反应是最后一行是罪魁祸首,但我将第一行改为var test = new Array();,它做了同样的事情

javascript arrays types d3.js leaflet

5
推荐指数
0
解决办法
128
查看次数

我可以使用`obj.constructor === Array`来测试对象是否是数组?

obj.constructor === Array用于测试对象是否为此处建议的数组是否正确?是否总能返回与之兼容的正确答案Array.isArray

javascript arrays types prototype

4
推荐指数
1
解决办法
1244
查看次数