我最近一直在阅读关于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'];
如果一切都是对象,为什么我的前两个对象文字尝试不起作用?我的sytanx错了。
更新
抱歉,在写完这个问题后,我意识到我做错了什么。 我说我用对象文字尝试了以下内容:var mapString = stringMap['string1'];
然而,这是 错误 ,我尝试了以下内容:
var stringVal = 'string1';
var mapString = stringMap.stringVal;
我会保持这个问题的开放并接受答案,因为答案仍然有用!
答案 0 :(得分:3)
当您使用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
答案 1 :(得分:2)
我将逐一介绍你的例子:
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';
在上面,您将对Monkey实例本身进行猴子修补属性;您实际上并没有将元素添加到数组中。要在数组中添加内容,您可以使用各种方法,例如unshift
,push
等。
答案 2 :(得分:1)
在控制台中显示undefined,但实际分配给stringMap变量的string1
的值。
在控制台中尝试以下代码:
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
答案 3 :(得分:1)
因为一切都是对象而不是使用
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;
答案 4 :(得分:0)
以下是来自控制台的代码段,它可能会对您有所帮助
var stringMap = {
'string1': 'string1 equivalent',
'string2': 'string2 equivalent'
};
stringMap['string1']
stringMap.string1
stringMap[string1]
VM165:2 Uncaught ReferenceError: string1 is not defined(…)