我尝试在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
两次?
答案 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的类型true
或false