Can';t在JavaScript中将变量声明为对象属性
我声明了一个函数,当给定一个字符串作为参数时,它返回一个对象,其中键是字符串中的单词。值是该单词在字符串中出现的次数 当我运行下面的代码时,我得到{}Can';t在JavaScript中将变量声明为对象属性,javascript,Javascript,我声明了一个函数,当给定一个字符串作为参数时,它返回一个对象,其中键是字符串中的单词。值是该单词在字符串中出现的次数 当我运行下面的代码时,我得到{} function countWords(string) { var result = {}; var words = string.split(' '); for (var i = 0; i < words.length; i++) { var currentElement = words[i]; var pro
function countWords(string) {
var result = {};
var words = string.split(' ');
for (var i = 0; i < words.length; i++) {
var currentElement = words[i];
var prop = result[currentElement];
if(prop) {
prop += 1;
} else {
prop = 1;
}
}
return result;
}
console.log(countWords('hello hello')); // => {'hello': 2}
函数countWords(字符串){
var result={};
var words=string.split(“”);
for(var i=0;i{'hello':2}
但是,将prop=1
替换为result[CurrentElement]=1
将返回预期的答案
为什么在此上下文中使用prop=1是错误的?
var prop=result[currentElement]代码>
这会将result[currentElement]
中的值复制到prop
中,然后添加一个值,但不会将其放回数组中。赋值是按值进行的,而不是按引用进行的。var prop=result[currentElement]代码>
这会将result[currentElement]
中的值复制到prop
中,然后添加一个值,但不会将其放回数组中。赋值是按值进行的,而不是按引用进行的。在这一行中:
var prop = result[currentElement];
您正在复制result[currentElement]
(显然是一个数字)的值,然后增加副本,因此原始值(result[currentElement]
)保持不变。此行:
var prop = result[currentElement];
您正在复制result[currentElement]
(显然是一个数字)的值,然后增加副本,因此原始值(result[currentElement]
)保持不变。因为变量几乎从不通过引用与任何其他变量链接。
只有两种情况是以其他方式进行的:
参数
处于非严格模式
函数f(a){
log(a,参数[0]);
a=10;
log(a,参数[0]);
}
职能g(a){
"严格使用",;
log(a,参数[0]);
a=10;
log(a,参数[0]);
}
f(7);
g(7)代码>,因为变量几乎从不通过引用与其他任何东西链接。
只有两种情况是以其他方式进行的:
参数
处于非严格模式
函数f(a){
log(a,参数[0]);
a=10;
log(a,参数[0]);
}
职能g(a){
"严格使用",;
log(a,参数[0]);
a=10;
log(a,参数[0]);
}
f(7);
g(7)代码>您需要使用对对象的引用进行检查和递增
result[currentElement]
^^ object
^^^^^^^^^^^^^^^^ property of object
如果你只是得到它的值,你会得到一个原语值,而不是想要的对象引用
value = result[currentElement] // undefined in the first call
// 1 in the second call
但您不再有对结果的引用
函数countWords(字符串){
var result={};
var words=string.split(“”);
for(var i=0;i console.log(countWords('hello'));//=>{'hello':2}
您需要使用对对象的引用进行检查和递增
result[currentElement]
^^ object
^^^^^^^^^^^^^^^^ property of object
如果你只是得到它的值,你会得到一个原语值,而不是想要的对象引用
value = result[currentElement] // undefined in the first call
// 1 in the second call
但您不再有对结果的引用
函数countWords(字符串){
var result={};
var words=string.split(“”);
for(var i=0;i console.log(countWords('hello'));//=>{'hello':2}
您需要将其添加到结果中,如下所示:
<script>
function countWords(string) {
var result = {};
var words = string.split(' ');
for (var i = 0; i < words.length; i++) {
var currentElement = words[i];
var prop = result[currentElement];
if(prop) {
prop += 1;
} else {
prop = 1;
}
result[currentElement]=prop;
}
return result;
}
console.log(countWords('hello hello test khalil'));
</script>
函数countWords(字符串){
var result={};
var words=string.split(“”);
for(var i=0;i
您需要将其添加到结果中,如下所示:
<script>
function countWords(string) {
var result = {};
var words = string.split(' ');
for (var i = 0; i < words.length; i++) {
var currentElement = words[i];
var prop = result[currentElement];
if(prop) {
prop += 1;
} else {
prop = 1;
}
result[currentElement]=prop;
}
return result;
}
console.log(countWords('hello hello test khalil'));
</script>
函数countWords(字符串){
var result={};
var words=string.split(“”);
for(var i=0;i
prop
只是一个变量。如果将其分配给某个属性,然后写入prop=1
,则只需将prop
重新定义为1
。实际上,您没有触及属性本身。prop
的可能副本只是一个变量。如果将其分配给某个属性,然后写入prop=1
,则只需将prop
重新定义为1
。你实际上并没有接触到财产本身。可能是