为什么我的JavaScript哈希与保留字“toString”作为显示NaN的键?

时间:2014-12-10 19:30:06

标签: javascript

我正在做一个编程练习,希望我计算一个字符串中所有出现的字符,例如"狗去了另一只狗"。

对于上面的示例,我必须返回一个带有计数的哈希值:{the:2,dog:2,go:1,to:1,other:1}

但我的问题是如何处理保留字的计数,我正在接受NaN。

所以这个字符串{"狗去了另一只狗toString"},为我返回:

{the:2,dog:2,go:1,to:1,other:1,toString:NaN}

我怎样才能让这个给我真正的数量,而不是NaN。

1 个答案:

答案 0 :(得分:5)

JavaScript实际上没有哈希值。因此,如果您要创建这样的哈希:hash = {}那么您实际上是在其原型链中创建一个已存在属性的对象。这包括toString功能。要避免这种情况,请使用Object.create(null)创建一个对象来存储您的字数。

以下是一个例子:

 var words = function(string) { 
 var words_array = string.split(" "); 
 var word_count_hash = Object.create(null); 

 words_array.map( function (word){
   if (word in word_count_hash)
     word_count_hash[word] ++; 
   else word_count_hash[word] = 1;
  }); 

  return word_count_hash;
  }