javascript - 这个范围有什么问题吗?

标签 javascript

当 HTML 表单提交时,它应该运行 IF 语句内的代码,然后控制台记录它。但我登录到控制台的所有内容都是未定义。这段代码有什么问题?

let inputValue = document.getElementById('nicInput').value;
let invChars;
if(/[^A-Za-z0-9]/.test(inputValue)) {
    let invChars = true;
 } else {
    let invChart = false;
 }
 console.log(invChars);

最佳答案

let在它出现的 block 的范围内创建一个新变量。

所以let invChars;是与 let invChars = true; 不同的变量.

console.log(invChars);是前者指的是,并且您从未为其分配值。

<小时/>

要采用您的方法,您应该简单地不要在 if block 内重新声明变量。和else :

let inputValue = document.getElementById('nicInput').value;
let invChars;
if(/[^A-Za-z0-9]/.test(inputValue)) {
    invChars = true;
 } else {
    invChart = false;
 }
 console.log(invChars);
<小时/>

也就是说,这是一种极其低效的分配 true 的方式。或false基于test()的返回值...它本身返回 truefalse .

简单地说,会更容易、更快、更清晰:

let inputValue = document.getElementById('nicInput').value;
let invChars = /[^A-Za-z0-9]/.test(inputValue);
console.log(invChars);

关于javascript - 这个范围有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50200692/

相关文章:

javascript - Javascript 中的正则表达式 : replace minus with comma+minus when condition is met

javascript - 顶级绑定(bind)上的输入更改事件监听器

javascript - 为什么这个简单的 javascript 正则表达式在第二种形式上不匹配?

javascript - jQuery - Raphael - SVG - 基于自定义数据的选择器

javascript 闭包与类实例

javascript - Webpack - 如何识别某些包并将其从渲染中排除?

javascript - 为什么 oninput 事件在 Angular 中的行为与在 JavaScript 中的行为不同?

javascript - 生产 Node 应用程序找不到 SVG 文件

javascript - 无法读取未定义的属性 'getWidth'

javascript - 常见通配符(例如 * 和 ?)和 javascript 正则表达式之间是否有简单的转换?