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等于字符串,则程序会退出循环。我担心的是为什么我收到上述问题中的错误。
答案 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++
}
}
。另外,在循环中对eval
和i<Infinity
的检查也没有多大意义,因为i++
永远不会超过i
答案 1 :(得分:-1)
根据文档,eval()
函数期望在代码中缺少一个字符串:
eval(string)
其中
参数
字符串
代表JavaScript表达式,语句或语句序列的字符串。该表达式可以包含现有对象的变量和属性。
返回值
评估给定代码的完成值。如果完成值为空,则返回
undefined
。
您只需要在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
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();