函数为空(val){ 返回(val===未定义||val==null||val.length<=0)? 真:假; }
-
197 Protip,永远不要 (真实的陈述)? 真:假; .就这么做 (真实陈述); . – 大卫·鲍克姆 评论 2017年8月2日17:55 -
11 @George Jempty不是傻瓜,因为另一个答案问到 串 特别是,而这个问题是关于 变量 . – Madbreaks公司 评论 2018年2月1日0:55 -
4 这个问题的正确答案完全取决于你如何定义“空白”。 – Madbreaks公司 评论 2018年2月1日1:03 -
7 @Jay它对代码的执行没有任何影响。 这太冗长了。 你不会说“你饿了吗?”你只是说“你饿了吗”所以在代码中只说 如果(饿了)… 而不是 如果(饥饿===真)… 。就像所有以这种方式编码的东西一样,这只是一个味道问题。 更具体地说,对于OP提供的示例,他说得更详细了,“如果它是真的,那么是真的;如果不是,那么是假的”,但如果它是真实的,那么它已经是真的了。 如果它是假的,那么它已经是假的了。 这类似于说“如果你饿了,那么你饿了;如果不饿,那么你不饿了。” – 大卫·鲍克姆 评论 2019年1月30日22:58 -
三 如果你想强制一个值成为一个真正的布尔值,你可以这样做 !! 价值 。它只是两次“not”操作符,所以读起来像“not not value”,这是它的布尔值。 – 弗罗多2975 评论 2020年1月19日4:29
47个答案
if(值){ //做点什么。。 }
无效的 未定义 NaN公司 空字符串(“”) 0 假
if(类型foo!==“未定义”){ //foo可以被解析,它被定义 }
这个问题有两种解释:
检查变量是否有值 检查变量是否具有真实值
以下是两者的答案。
╭─ 使无效 ──────╮ ╭─ 非无效 ─────────────────────────────────╮ ┌───────────┬──────┬───────┬───┬────┬─────┬──────┬───┬─────────┬─────┐ │ 未定义│空│假│0│“”│…│真│1│“你好”│ └───────────┴──────┴───────┴───┴────┴─────┴──────┴───┴─────────┴─────┘ ╰─ 虚伪的 ───────────────────────────────╯ ╰─ 真实的 ───────────────╯
检查值是否为nursh(未定义或null)
如果(value==null){/*value为nulsh*/} if(value===未定义||value===null){/*value为nulsh*/} 如果(value==未定义){/*value为nulsh*/} if((value??null)===null){/*value为nulsh*/}
这个 == 操作员工作是因为 它对空与未定义比较有一种特殊情况 这个 === 运算符更具可读性(基于观点),对eqeqq友好,允许分别检查未定义和null 第一个和第三个示例的工作原理相同,但第三个在生产代码中很少出现 第四个示例使用零值合并操作符将零值更改为 无效的 用于直接比较
检查值是否为零
if(value!=null){/*value不是nursh,尽管它可能是falsy*/} if(value!==未定义&&value!==null){/*value不是nursh,尽管它可能是falsy*/} if(value!=undefined){/*value不是nursh,尽管它可能是falsy*/} if((值??null)!== null){/*值不是nursh,尽管它可能是falsy*/}
检查值是否错误
如果(!value){/*value为falsy*/}
检查值是否真实
如果(value){/*value为true*/}
数据验证
/* *检查值是否大于/等于0 *注意,我们不能在这里使用真实检查,因为必须允许0 */ [null,-1,0,1].forEach(num=>{ if(num!=null&&num>=0){ console.log(“%o不为nulsh且大于等于0”,num); }其他{ console.log(“%o不正确”,num); } }); /* *检查值是否不是空字符串或空白字符串 */ [null、“”、“”和“hello”].forEach(str=>{ if(str&&//\S/.test(str)){ console.log(“%o为truethy且具有非空白字符”,str); }其他{ console.log(“%o不正确”,str); } }); /* *检查值是否不是空数组 *在检查长度属性之前检查真实性 */ [null,[],[1]].forEach(arr=>{ if(arr&&arr.长度){ console.log(“%o是真的,并且有一个或多个项目”,arr); }其他{ console.log(“%o错误”,arr); } }); /* *检查值是否不是空数组 *使用可选的链接运算符确保值不为零 */ [null,[],[1]].forEach(arr=>{ if(arr?.长度){ console.log(“%o不是nursh,并且有一个或多个项”,arr); }其他{ console.log(“%o错误”,arr); } });
-
48 仅检查 无效的 或 未定义 可以这样做: if(值==空) .注意 == 强制执行的运算符。 如果你这样检查 if(value===null||value===未定义) ,您忘记/不知道Javascript是如何强制的。 webreflection.blogspot.nl/2010/10/… 评论 2014年7月3日11:46 -
54 -
18 -
9 -
8 @Sharky未定义的变量和未声明的变量之间存在差异: lucybain.com/blog/2014/null-undefined-undeclared 评论 2016年10月17日10:22
函数为空(值){ 返回(值==null||value.length===0); }
undefined//因为undefined==null 无效的 [] ""
函数为空(值){ return(value==null||value==''); }
函数为空(值){ return(value==null||value.trim().length===0); }
-
11 -
6 @Ian Boyd那是因为你在比较==和===。 这意味着undefined==null(true)undefined!= null(false)未定义===null(false)未定义!=== null(true)最好提供更多信息,以便提供帮助并推动人们朝着正确的方向前进。 关于差异的moz文档 developer.mozilla.org/en-US/docs/Web/JavaScript/… – 科里·杨 评论 2016年1月14日18:03 -
1
if(值类型!==“未定义”&&value){ //处理价值 };
无效的 未定义(未定义的值与从未定义的参数不同) 0 “”(空字符串) 假 NaN公司
-
10 -
4 谢谢你的评论,史蒂夫。 这个一般规则很好。 我只是希望人们能理解他们为什么使用其中一个。 无论你看起来如何,人们都会很高兴地向你宣扬“始终使用严格”——就像它是Javascript中最重要的东西一样。 我见过太多这样的案例 if(val!==空) 这显然会导致不想要的结果。 当有疑问时,可以说使用严格,但最好不要有疑问。 – 古雅 评论 2013年12月7日22:11 -
7 我认为这里的重点是我们希望 类型 操作符返回字符串,这样使用严格的相等性检查在技术上更准确、更具体、更快。 因此,实际上,没有理由使用松散的比较,而不是相反的方法。 阿尔索 val!== 无效的 在许多情况下都是完全有效的-我一直都这样做。 我同意你的非一致性论点,但我认为这是一个糟糕的例子。 不是想欺负你。 – 布莱恩·唐宁 评论 2014年10月10日2:10 -
谢谢你的评论Bryan,你用val!== 空,因为你知道自己在做什么。 初学者会想回到val为falsy的时候。 但是,val永远不会为空,它将是未定义的。 如果他不听从“总是严格使用”的建议,他就会少一些臭虫。 我在生产代码中见过这种情况。 typeof总是返回一个字符串,速度差异将是多余的。 因此,在上述情况下使用strict的唯一理由是一致性。 我说过“不需要严格的平等”。 这并不意味着如果你想这样做,或者如果这样做可以使你的代码更加一致,你就不能这样做。 – 古雅 评论 2014年10月11日2:26
函数为空(值){ 返回( //null或未定义 (值==空)|| //长度为零 (value.hasOwnProperty(“长度”)&&value.length===0)|| //是一个对象,没有键 (value.constructor===对象和对象.keys(value).length===0) ) }
正确: 未定义 , 无效的 , "" , [] , {} 错误: 真的 , 假 , 1 , 0 , -1 , “foo” , [1, 2, 3] , {foo:1}
看看新的ECMAScript Nullish凝聚算子
设x=foo?? bar();
让x=(foo!==空&&foo!==未定义)? foo:bar();
-
三 -
-
同样的想法也适用 ??= 。示例: 名称??=' 鲍勃 等于 name=(name!==null&&name!==未定义)? name:'bob' . doc:空合并赋值(??=) – 锡石 评论 2023年4月4日11:41 -
函数类型Of(obj){ return{}.toString.call(obj).split('')[1]切片(0,-1).toLowerCase(); }
函数类型Of(obj){ const{toString}=对象原型; const stringified=对象::toString(); 常量类型=stringified.split('')[1].slice(0,-1); return type.toLowerCase(); }
typeOf()// 未定义 typeOf(空)// 无效的 类型Of(NaN)// 数 typeOf(5)// 数 typeOf({})类型// 对象 typeOf([])// 阵列 typeOf(“”)// 一串 typeOf(函数(){})// 功能 typeOf(/a/)//正则表达式 typeOf(new Date())//日期 typeOf(new WeakMap())//WeakMap typeOf(new Map())//映射
if(!!foo){ //定义了foo }
-
三 我假设这只是一个片段。 但是 如果 已经做了一个错误的检查,这只是将其转换为布尔值。 它是否捕捉到任何正常情况 if(foo) 没有抓住? 评论 2017年6月28日7:38 -
2 当您需要内联的东西时,这是完美的选择,例如我需要一个在字符串不为空时为真的反应属性(称为active)-if语句将被过度使用,因此我可以使用 活动={!!foo} 评论 2018年1月23日20:01 -
20 -
2 -
不! 这与原始问题的逻辑相反,是一种测试isEmpty的方法。 如果未定义或为null,则返回true。 但更进一步,这并没有解决0和“”是虚假的这一事实。 – 标记年龄(_S) 评论 2023年10月18日11:55
if(typeof(value)!== “未定义”&&值)
if(值类型!==“未定义”&&value)
-
三 -
4 -
2 -
-
真空度
真实性/虚假性
空与未定义
试图访问不存在的属性会导致 未定义 调用函数时省略参数会导致接收该参数 未定义 :
设f=a=>a; console.log(f('hi')); console.log(f());
具有默认值的参数仅在给定时接收默认值 未定义 ,不是 无效的 :
设f=(v='hello')=>v; console.log(f(null)); console.log(f(未定义));
let fnWithDefaults=参数=>{ 如果(arg===未定义)arg='default'; ... };
让fnWithDefaults=(arg='default')=>{…};
fnWithDefaults(未定义);
fnWithDefaults();
设fnWithDefaults=(a=1,b=2,c=3,d=4)=>console.log(a,b,c,d);
fn默认值(10,未定义,未定义40);
设fnWithDefaults=({a=1,b=2,c=3,d=4}={})=>console.log(a,b,c,d); fnWithDefaults({a:10,d:40});// 现在这个看起来真不错! (从不谈论“未定义”)
非通用真空
设isType=(值,Cls)=>{ //有意使用松散比较运算符检测`null` //还有“未定义”,什么都没有! 返回值!= null&&Object.getPrototypeOf(value).constructor===Cls; };
([]对象实例)===true (“数组是对象”) (字符串的“”实例)===false (“字符串不是字符串”)
最小化未知类型值的代码处理量。 例如,用于 让v=JSON.parse(someRawValue); ,我们的 v(v) 变量现在的类型未知。 我们应该尽早限制我们的可能性。 最好的方法是要求特定类型:例如。 if(!isType(v,Array))引发新错误(“预期数组”); -这是消除 v(v) ,并确保它始终是 阵列 然而,有时我们需要允许 v(v) 具有多种类型。 在这种情况下,我们应该创建代码块,其中 v(v) 不再通用,请尽早:
if(isType(v,String)){ /*v在这个块中不是通用的-它是一个字符串*/ }else if(isType(v,Number)){ /*v在这个块中不是通用的-它是一个数字*/ }else if(isType(v,Array)){ /*v在这个块中不是通用的,它是一个数组*/ }其他{ throw new Error(“预期字符串、数字或数组”); }
始终使用“白名单”进行验证。 如果您需要一个值,例如String、Number或Array,请检查这三种“白色”可能性,如果三种可能性都不满足,则抛出Error。 我们应该能够看到,检查“黑色”可能性并不是很有用:比如我们写 如果(v===null)抛出新错误(“null value rejected”); -这对确保 无效的 价值观无法通过,但如果 做 成功了,我们仍然对它一无所知。一个值 v(v) 通过这个空检查的仍然是非常通用的-它是 除了什么 无效的 ! 黑名单很难消除普遍性。 除非值为 无效的 ,永远不要考虑“一个空洞的值”。 相反,考虑“一个空洞的X”。 从本质上讲,永远不要考虑像 if(isEmpty(val)){/*…*/} -不管怎样 栈空 函数已实现(我不想知道…),它没有意义! 而且它太普通了! 只有在了解以下内容的情况下才能计算真空度 val值 的类型。 真空度检查应如下所示: “一个没有字符的字符串”: if(isType(val,String)&&val.length===0)。。。 “对象,具有0个道具”: if(isType(val,Object)&&Object.entries(val).length===0)。。。 “等于或小于零的数字”: if(isType(val,Number)&&val<=0)。。。 “数组,没有项目”: if(isType(val,Array)&&val.length===0)。。。 唯一的例外是 无效的 用于表示某些功能。 在这种情况下,可以这样说:“空值”: 如果(val===空)。。。
函数为空(val){ 返回! val; }
-
这并不是说变量是否为空,因为false和0可以是有效值,并且不构成空值。 使用isEmpty函数的价值是确保您期望的空值返回true。 在我看来,null、undefined、NaN和空字符串是有意义的空值。 – 科里·杨 评论 2016年1月14日18:09 -
20 -
val==null||val==''
函数为空(val){ 返回val==null||val=='' } // ------------ //测试 // ------------ var log=(name,val)=>控制台.log(`${name}->${isEmpty(val)}`); log('null',null); log(“未定义”,未定义); log('NaN',NaN); 日志(“”,“”); 日志(“{}”,{}); 日志('[]',[]); 日志(“[1]”,[1]); 日志(“[0]”,[0]); 日志('[[]]',[[]]); log('true',true); 日志(“false”,false); log(“true”,“true“); 日志(“false”,“false”); log(“不确定性”,无限性); log('-Infinity',-Infinity); log('1',1); 日志('0',0); 日志('-1',-1); 日志(“1”,“1”); 日志(“0”,“0”); 日志(“-1”,“-1”); //“void 0”案例 console.log('---\n“true”是:',true); console.log(“void 0”是:',void 0); 日志(void 0,void 0);// “void 0”是“未定义的”-所以我们应该得到这里的TRUE
val===未定义||val===null||val==''||(Array.isArray(val)&&val.length===0)
函数为空(val){ return val===未定义||val===null||val==''||(Array.isArray(val)&&val.length===0) } // ------------ //测试 // ------------ var log=(name,val)=>控制台.log(`${name}->${isEmpty(val)}`); log('null',null); log(“未定义”,未定义); log('NaN',NaN); 日志(“”,“”); 日志(“{}”,{}); 日志('[]',[]); 日志(“[1]”,[1]); 日志(“[0]”,[0]); 日志('[[]]',[[]]); log('true',true); 日志(“false”,false); log(“true”,“true“); 日志(“false”,“false”); log(“不确定性”,无限性); log('-Infinity',-Infinity); log('1',1); 日志('0',0); 日志('-1',-1); 日志(“1”,“1”); 日志(“0”,“0”); 日志(“-1”,“-1”); //“void 0”案例 console.log('---\n“true”是:',true); console.log(“void 0”是:',void 0); 日志(void 0,void 0);// “void 0”是“未定义的”-所以我们应该得到这里的TRUE
/** *检查“value”是否为空。 数组、字符串或“参数”对象 *长度为“0”且对象没有自己的可枚举属性 *“空”。 * *@静态 *@memberOf_ *@category对象 *@param{Array | Object | string}value要检查的值。 *@returns{boolean}如果“value”为空,则返回“true”,否则返回“false”。 *@示例 * *_.为空([1,2,3]); *//=>假 * *_.为空([]); *//=>真 * *_.isEmpty({}); *//=>真 * *_.is空(''); *//=>真 */ 函数为空(值){ if(!value){ 返回true; } if(isArray(value)||isString(value,值)){ 返回! 值.长度; } for(var键值){ if(hasOwnProperty.call(value,key)){ 返回false; } } 返回true; }
_.isEmpty(值)
-
三 已尝试您的代码。 我在控制台中收到一条错误消息:“Uncaughtreferenceerror:isArray()is not defined”。 否则,如果它能起作用就太好了。 评论 2015年10月22日18:58 -
12 -
1 -
三 -
4
if(foo){} 函数(bar){}(foo)
foo类型!= “未定义”
if(foo的类型!=“未定义”&&foo){ //此处输入代码 }
函数类型OfVar(obj){ return{}.toString.call(obj).split('')[1]切片(0,-1).toLowerCase(); } 函数isVariableHaveDefaltVal(变量){ if(typeof(variable)===“字符串”){//number,boolean,string,object console.log('单引号/双引号之间的任何数据都被视为字符串'); return(variable.trim().length===0)? 真:假; }else if(typeof(variable)===“boolean”){ console.log('布尔值,默认值为“false”); 返回(变量===false)? 真:假; }else if(typeof(variable)===“未定义”){ log('EX:var a;变量已创建,但默认值为undefined.'); 返回true; }else if(typeof(variable)===“数字”){ console.log('number:'+变量); 返回(变量===0)? 真:假; }else if(typeof(variable)===“对象”){ //-----对象----- if(typeOfVar(variable)==“array”&&variable.length==0){ console.log('\t长度为'+[].length的对象数组);// Object.keys(变量) 返回true; }else if(typeOfVar(variable)===“字符串”&&variable.length===0){ console.log('\t长度为'+variable.length的对象字符串); 返回true; }else if(typeOfVar(variable)===“boolean”){ console.log('\t对象布尔值='+变量); 返回(变量===false)? 真:假; }else if(typeOfVar(variable)===“数字”){ console.log('\t对象编号='+变量); 返回(变量===0)? 真:假; }else if(typeOfVar(variable)===“regexp”&&variable.source.trim().length===0){ console.log('\t对象正则表达式:'); 返回true; }else if(变量===null){ console.log('\t对象空值'); 返回true; } } 返回false; } var str=“适合任何场合的篮子”; str=str.replace(/\s/g,“-”); //正则表达式中的“g”标志将替换所有空格。
isVariableHaveDefaltVal(“”);// 字符串 isVariableHaveDefaltVal(假);// 布尔值 变量a; isVariableHaveDefaltVal(a); isVariableHaveDefaltVal(0);// 数字 isVariableHaveDefaltVal(parseInt(“”));// NAN是NAN(“”);- 真的 isVariableHaveDefaltVal(空); isVariableHaveDefaltVal([]); isVariableHaveDefaltVal(//); isVariableHaveDefaltVal(新对象(“”)); isVariableHaveDefaltVal(新对象(false)); isVariableHaveDefaltVal(新对象(0)); typeOfVar(函数(){});
var prototypes_or_Literals=函数(obj){ 开关(对象类型){ //对象原型 case“对象”: if(obj实例数组) return“[object Array]”; else if(obj实例日期) return“[对象日期]”; else if(RegExp的obj实例) 返回“[object regexp]”; else if(obj instanceof String) return'[object String]'; else if(obj instanceof Number) return“[对象编号]”; 其他的 return“object”; //对象文字 违约: 返回类型(obj); } }; 输出测试« prototypes_or_Literals(“”)//“string” prototypes_or_Literals(新字符串(“”))//“[object String]” Object.prototype.toString.call(“foo bar”)//“[Object String]”
函数isEmpty(obj){ if(typeofobj=='number')返回false; else if(typeof obj=='string')返回obj.length==0; else if(Array.isArray(obj))返回obj.length==0; else if(typeof obj=='object')返回obj==null || object.keys(obj).length==0; else if(typeof obj==‘boolean’)返回false; 否则返回! 对象; }
常量为空=值=>{ if(typeof value===“数字”)返回false else if(typeof value===“string”)返回value.trim().length===0 else if(Array.isArray(value))返回值.length===0 else if(typeof value===“object”)返回值==null | | object.keys(value).length==0 else if(typeof value===“boolean”)返回false 否则返回! 价值 }
var variablesWhatILookFor=[null,undefined,'']; variablesWhatILookFor.indexOf(document.DocumentNumberLabel)>-1
-
2 我觉得这很酷,所以一开始我没有投票,但Node.js已经被否决了。 类型定义文件显示: /**@v4.0.0之后已弃用-请改用“value===null||value==undefined”*/ – 原子原子 评论 2018年10月2日22:16 -
在这里: nodejs.org/api/util.html#util_util_sullorundefined_object 另外:“我觉得这很酷,所以我一开始 投赞成票 “应为:) – 原子原子 评论 2018年10月4日20:21 -
1
无效的 未定义 NaN公司 空字符串(“”) 0 假
功能可用(值ToCheck){ if(valueToCheck===0|//如果值为0,请避免返回false。 valueToCheck===“”||//如果值为空字符串,请避免返回false。 valueToCheck===false | |//如果值为false,请避免返回false。 valueToCheck)//如果它不是null、undefined或NaN,则返回true。 { 返回true; }其他{ 返回false; } }
if(可用(x)){ //它是可用的! } //确保避免将逻辑NOT运算符放在参数(isUsable(!x))之前,而是在函数之前使用它来检查返回值。 if(!可用(x)){ //它不可用! }
函数isEmptyObject(值ToCheck){ if(valueToCheck的类型==='object'&&!object.keys(valueToCheck).length){ //对象为空! 返回true; }其他{ //对象不为空! 返回false; } } 函数为EmptyArray(valueToCheck){ if(Array.isArray(valueToCheck)&&! 检查长度的值){ //数组为空! 返回true; }其他{ //数组不为空! 返回false; } }
函数isAllWhitespace(){ if(valueToCheck.match(/^*$/)!== null){ //都是空白! 返回true; }其他{ //不是所有的空格! 返回false; } }
让客户={ name:“卡尔”, 详细信息:{ 年龄:82岁, 地点:“天堂瀑布”//详细地址未知 } }; let customerCity=customer.details?。 地址?。 城市;
让客户={ name:“卡尔”, 详细信息:{年龄:82} }; const customerCity=客户?。 城市?? “未知城市”; console.log(customerCity);// 未知城市
var myNewValue=myObject和myObject.child;
(函数(g3,$,窗口,文档,未定义){ g3.utils=g3.utils|{}; /********************************函数类型()******************************** *返回对象构造函数的小写字符串表示。 *@模块{g3.utils} *@函数{g3.utils.type} *@公共 *@param{Type}“obj”是任何类型的本机、主机或自定义。 *@return{String}返回表示对象 *构造函数,如果它们不是自定义的,则与单词“对象”不同。 *@参考 http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/ * http://stackoverflow.com/questions/3215046/disferenting-between-arrays-and-hashes-in-javascript * http://javascript.info/tutorial/type-detection *******************************************************************************/ g3.utils.type=函数(obj){ if(obj===空) return“null”; else if(对象类型===“未定义”) return'undefined'; return Object.protype.toString.call(obj).match(/^\[Object\s(.*)\]$/)[1].toLowerCase(); }; }(window.g3=window.g3||{},jQuery,窗口,文档);
常量为空=值=>( (!value&&value!==0&&values!==false) ||(Array.isArray(value)&&value.length===0) ||(isObject(值)&&Object.keys(值).length===0) ||(值的类型。大小===“数字”&&value.size===0) //`WeekMap.length`应该存在!? ||(值的类型。长度==='数字' &&值的类型!==' 函数'&&value.length===0) ); //资料来源: https://levelup.gitconnected.com/javascript-check-if-a-variable-is-an-object-and-nothing-else-not-an-array-a-set-etc-a3987ea08fd7 const isObject=值=> Object.prototype.toString.call(value)===“[对象对象]”;
常数测试=()=>{ const run=(标签,值,预期值)=>{ 常量长度=values.length; console.group(`${label}(${length}测试)`); 值.map((v,i)=>{ console.assert(预期为isEmpty(v)===,`${i}:${v}`); }); 控制台.groupEnd(); }; 常量空=[ null,未定义,NaN,“”,{},[], new Set()、new Set, ]; 常量notEmpty=[ “”,“a”,0,1,-1,false,true,{a:1},[0], 新集合([0]),新映射([['a',1]]), new WeakMap().set({},1), new Date(),/a/,new RegExp(),()=>{}, ]; 常量shouldBeEmpty=[ {undefined:undefined},新映射([[]]), ]; run('EMPTY',空,真); run('NOT EMPTY',notEmpty,false); run(“应该为空”,shouldBeEmpty,true); };
空(10次测试) 非空(16次测试) 应为空(2次测试) 断言失败:0:[object object] 断言失败:1:[object Map]
-
功能很好,这里所有的其他答案都有多个问题,你的答案似乎解决了这些问题,我只是希望我在写自己的答案之前找到它:p想你可能想看看我的作品 stackoverflow.com/questions/5515310/… 我们的两个函数的输出似乎完全相同,但我减少了一些代码。 如果我错过了什么,请告诉我。 – 肖恩·班尼斯特 评论 2020年4月21日18:30 -
-
是的,我确实运行了您的测试,感谢您的支持,我们的两个函数都返回了相同的测试结果。 我一直在想,除了这些测试用例之外,我是否遗漏了什么。 我相信 value.constructor===对象 好的,在javascript中,IF OR语句具有执行顺序,因此OR语句只在前面的语句没有返回TRUE并且我们已经检查过的情况下执行 无效的 事实上,最后一条OR语句的唯一目的是检测 {} 并确保不应该返回TRUE。 – 肖恩·班尼斯特 评论 2020年4月23日9:01
函数notEmpty(值){ return(typeof value!==“undefined”&&value.trim().length); }
null,未定义,NaN,空,字符串(“”),0,false