我正在尝试编写一个接受字符串列表或单个字符串的函数.如果它是一个字符串,那么我想将它转换为只有一个项目的数组.然后我可以循环它而不用担心错误.
那么我该如何检查变量是否是一个数组?
我已经完成了下面的各种解决方案,并创建了一个jsperf测试.
在javascript中可以直接设置length数组的属性.例如,我可以像这样缩短数组:
var arr = [1, 2, 3, 4];
arr.length = 2;
console.log(arr); // Array [ 1, 2 ]
// arr[2], arr[3] are deleted
Run Code Online (Sandbox Code Playgroud)
我希望它length是只读的(例如在java中).
据我所知,javascript中的数组也是一个对象:
console.log(typeof [1, 2, 3]); // object
Run Code Online (Sandbox Code Playgroud)
该length物业如何在引擎盖下工作?
这与 mongoose find() 操作的结果有关。代码
console.log('apparently this is an ' + typeof campaign.advertGroups, campaign.advertGroups);
导致以下输出:
apparently this is an object [ { adverts: [ [Object], [Object], [Object] ] } ]
campaign.advertGroups尽管它是 Mongo 集合中的数组,但它的行为不像数组(即 length 属性未定义等)。
有人能解释一下吗?这感觉太愚蠢了,我一定错过了一些非常非常明显的东西。
x 是一个数组。
我console.log(x)知道了
[ 'value' ]
Run Code Online (Sandbox Code Playgroud)
但是当我检查x的类型console.log(typeof x)时说它是一个对象。为什么?
我只是在这段代码上扯掉我的头发!我必须遗漏一些明显的东西。我声明了一个数组,它的类型返回“对象!”
代码如下:
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();,它做了同样的事情