了解javascript对象与映射

了解javascript对象与映射,javascript,arrays,dictionary,object-literal,Javascript,Arrays,Dictionary,Object Literal,我最近一直在阅读javascript,我知道大多数东西都是对象、函数、对象、数组等。所以我今天尝试实现了一些东西,但我不明白为什么它没有像我期望的那样运行。稍微澄清一下就好了 我试图将一些字符串映射到其他字符串,所以我尝试了一种对象文字方法: var stringMap = { 'string1': 'string1 equivalent', 'string2': 'string2 equivalent', //etc.. }; 当我尝试这样做时: var mapString = str

我最近一直在阅读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错了吗

更新

抱歉,伙计们,在写了这个问题之后,我意识到我做错了什么。 我说我用object literal尝试了以下方法:

var mapString = stringMap['string1'];
但是,这是错误的,我尝试的是:

var stringVal = 'string1';
var mapString = stringMap.stringVal;

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

使用var声明变量时,返回值未定义

为了增加混淆,console.log还将返回未定义的值,但它会将值输出到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

在控制台中显示未定义但实际分配给stringMap变量的string1值

在控制台中尝试以下代码:

var stringMap = {
 'string1': 'string1 equivalent',
 'string2': 'string2 equivalent'
};

var mapString = stringMap['string1'];

mapString // Print value in console
分配给变量的值可以使用方括号[],但对象属性可以使用点运算符


我将逐一介绍您的示例:

var mapString = stringMap['string1'];
以上是好的。要实际记录变量,应执行console.logmapString

以上是一个语法错误。哪儿都不行

var stringMap = [];
stringMap['string1'] = 'string1 equivalent';
stringMap['string2'] = 'string2 equivalent';

在上面,您正在将属性修补到数组实例本身;实际上,您并没有向数组中添加元素。要在数组中添加内容,可以使用各种方法,如取消移位、推送等。

这里是控制台中的一个片段,它可能会对您有所帮助

var stringMap = {
 'string1': 'string1 equivalent',
 'string2': 'string2 equivalent'
};
undefined//显示未定义但实际赋值 string1等效物 string1等效物
因为一切都是对象而不是使用

 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 x = stringMap['string1'];
var x = stringMap.string1;
var stringMap = {
    string1: 'string1Value',
    string2: 'string2Value,
}
var stringMap = {};
stringMap.string1 = 'string1Value';
stringMap.string2 = 'string2Value';
var x = stringMap['string1'];
var x = stringMap.string1;