我在Webkit上运行以下代码:
var scriptElements = document.scripts;
var scriptUrls = [];
// URL matching
var regexp = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/i;
for (var i = 0; i < scriptElements.length; i++) {
element = scriptElements[i];
var urls = element.innerHTML.match(regexp);
console.log('local', urls);
scriptUrls.concat(urls);
console.log('global', scriptUrls);
}
我看到非空数组打印在“本地”之后,但“全局”始终保持为空数组。这是怎么回事?
最佳答案
.concat
创建一个新的数组。您需要覆盖旧的。
scriptUrls = scriptUrls.concat(urls);
或者,如果您想保留原始的
scriptUrls
数组,则可以对其中的值进行.push()
。scriptUrls.push.apply(scriptUrls, urls);
这使用
.apply()
将urls
转换为传递给.push()
的各个参数。这样,urls
的内容将作为单独的项目添加到scriptUrls
中。另外,请注意
.concat()
展平了Array。如果您想要一个数组数组,则可以使用scriptUrls.push(urls)
。