如何在JavaScript中检查空值?我写了下面的代码,但没用。
if (pass == null || cpass == null || email == null || cemail == null || user == null) {
alert("fill all columns");
return false;
}
如何在JavaScript程序中查找错误?
如何在JavaScript中检查空值?我写了下面的代码,但没用。
if (pass == null || cpass == null || email == null || cemail == null || user == null) {
alert("fill all columns");
return false;
}
如何在JavaScript程序中查找错误?
当前回答
与操作员进行可选检查怎么样?
例如:
// check mother for null or undefined and
// then if mother exist check her children also
// this 100% sure it support and valid in JS today.
// Apart of that C# have almost the same operator using the same way
if (mother?.children) {
}
else {
// it is null, undefined, etc...
}
其他回答
实际上,我认为你可能需要使用if(value!==null&&value!==undefined)因为如果使用if(value),也可能会过滤0或false值。
考虑这两个功能:
const firstTest = value => {
if (value) {
console.log('passed');
} else {
console.log('failed');
}
}
const secondTest = value => {
if (value !== null && value !== undefined) {
console.log('passed');
} else {
console.log('failed');
}
}
firstTest(0); // result: failed
secondTest(0); // result: passed
firstTest(false); // result: failed
secondTest(false); // result: passed
firstTest(''); // result: failed
secondTest(''); // result: passed
firstTest(null); // result: failed
secondTest(null); // result: failed
firstTest(undefined); // result: failed
secondTest(undefined); // result: failed
在我的情况下,我只需要检查值是否为null和未定义,我不想过滤0、false或“”值。所以我使用了第二个测试,但你可能也需要过滤它们,这可能会导致你使用第一个测试。
通过显式检查null但使用简化的语法来改进已接受的答案:
if ([pass, cpass, email, cemail, user].every(x=>x!==null)) {
// your code here ...
}
//测试let pass=1,cpass=1,email=1,cemail=1,user=1;//只是为了测试if([pass,cpass,email,cemail,user].every(x=>x!==null)){//你的代码在这里。。。console.log(“Yayy!它们都不是空的”);}其他{console.log(“哎呀!至少其中一个为空”);}
要检查javascript中的undefined和null,只需编写以下内容:
if (!var) {
console.log("var IS null or undefined");
} else {
console.log("var is NOT null or undefined");
}
检查错误条件:
// Typical API response data
let data = {
status: true,
user: [],
total: 0,
activity: {sports: 1}
}
// A flag that checks whether all conditions were met or not
var passed = true;
// Boolean check
if (data['status'] === undefined || data['status'] == false){
console.log("Undefined / no `status` data");
passed = false;
}
// Array/dict check
if (data['user'] === undefined || !data['user'].length){
console.log("Undefined / no `user` data");
passed = false;
}
// Checking a key in a dictionary
if (data['activity'] === undefined || data['activity']['time'] === undefined){
console.log("Undefined / no `time` data");
passed = false;
}
// Other values check
if (data['total'] === undefined || !data['total']){
console.log("Undefined / no `total` data");
passed = false;
}
// Passed all tests?
if (passed){
console.log("Passed all tests");
}
乍一看,这似乎是一个简单的覆盖和严格之间的权衡。
==包含多个值,可以用更少的代码处理更多的场景。==是最严格的,这使得它可以预测。
可预测性总是获胜的,这似乎是一个万能的解决方案。
但这是错误的。尽管==是可预测的,但它并不总是产生可预测的代码,因为它忽略了场景。
const options = { };
if (options.callback !== null) {
options.callback(); // error --> callback is undefined.
}
通常,==为空检查执行更可预测的工作:
一般来说,null和undefined都意味着同一件事:“缺少了什么”。为了实现可预测性,您需要检查这两个值。然后==null做得很好,因为它正好覆盖了这两个值。(即==null等同于==null&&==未定义)在特殊情况下,您确实需要明确区分null和undefined。在这些情况下,最好使用严格的==未定义或==null。(例如,缺失/忽略/跳过和空/清除/删除之间的区别。)但这很少见。
这不仅是罕见的,也是需要避免的。不能在传统数据库中存储undefined。由于互操作性的原因,在API设计中也不应该依赖未定义的值。但即使你根本不做区分,你也不能假设未定义不会发生。我们周围的人都间接地采取了泛化空/未定义的行为(这就是为什么像这样的问题被封闭为“固执己见”的原因)。
所以,回到你的问题。使用==null没有错。它正是它应该做的。
// FIX 1 --> yes === is very explicit
const options = { };
if (options.callback !== null &&
options.callback !== undefined) {
options.callback();
}
// FIX 2 --> but == covers both
const options = { };
if (options.callback != null) {
options.callback();
}
// FIX 3 --> optional chaining also covers both.
const options = { };
options.callback?.();