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

Why is my JavaScript hash with the reserved word "toString" as a key showing NaN?

本文关键字:显示 的键 NaN toString JavaScript 我的 哈希带 保留字 为什么      更新时间:2023-09-26

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

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

但我的问题是我如何处理计算保留字,我得到了 NaN。

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

{the: 2, dog: 2, went: 1, to: 1,

other: 1, toString: NaN}

我怎样才能得到这个给我真正的计数而不是 NaN。

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;
  }