如何在JavaScript中检查空值?我在下面编写了代码,但是没有用。
if (pass == null || cpass == null || email == null || cemail == null || user == null) {
alert("fill all columns");
return false;
}
在JavaScript程序中如何找到错误?
null
js中的测试应使用严格的运算符完成===
如何在JavaScript中检查空值?我在下面编写了代码,但是没有用。
if (pass == null || cpass == null || email == null || cemail == null || user == null) {
alert("fill all columns");
return false;
}
在JavaScript程序中如何找到错误?
null
js中的测试应使用严格的运算符完成===
Answers:
Javascript在检查“空”值方面非常灵活。我猜您实际上是在寻找空字符串,在这种情况下,这种简单的代码将起作用:
if(!pass || !cpass || !email || !cemail || !user){
这将检查空字符串(""
), ,,null
以及数字和undefined
false
0
NaN
请注意,如果您专门检查数字,则0
使用此方法时常会犯错,对于返回的函数,它num !== 0
是首选(num !== -1
或~num
(或(也针对hack代码-1
)))-1
,例如indexOf
)
!
或!!
测试的null
或undefined
在一般数字数据,除非你也想扔掉值的0
0
...”。我相信这个答案非常适合该问题,因为给出了上下文(我推断是“用户名,密码,电子邮件”),他们不会检查0
值。鉴于此问题和答案的普及,我同意在答案本身中值得一提。
检查null 具体你可以使用这样的:
if (variable === null)
本次测试将只通过了null
,也不会通过的""
,undefined
,false
,0
,或NaN
。
此外,我还提供了对每个“假值”值的绝对检查(对于,该值将返回true !variable
)。
请注意,对于某些绝对检查,您将需要使用absolutely equals: ===
和typeof
。
这是每个检查的输出:
Null Test:
if (variable === null)
- variable = ""; (false) typeof variable = string
- variable = null; (true) typeof variable = object
- variable = undefined; (false) typeof variable = undefined
- variable = false; (false) typeof variable = boolean
- variable = 0; (false) typeof variable = number
- variable = NaN; (false) typeof variable = number
Empty String Test:
if (variable === '')
- variable = ''; (true) typeof variable = string
- variable = null; (false) typeof variable = object
- variable = undefined; (false) typeof variable = undefined
- variable = false; (false) typeof variable = boolean
- variable = 0; (false) typeof variable = number
- variable = NaN; (false) typeof variable = number
Undefined Test:
if (typeof variable == "undefined")
-- or --
if (variable === undefined)
- variable = ''; (false) typeof variable = string
- variable = null; (false) typeof variable = object
- variable = undefined; (true) typeof variable = undefined
- variable = false; (false) typeof variable = boolean
- variable = 0; (false) typeof variable = number
- variable = NaN; (false) typeof variable = number
False Test:
if (variable === false)
- variable = ''; (false) typeof variable = string
- variable = null; (false) typeof variable = object
- variable = undefined; (false) typeof variable = undefined
- variable = false; (true) typeof variable = boolean
- variable = 0; (false) typeof variable = number
- variable = NaN; (false) typeof variable = number
Zero Test:
if (variable === 0)
- variable = ''; (false) typeof variable = string
- variable = null; (false) typeof variable = object
- variable = undefined; (false) typeof variable = undefined
- variable = false; (false) typeof variable = boolean
- variable = 0; (true) typeof variable = number
- variable = NaN; (false) typeof variable = number
NaN Test:
if (typeof variable == 'number' && !parseFloat(variable) && variable !== 0)
-- or --
if (isNaN(variable))
- variable = ''; (false) typeof variable = string
- variable = null; (false) typeof variable = object
- variable = undefined; (false) typeof variable = undefined
- variable = false; (false) typeof variable = boolean
- variable = 0; (false) typeof variable = number
- variable = NaN; (true) typeof variable = number
如您所见,要进行测试有点困难NaN
;
===
严格相等,类型检查的目的是什么?谢谢。同样对于NaN测试,您可以使用仅在变量等于NaN时isNaN(value)
返回的方法true
。
variable === null
不是“对象”类型的情况?如果没有,为什么不简化检查variable === null
,扔掉第二个合集呢?谢谢。
variable === null
而我刚刚在此JSFiddle中对此进行了测试。我之所以使用`&& typeof variable ==='object'`的原因不仅是为了说明一个有趣的事实,即null
值是typeof object
,而且还与其他检查流程保持一致。但是是的,总而言之,您可以放心使用variable === null
。
undefined
是不null
。否则会导致很多意想不到的行为。通常,如果您对两个null
/ undefined
都不感兴趣,那么请使用==
(应该这样做的少数情况之一)。
通过显式检查null
但使用简化的语法来改进可接受的答案:
if ([pass, cpass, email, cemail, user].every(x=>x!==null)) {
// your code here ...
}
// Test
let pass=1, cpass=1, email=1, cemail=1, user=1; // just to test
if ([pass, cpass, email, cemail, user].every(x=>x!==null)) {
// your code here ...
console.log ("Yayy! None of them are null");
} else {
console.log ("Oops! At-lease one of them is null");
}
您可以最终使用try catch
try {
document.getElementById("mydiv").innerHTML = 'Success' //assuming "mydiv" is undefined
} catch (e) {
if (e.name.toString() == "TypeError") //evals to true in this case
//do something
} finally {}
您也throw
可以自己输入错误。看到这个。
在JavaScript中,没有字符串等于null
。
也许您期望pass == null
在pass
为空字符串时为true,因为您知道松散的相等运算符==
会执行某些类型的强制转换。
例如,此表达式为true:
'' == 0
相反,严格相等运算符===
说这是错误的:
'' === 0
鉴于''
和0
大致相等,您可以合理地猜想''
和null
大致相等。但是,事实并非如此。
此表达式是错误的:
'' == null
将任何字符串与比较的结果null
为false。因此,pass == null
您的所有其他测试始终为假,并且用户永远不会收到警报。
要修复代码,请将每个值与空字符串进行比较:
pass === ''
如果您确定这pass
是一个字符串,那么pass == ''
也将起作用,因为只有一个空字符串大致等于该空字符串。另一方面,一些专家说,除非您特别想执行松散相等运算符执行的类型强制,否则始终在JavaScript中始终使用严格相等是一种好习惯。
这是对WebWanderer有关检查NaN的解决方案的评论(我没有足够的代表留下正式评论)。解决方案读为
if(!parseInt(variable) && variable != 0 && typeof variable === "number")
但这对于舍入到的有理数将失败0
,例如variable = 0.1
。更好的测试是:
if(isNaN(variable) && typeof variable === "number")
parseInt
为parseFloat
(首先应该对我来说很明显)来修复测试。我避免使用该isNan
函数,因为我觉得很多开发人员都在看这些函数,例如isNaN
某种“魔术盒”,值会进入其中,布尔值就会消失,因此我想进行更深入的测试。但是,是的,您建议的测试将可以正常使用。抱歉,直到现在我才注意到您的帖子。
isNaN
,我可以支持这种逻辑。还有一个Underscore.js方法,该方法似乎更加令人困惑/黑匣子,但是仍然值得注意,因为它利用了NaN !== NaN
。Object.prototype.toString.call(variable) === '[object Number]' && variable !== +variable
实际上,我认为您可能需要使用,
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和undefined,我不想过滤器0
或false
或''
值。因此我使用了第二项测试,但是您可能也需要过滤它们,这可能会导致您使用第一项测试。
我发现了另一种测试该值是否为null的方法:
if(variable >= 0 && typeof variable === "object")
null
同时充当number
和object
。比较null >= 0
或null <= 0
结果true
。比较null === 0
或null > 0
或null < 0
将导致错误。但是作为null
对象,我们也可以将其检测为null。
我做了一个更复杂的函数,natureof会比typeof更好,并且可以被告知要包含或保持分组的类型
/* function natureof(variable, [included types])
included types are
null - null will result in "undefined" or if included, will result in "null"
NaN - NaN will result in "undefined" or if included, will result in "NaN"
-infinity - will separate negative -Inifity from "Infinity"
number - will split number into "int" or "double"
array - will separate "array" from "object"
empty - empty "string" will result in "empty" or
empty=undefined - empty "string" will result in "undefined"
*/
function natureof(v, ...types){
/*null*/ if(v === null) return types.includes('null') ? "null" : "undefined";
/*NaN*/ if(typeof v == "number") return (isNaN(v)) ? types.includes('NaN') ? "NaN" : "undefined" :
/*-infinity*/ (v+1 === v) ? (types.includes('-infinity') && v === Number.NEGATIVE_INFINITY) ? "-infinity" : "infinity" :
/*number*/ (types.includes('number')) ? (Number.isInteger(v)) ? "int" : "double" : "number";
/*array*/ if(typeof v == "object") return (types.includes('array') && Array.isArray(v)) ? "array" : "object";
/*empty*/ if(typeof v == "string") return (v == "") ? types.includes('empty') ? "empty" :
/*empty=undefined*/ types.includes('empty=undefined') ? "undefined" : "string" : "string";
else return typeof v
}
// DEMO
let types = [null, "", "string", undefined, NaN, Infinity, -Infinity, false, "false", true, "true", 0, 1, -1, 0.1, "test", {var:1}, [1,2], {0: 1, 1: 2, length: 2}]
for(i in types){
console.log("natureof ", types[i], " = ", natureof(types[i], "null", "NaN", "-infinity", "number", "array", "empty=undefined"))
}
我做了一个非常简单的功能,使奇迹产生了作用:
function safeOrZero(route) {
try {
Function(`return (${route})`)();
} catch (error) {
return 0;
}
return Function(`return (${route})`)();
}
路线是可以爆炸的任何价值链。我将它用于jQuery / cheerio和对象等。
示例1:一个简单的对象,例如this const testObj = {items: [{ val: 'haya' }, { val: null }, { val: 'hum!' }];};
。
但这可能是我们甚至还没有制造的非常大的物体。所以我通过它:
let value1 = testobj.items[2].val; // "hum!"
let value2 = testobj.items[3].val; // Uncaught TypeError: Cannot read property 'val' of undefined
let svalue1 = safeOrZero(`testobj.items[2].val`) // "hum!"
let svalue2 = safeOrZero(`testobj.items[3].val`) // 0
当然,如果您愿意,可以使用null
或'No value'
...随您的需要。
通常,如果找不到DOM查询或jQuery选择器,则可能会引发错误。但是使用类似:
const bookLink = safeOrZero($('span.guidebook > a')[0].href);
if(bookLink){
[...]
}
您可以使用lodash模块检查值是否为null或未定义
_.isNil(value)
Example
country= "Abc"
_.isNil(country)
//false
state= null
_.isNil(state)
//true
city= undefined
_.isNil(state)
//true
pin= true
_.isNil(pin)
// false
参考链接:https : //lodash.com/docs/#isNil
声明变量但未分配值的JAVASCRIPT中的 AFAIK ,其类型为。所以我们可以检查变量,即使这将是一个持有一些实例到位的价值。undefined
object
创建一个用于检查返回的无效性的辅助方法,true
并在您的API中使用它。
帮助程序函数,以检查变量是否为空:
function isEmpty(item){
if(item){
return false;
}else{
return true;
}
}
尝试捕获异常API调用:
try {
var pass, cpass, email, cemail, user; // only declared but contains nothing.
// parametrs checking
if(isEmpty(pass) || isEmpty(cpass) || isEmpty(email) || isEmpty(cemail) || isEmpty(user)){
console.log("One or More of these parameter contains no vlaue. [pass] and-or [cpass] and-or [email] and-or [cemail] and-or [user]");
}else{
// do stuff
}
} catch (e) {
if (e instanceof ReferenceError) {
console.log(e.message); // debugging purpose
return true;
} else {
console.log(e.message); // debugging purpose
return true;
}
}
一些测试用例:
var item = ""; // isEmpty? true
var item = " "; // isEmpty? false
var item; // isEmpty? true
var item = 0; // isEmpty? true
var item = 1; // isEmpty? false
var item = "AAAAA"; // isEmpty? false
var item = NaN; // isEmpty? true
var item = null; // isEmpty? true
var item = undefined; // isEmpty? true
console.log("isEmpty? "+isEmpty(item));
isEmpty
函数的行为与完全相同!
。无需发明功能。做吧if (!pass || !cpass || !email ...)
。(已在接受的答案中显示。)根据WebWanderer的评论,本文的中间部分“尝试捕获异常API调用”似乎与此问题无关。请说明您的意图-什么时候有用?这与问题有什么关系?
检查错误情况:
// 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");
}
尝试这个:
if (!variable && typeof variable === "object") {
// variable is null
}
if (variable === null)
什么比呢?去年也有人提供了这个答案:stackoverflow.com/a/27550756/218196。