javascript - 在JS中正确使用typeof运算符?

标签 javascript validation ecmascript-6

我正在用 JavaScript 制作一个简单的刽子手游戏。我正在尝试添加新功能,我想添加的功能之一是检查用户给出的输入(当他们猜测未知单词的字母时)以确保它实际上是字母数字输入(或者我的目的是检查输入是否不是像“!”这样的符号或像“5”这样的数字)。

我知道我可能可以使用一个包含所有有效字符的全局变量,并根据这些字符检查输入,但我想知道是否有一个内置方法可以实现这一点。我找到了 typeof 运算符,但我正在检查的字符类型似乎已被 JavaScript 转换为字符串。

我试图实现这个的循环:

while (remainingLetters > 0 && numberOfGuesses > 0) {
alert(answerArray.join(" "));
alert("You have " + numberOfGuesses + " guesses remaining.");

var guess = prompt("Guess a letter, or click \
'Cancel' to stop playing.").toLowerCase();

if (guess === null) {
  break;
} else if (typeof guess === "number") {
  alert("Please enter a single LETTER.");
} else if (guess.length !== 1) {
  alert("Please enter a single letter.");
} else {
  for (var j = 0; j < word.length; j++) {
    if (word[j] === guess) {
      answerArray[j] = guess;
      remainingLetters--;

// there is some code missing here that I'm pretty sure is not essential 
// to my question!

当我在 Chrome 的开发工具中运行它时,我可以输入“2”,但它永远不会给我我正在寻找的警报 - 它不会崩溃或发生任何事情,它只是重新启动循环(这是状态)在我尝试实现这个“功能”之前)。

提前致谢!

最佳答案

此代码的问题是 prompt 始终返回一个 string 值。这些值可能会也可能不会转换为Number;此转换将使用 parseIntparseFloat 执行。 (如果字符串可以转换为数值,则这些方法返回该值;否则,它们返回 NaN。)但是,typeof 不执行插值 - 它声明类型变量存在时的类型,而不是它可能转换为的任何类型。因此,typeof Guess 将始终计算为 string。要检查字符串是否包含数值,可以使用条件 if (!isNaN(parseInt(guess))if (!isNaN(parseFloat(guess)) (请注意,必须使用 isNaN 方法而不是传统的相等检查)。

但是,您可能希望围绕确保条目是字母来构建检查,而不是考虑到它可能不是字母的各种方式。例如,@不是数字,但它们也不是字母。同样,如果您的 answerArray 仅包含没有变音符号的拉丁字母,您可能希望禁止猜测 éç 等字符。因此,请考虑使用 RegEx 来检查猜测的字符串是否包含可接受的字母。如 this Stack Overflow post ,您可以使用以下 if 语句来确保字符串长度为一个字符并且是一个有效的字母: if (str.length === 1 && str.match(/[a-z]/))。您可以引用该帖子,了解处理更复杂的字符集(例如非拉丁字母或带有变音符号的字母)的方法。

关于javascript - 在JS中正确使用typeof运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51623500/

相关文章:

javascript - 如何将按钮的ID发送到codeigniter中的 Controller

javascript - 即使包含元素,MVC + Jquery 验证器也不适用于禁用字段

javascript - 如何按对象键/值对js数组中的对象进行排序

forms - Angular 4有条件地删除所需的验证器

javascript - 这是 HH :MM:SS correct 的正则表达式吗

JavaScript导入HTML文件内容(目标是浏览器)

javascript - 有没有办法在 es6 中导入一个只适用于一个特定元素并且不是全局的 css 文件?

javascript - 是否有有效的数组 monad 转换器?

javascript - 区分代理获取处理程序中的直接访问和内部访问

validation - 至少填写一个字段时,根据需要验证一组字段