Javascript 数组表示法
我想知道Javascript 数组表示法,javascript,jquery,jquery-select2,Javascript,Jquery,Jquery Select2,我想知道[]和(3)[对象,对象,对象]之间的数组表示有什么区别 我有一组对象,如: var array = [{id: 1, text: 'a'}, {id: 2, text: 'b'}, {id: 3, text: 'c'}]; 当我尝试在代码中的某一行中使用console.log(array)时,它有时打印为[],有时打印为(3)[对象,对象,对象]。[]不是空的,不过,当我在浏览器控制台上展开它时,两者都包含相同的值(3个对象) 在我的例子中,当我使用var数组作为我的select2的
[]
和(3)[对象,对象,对象]
之间的数组表示有什么区别
我有一组对象,如:
var array = [{id: 1, text: 'a'}, {id: 2, text: 'b'}, {id: 3, text: 'c'}];
当我尝试在代码中的某一行中使用console.log(array)
时,它有时打印为[]
,有时打印为(3)[对象,对象,对象]
。[]
不是空的,不过,当我在浏览器控制台上展开它时,两者都包含相同的值(3个对象)
在我的例子中,当我使用var数组
作为我的select2的数据时,如下所示:
$('#elems').select2({
data: array
});
如果当iconsole.log(array)
显示为(3)[Object,Object,Object]
,则选择2
获取数据,选项将是a,b,c
。但是,当它显示为[]
select2
时,无法读取对象,因此,该选项将为空
我想知道select2
是否将[]
读取为空,尽管在浏览器控制台上[]
是可扩展的,并且包含值。像这样:
$('#elems').select2({
data: array
});
有人能解释一下吗?这是个时间问题。console.log在添加项目之前运行。运行此代码段以获取示例。你必须把握好时机。很可能是比赛状态
var数组=[{id:1,text:'a'},{id:2,text:'b'},{id:3,text:'c'}];
console.log(数组);
var数组=[];
setTimeout(函数(){
push({id:1,文本:'a'},{id:2,文本:'b'},{id:3,文本:'c'});
}, 1000);
console.log(数组)代码>JavaScript控制台中的单行显示是在调用console.log()
时生成的
稍后单击箭头图标时,将在单击箭头时生成多行显示
这就是为什么您会看到两件不同的事情:您在最初的console.log()
调用之后的某个时候更改了数组,但在单击箭头之前
如果要查看在调用console.log()
时存在的完整数组内容,最好使用JSON.stringify()
:
如果您不确定发生这种情况的原因,很可能是在进行原始的console.log()
调用后,有一些异步操作修改了数组。例如,一个常见的错误是进行ajax调用以填充全局变量,然后在ajax调用返回后尝试立即在代码中使用该变量,但这是在数据准备就绪和调用ajax回调之前
在这种情况下,您根本不应该使用全局变量。相反,您应该在ajax回调本身中或在从该回调调用的函数中处理从服务器返回的数据。不要试图将其存储在全局变量中,也不要假设其他代码知道数据何时准备就绪。仅访问回调中的数据。您是否单击了小的i
图标?控制台不是标准化的,因此每个浏览器都可以自行决定数据的显示方式。@Xufox是的,两个浏览器都显示相同的消息下面的值刚刚计算过。
无论浏览器是什么,当数组显示为[]时,select2
都会阻止读取对象
我想知道这是否是某种比赛条件。在console.log运行时,它是一个空数组,但在渲染时,它有3个项目或类似的内容。@mkaatman这也是我的想法。然后,我再次尝试在我的代码中的一些行中随机放置console.log
,一些显示为[]
,而另一些则没有。我明白了,所以这是一个设置超时的计时问题1000毫秒。这与您为我描述的完全一样。