在Javascript中创建自定义数字数组索引

时间:2017-07-26 20:04:10

标签: javascript arrays object typeof

我尝试在Javascript中创建受污染的索引。那是我的代码。

var map = [];

function createIndexIfNotExists (posx,posy){            
if(typeof(map[posx]===undefined)){
            map[posx] = {};
            console.log("created: map["+posx+"] typeof="+typeof(map[posx])); //typeof object
}

if(typeof(map[posx][posy]===undefined)){
            map[posx][posy] = [];
            console.log("created: map["+posx+"]["+posy+"] 
typeof="+typeof(map[posx])); //typeof object 
}
map[posx][posy].push( {'posx':posx, 'posy':posy }); }

createIndexIfNotExists(10,5);
createIndexIfNotExists(10,6);

但结果就是这样。

created: map[10] typeof=object
created: map[10][5] typeof=object
created: map[10] typeof=object
created: map[10][6] typeof=object

如果typeof为map[10]而非object,为什么要创建undefined两次?

2 个答案:

答案 0 :(得分:0)

在此行中,您需要移动()

if(typeof(map[posx]===undefined)){

应该是:

if(typeof(map[posx])===undefined){

这一行也是如此:

if(typeof(map[posx][posy])===undefined){

您正在找到比较的类型,它将始终评估为将评估为true的字符串'boolean'

答案 1 :(得分:0)

typeof将tyoe作为字符串返回,因此类型检查将类似于

if(typeof(map[posx])==="undefined")

if(typeof(map[posx][posy])==="undefined")

并且(中不需要)typeof来包装您要检查的项目,{a keyword,一个function }。当你将表达式(map[posx]===undefined在你的情况下)包装在typeof中()时,这意味着执行该表达式的首选项更高,并且将检查该结果的类型。所以首先解析已解决的表达式map[posx]===undefined,然后检查resule的类型truefalse