当我将eval()与hint()一起使用时,出现错误的原因是什么?

时间:2019-01-01 05:57:01

标签: javascript

function nameValidation(){
  var x = eval(prompt("please enter a value"));
  var i = 0;
  while(i < Infinity){
    if(x !== "abcdefghi"){
      alert("please enter a valid name")
      x = eval(prompt("please enter a value"));
    }
    else if (x === "abcdefghi"){
      break
    }
    i++
 }
}
nameValidation()

我正在尝试使用eval()prompt()验证名称。当我写任何字符串时,我得到一个错误:

  

VM146:1未捕获的参考错误:在nameValidation(:7:11)的eval(15:1)的eval(在nameValidation(eval的nameValidation(Java-Script:7),:1:1)处未定义)。

我尝试使用其他转换方法,但是尽管我在代码中使用了break,但我得到了一个不停的无限循环。

function nameValidation(){
  var x = eval(prompt("please enter a value"));
  var i = 0;
  while(i < Infinity){
    if(x !== "abcdefghi"){
      alert("please enter a valid name")
      x = eval(prompt("please enter a value"));
    }
    else if (x === "abcdefghi"){
      break
    }
    i++
 }
}

我希望程序能够正常运行,而不会出现错误;另一方面,我希望收到警报:please enter a valid name如果名称不是字符串,并且名称是字符串,则程序会跳出循环

在该代码中,eval()将对x求值,如果它不是字符串,程序将提示“请输入有效名称”。那是因为我使用相同的而不是相等的运算符(“!==”)来检查类型,并且如果x等于字符串,则程序会退出循环。我担心的是为什么我收到上述问题中的错误。

3 个答案:

答案 0 :(得分:-1)

带有提示的Widget searchField() { return TextField( autofocus: true, decoration: InputDecoration( hintText: "search", prefixIcon: Icon(Icons.search), suffixIcon: IconButton( icon: Icon(Icons.close), onPressed: (){ print("cancel"); }, ), fillColor: Colors.white, filled: true), ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( bottom: PreferredSize( child: Container( width: 300.0, child: searchField(), ), preferredSize: Size.square(50.0), ), title: Text("example"), actions: <Widget>[ Switch( value: widget.stateofSwitch, onChanged: (value) { setState(() { darkThemeEnabled = value; }); }, ) ], ), body: ), ); } 方法不会返回任何内容,因此,变量eval的值未定义。只能使用x来代替评估和提示。

prompt

更大的问题是,为什么首先需要function nameValidation(){ var x = prompt("please enter a value"); //changed this var i = 0; while(i < Infinity){ if(x !== "abcdefghi"){ alert("please enter a valid name") x = prompt("please enter a value"); // changed this } else if (x === "abcdefghi"){ break } i++ } } 。另外,在循环中对evali<Infinity的检查也没有多大意义,因为i++永远不会超过i

答案 1 :(得分:-1)

根据文档,eval()函数期望在代码中缺少一个字符串:

eval(string)

其中

参数

字符串

  

代表JavaScript表达式,语句或语句序列的字符串。该表达式可以包含现有对象的变量和属性。

返回值

  

评估给定代码的完成值。如果完成值为空,则返回undefined

Reference Link

您只需要在eval中进行简单的更改,如下所示:

/**
 * Just correcting the error in the mentioned code of the question
 */ 
function nameValidation(){
  var x = eval('prompt("please enter a value")');
  var i = 0;
  while(i < Infinity){
    if(x !== "abcdefghi"){
      alert("please enter a valid name")
      x = eval('prompt("please enter a value")');
    }
    else if (x === "abcdefghi"){
      break;
    }
    i++;
 }
}

/**
 * Fixing Eval() issue as mentioned in code as well as checking that the string should not be empty.
 */ 
function nameValidation2(){
    var x = eval('prompt("please enter a value")');
    var i = 0;
    while(i < Infinity){
      if(x == ""){
          alert("please enter a valid name")
          x = eval('prompt("please enter a value")');
      }
      else {
          break;
      }
      i++;
   }
}
nameValidation2();

答案 2 :(得分:-2)

无需使用eval(),使用Regular_expression来检查输入的值是否仅是整数。根据{{​​3}}的建议,有些名称包含特殊字符,例如'éö,例如,我们甚至都不知道,例如:< / p>

Prashant D'Souza
Mary Kate 
André 
Sören
Jørgen
Prashant0123 -- in case of username 

您还可以阅读名称为t-niesehere的特殊字符

function nameValidation() {
 var x = prompt("please enter a value");
 var i = 0;
 var regex = /^[0-9]+$/;

 while (i < Infinity) {
  if (x === "abcdefghi") {
   break;
  } else if (!x.match(regex)) {
   break;
  } else {
   alert("please enter a valid name")
   x = prompt("please enter a value")
  }
  i++;
 }
}
nameValidation();