理解javascript对象与map
understanding javascript objects vs map
我最近一直在阅读javascript,我知道大多数东西都是对象,函数,对象,数组等。所以我今天试着实现一些东西,我不明白为什么它没有像我期望的那样表现。如果能稍微澄清一下就好了。
我试图将一些字符串映射到其他字符串,所以我尝试了对象字面量方法:
var stringMap = {
'string1': 'string1 equivalent',
'string2': 'string2 equivalent',
//etc..
};
当我尝试这样做时:
var mapString = stringMap['string1'];
没有定义。然后,我将对象更新为:
var stringMap = {
return: {
'string1': 'string1 equivalent',
'string2': 'string2 equivalent',
//etc..
}
};
相同的结果,未定义。然后我这样做:
var stringMap = [];
stringMap['string1'] = 'string1 equivalent';
stringMap['string2'] = 'string2 equivalent';
//etc..
,这次成功了:
var mapString = stringMap['string1'];
如果一切都是对象,为什么我的前两个对象文字尝试都没有成功?是我的语法错了吗?
更新
对不起,在写完这个问题之后,我意识到我做错了什么。我说过,我对对象字面量尝试了以下操作:var mapString = stringMap['string1'];
然而,这是错误的,我尝试的是:
var stringVal = 'string1';
var mapString = stringMap.stringVal;
我将保留这个问题并接受答案,因为答案仍然是有帮助的! 当使用var
声明变量时,返回值为undefined
。
var x = 5;
//=> undefined
为了增加混淆,console.log
也将返回undefined
,但它将输出值到stdout
console.log(x);
// stdout: 5
//=> undefined
话虽如此,你的代码工作得很好
var stringMap = {
'string1': 'string1 equivalent',
'string2': 'string2 equivalent',
//etc..
};
//=> undefined
var mapString = stringMap['string1'];
//=> undefined
console.log(mapString);
// stdout: 'string1 equivalent'
//=> undefined
你也可以写
var mapString = stringMap.string1;
//=> undefined
console.log(mapString);
// stdout: 'string1 equivalent'
//=> undefined
或者直接记录值
console.log(stringMap.string1);
// stdout:'string1 equivalent'
//=> undefined
我会一个一个地看你的例子:
var mapString = stringMap['string1'];
以上是好的。要实际记录变量,您应该执行console.log(mapString)
。
var stringMap = {
return: {
'string1': 'string1 equivalent',
'string2': 'string2 equivalent',
//etc..
}
};
上面是一个语法错误。哪里都不行
var stringMap = [];
stringMap['string1'] = 'string1 equivalent';
stringMap['string2'] = 'string2 equivalent';
在上面的例子中,你是在给Array实例本身打补丁;实际上,您并没有将元素添加到数组中。要在数组中添加内容,您可以使用各种方法,如unshift
, push
等。
显示控制台未定义,但string1
的值实际上分配给stringMap变量
在控制台中试试下面的代码:
var stringMap = {
'string1': 'string1 equivalent',
'string2': 'string2 equivalent'
};
var mapString = stringMap['string1'];
mapString // Print value in console
赋给变量的值可以使用方括号[]
来使用,但是对象属性可以使用点运算符.
来使用
var stringVal = 'string1';
// var mapString = stringMap.stringVal; // won't work because 'stringVal' is variable
var mapString = stringMap[stringVal]; // Work
既然一切都是对象而不是使用
var stringMap = {
'string1': 'string1 equivalent',
'string2': 'string2 equivalent',
//etc..
};
你可以将你的对象实例化为
var stringMap = {
string1: 'string1Value',
string2: 'string2Value,
}
或者
var stringMap = {};
stringMap.string1 = 'string1Value';
stringMap.string2 = 'string2Value';
要访问对象的属性(在本例中是stringMap中的字符串),可以使用括号符号
var x = stringMap['string1'];
或点符号
var x = stringMap.string1;
这是控制台的一个片段,它可能会对您有所帮助
var stringMap = {
'string1': 'string1 equivalent',
'string2': 'string2 equivalent'
};
undefined//显示未定义,但实际赋值
stringMap['string1']
"string1等效"
stringMap.string1
"string1等效"
stringMap[string1]
VM165:2 Uncaught ReferenceError: string1 is not defined(…)
相关文章:
- 如何将i18n.map转换为json对象
- 为什么可以't我用Set对象调用Array.prototype.map
- 将对象从另一个不可变的Map分配给Map是否意味着深度克隆
- 在CouchDB Map函数中发出日期时-对日期对象调用的内容
- 使用.map解析JSON对象时出现问题
- jQuery Map 从多个源返回 JSON 对象
- 在对象数组上使用map()检查差异
- 为什么 Array.prototype.reduce() 不接受 Map 对象作为初始值
- 递归 - 将 Javascript Map 转换为嵌套的 JSON 对象
- TypeError:undefined不是使用d3.map的对象
- 使用map迭代对象数组
- 使用map方法将javascript对象数组转换为其他对象数组
- MongoDB是否支持Map对象
- 如何检查两个 Map 对象是否相等
- 我可以将JavaScript Map对象存储在Meteor的MongoDB中吗?
- 在 Jquery 中的 .map 对象上使用 If 语句
- 创建Javascript/JQuery后检索Google Map对象
- 从ArcGIS JavaScript API Map对象获取JSON WebMap
- 将map对象传递给javascript函数
- 如何绑定到新的Set和Map对象