理解javascript对象与地图

时间:2015-10-06 19:09:57

标签: javascript arrays dictionary object-literal

我最近一直在阅读关于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;

我会保持这个问题的开放并接受答案,因为答案仍然有用!

5 个答案:

答案 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实例本身进行猴子修补属性;您实际上并没有将元素添加到数组中。要在数组中添加内容,您可以使用各种方法,例如unshiftpush等。

答案 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'
};

undefined //显示未定义但实际赋值为

stringMap['string1']

“string1 equivalent”

stringMap.string1

“string1 equivalent”

stringMap[string1]
VM165:2 Uncaught ReferenceError: string1 is not defined(…)