javascript - 对字符串进行条件评估

我正在尝试创建一个检查,以查看字段是否已从占位符 value 更改。如果没有,我重新分配原始 changed value,因为函数(在我的实际代码库中)必须查看多个字段。

我只是有点困惑为什么:

changed = (locationField.value && locationField.value !== locationField.placeholder) ? true : changed;

如果提交的字段没有value,则评估为空字符串*。

*在帖子末尾输出

我假设它是 locationField.value 的空 value,但它不应该分配 'true' 或改变的 value 吗?改变(据我所知)永远不会也不应该是一个字符串。

可能是一个简单的问题,但我看不到答案。

https://codepen.io/nwoodward/pen/WNMpVGv?editors=1011

const locationField = document.querySelector('.location');
const submit = document.querySelector('.submit');
let changed = false;

submit.addEventListener('click', e => {
  changed = (locationField.value && locationField.value !== locationField.placeholder) ? true : changed;
  console.log(locationField.value, locationField.placeholder, (locationField.value && locationField.value !== locationField.placeholder));
  console.log(changed);
  
  // reset 
  changed = false;
});
<input type="text" placeholder="test" class="location">
<button class="submit">Submit</button>

**编辑:

我得到的结果:

输入“已更改”=> "changed", "test", true

输入“测试”=> "test", "test", false

输入 "" "", "test", "",当我期望 "", "test", false

回答1

逻辑与 (&&) 从左到右计算操作数,并立即返回它遇到的第一个假操作数的 value;如果所有 values 都为真,则返回最后一个操作数的 value。

(来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND

因此,在您的情况下,如果 locationField.value 是“”,其评估结果为假 value,那么逻辑与将返回 locationField.value 的 value(这就是它返回空字符串的原因)

回答2

如果您首先将 locationField.value 转换为布尔值,使用 !! 或使用 Boolean(),那么您应该会得到预期的结果。

(!!locationField.value && locationField.value !== locationField.placeholder)

相似文章

最新文章