理解 javascript 对象与地图
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'];
如果一切都是对象,为什么我的前 2 个对象字面量尝试没有奏效?我的 sytanx 是不是错了。
更新
sorry 伙计们,在写完这个问题后,我意识到我做错了什么。
我说过我用对象文字尝试了以下操作:
var mapString = stringMap['string1'];
然而,这是错误的,我试过的是:
var stringVal = 'string1';
var mapString = stringMap.stringVal;
我会保留这个问题并接受答案,因为这些答案仍然很有帮助!
当您使用 var
声明变量时,return 值为 undefined
。
var x = 5;
//=> undefined
更令人困惑的是,console.log
也会 return undefined
但它会将值输出到标准输出
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
在控制台中显示未定义但 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 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
等
这是来自 Console 的一个片段,它可能对您有所帮助
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(…)
因为一切都是对象而不是使用
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;
我最近一直在阅读有关 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'];
如果一切都是对象,为什么我的前 2 个对象字面量尝试没有奏效?我的 sytanx 是不是错了。
更新
sorry 伙计们,在写完这个问题后,我意识到我做错了什么。 我说过我用对象文字尝试了以下操作:
var mapString = stringMap['string1'];
然而,这是错误的,我试过的是:
var stringVal = 'string1';
var mapString = stringMap.stringVal;
我会保留这个问题并接受答案,因为这些答案仍然很有帮助!
当您使用 var
声明变量时,return 值为 undefined
。
var x = 5;
//=> undefined
更令人困惑的是,console.log
也会 return undefined
但它会将值输出到标准输出
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
在控制台中显示未定义但 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 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
等
这是来自 Console 的一个片段,它可能对您有所帮助
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(…)
因为一切都是对象而不是使用
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;