Javascript:尽管值是真实的,但值不能通过条件

时间:2019-06-19 02:54:05

标签: javascript webkitspeechrecognition

当我做一些事情时,我发现了一个奇怪的问题。 我尝试进行语音识别。条件的第一部分可以正常工作,但不适用于第二部分。

var v;

function test() {
  var ses = new webkitSpeechRecognition();
  ses.lang = "En"
  ses.continuous = true;
  ses.start();
  ses.onresult = function(event)
    if (event.results.length > 0) {
      sonuc = event.results[event.results.length - 1];
      document.querySelector("input").value = sonuc[0].transcript;
      v = sonuc[0].transcript;
      console.log(v + " 1");

      if (v == "good") {
        switchLED('on');
        console.log(v + "2");
        console.log("OK !");
        console.log("LED ok");
      }

      if (v == "bad") {
        switchLED('off');
        console.log(v + "2");
        console.log("OK !");
        console.log("LED off");
      }
    }
  }

我第一次说:good 结果是:

good 1 
good 2
OK ! 
LED OK

这是正确的。

然后第二次,如果我说:bad 结果是:

bad 1

并且它没有满足条件if(v == "bad")

只有当bad是我说的第二个单词时才会发生。如果我第一次刷新页面并直接说“不好”,我将获得所有正确的结果。

1 个答案:

答案 0 :(得分:0)

根据Mozzila's documentation

  

对于连续识别,必要时将包含前导或尾随空白,以便将连续的SpeechRecognitionResults串联在一起可以生成正确的会话记录。

这完全符合您的描述。由于您的语音识别会话是连续的(如ses.continuous = true中所示),结果是,当您第一次说任何单词时,抄录员将正确地获得该单词。但是,当它识别出下一个单词时,将添加一个前导空格。您可能复制了控制台输出,一定是这样的:

good 1 
good 2
OK ! 
LED OK

 bad 1 
^ leading space here

实际上," bad"不等于"bad"。这就是字符串未通过条件的原因。要解决此问题,只需确保trim您的字符串:

var v;

function test() {
  var ses = new webkitSpeechRecognition();
  ses.lang = "En"
  ses.continuous = true;
  ses.start();
  ses.onresult = function(event)
    if (event.results.length > 0) {
      sonuc = event.results[event.results.length - 1];
      document.querySelector("input").value = sonuc[0].transcript;
      v = sonuc[0].transcript.trim(); // <-- trim here
      console.log(v + " 1");

      if (v == "good") {
        switchLED('on');
        console.log(v + "2");
        console.log("OK !");
        console.log("LED ok");
      }

      if (v == "bad") {
        switchLED('off');
        console.log(v + "2");
        console.log("OK !");
        console.log("LED off");
      }
    }
  }

然后您的代码应该可以按预期工作。希望对您有帮助!