在不同系统上的Javascript中初始化的数组的初始值是多少?
What is the initial value of an initialized Array in Javascript on different systems?
几个月来我一直在为JavaScript问题而苦苦挣扎,我有一个包含一些属性的数组,后来检查其中一些属性以决定是否向用户显示消息。
现在,这一切在大多数系统(尤其是最近的浏览器)上都运行良好,但在我客户的某些IE7计算机上却不那么顺利。
现在我刚刚发现在我的代码中的某个地方,我初始化了一个如下所示的新数组,但从未真正设置"done"的值
var qar=new Array('question_no','pos','done');
qar['question_no'] = 1234;
qar['pos'] = 1234; //dont mind these numbers
稍后在一些 for 循环中,我检查:
//check if this question was already shown
if(qar['done'])
continue; //stop here, don't show message
//set done to true, so that this question will not be shown again
qar['done'] = true;
window.alert('messaged!');
同样,出错的是有时(实际上经常,但并非总是)消息在IE7中根本不显示。
现在回答我的问题:我知道 qar['done'] 应该在初始化后立即未定义,这使我的代码工作正常(在 Chrome 等中),但是是否可以以某种方式在 IE7 中处理这种情况?例如,qar['done'] 不是未定义的,而是某个随机值,因此有时偶然被认为是真的?还是这样想着是一件愚蠢的事情?
如果这不是问题,那么我不知道是什么..
提前感谢!
通过这样做:
var qar=new Array('question_no','pos','done');
您只是在创建带有索引的数组。
qar[0] will be 'question_no'
qar[1] will be 'pos'
qar[2] will be 'done'
在这种情况下,QAS['done'] 将始终是未定义的。
这就是为什么它会引起问题。你应该使用javascript对象而不是使用数组。
但是你可以做这样的事情:
if(typeof qar['done'] === 'undefined'){
qar['done'] = true;
alert('messaged!');
}
你的代码应该是这样的:
var qar={};
qar['question_no'] = 1234;
qar['pos'] = 1234; //dont mind these numbers
//check if this question was already shown
if(!qar['done']) {
//set done to true, so that this question will not be shown again
qar['done'] = true;
window.alert('messaged!');
}
相关文章:
- 如何在映射数组中添加换行符
- javascript结合了数组和字典
- 需要帮助设置json数组
- 不能从angular2中的子组件指定父组件中的数组
- 使用JS将数组转换为json对象
- 数组在递归方法中设置为null
- knockoutjs可观察数组
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 将数组从PHP传递到Javascript
- 在主要的JavaScript引擎中,在JavaScript关联数组(动态对象属性)中检索/插入的复杂性是多少
- (角度.js)如何通过过滤器计算数组中有多少项目
- 在不同系统上的Javascript中初始化的数组的初始值是多少?
- 如何检查名称索引数组中有多少个特定结果
- 窗口中可容纳多少个单位,并将该值推送到数组中
- 如何在不排序的情况下使用JavaScript计算数组中有多少重复字符串
- 在JavaScript中可以实现数组减法的最快数量级是多少
- 检测数组中有多少不同类型的值
- 一个Javascript数组联接操作中有多少个操作
- 使用jQuery检测JSON数组中有多少元素发生了变化
- 计算一个数组中有多少字符串在同一数组中重复