js判断问题

let key = {
    i:"1",
    j:"",
    k:""
};
if(key.i === "" && key.j==="" && key.k===""){
    console.log("不能为空");
}

这样写了 && 以后log不提示了。我想判断3个对象为空是都提示log。

阅读 5.6k
13 个回答

用或 key.i === "" || key.j==="" || key.k===""

if(key.i === "" || key.j==="" || key.k===""){
    console.log("不能为空");
}

...用|| 只要一个为空 就提示啊

用或不要用且

&&表示 所有条件都成立的时候 有效
||表示 有一个条件满足就有效
所以 按照你的意思 每个条件都为空的时候 log 所以 应该选择||

你这个是&&意思是所有都要满足才可以,三个都为空这样,用||能满足

科普下,&&||这两者的区别。
前者(&&)它的名字叫逻辑与,如果用它来判断条件,如下

if(i == 1 && j == 2)

如果第一个条件不满足,即i != 1,那么它不会去判断j的值,甩都不用甩它一下。但如果第一个条件满足的时候,它也要满足第二个条件才能进入if的内部代码去执行,简而言之只有当你的所有条件满足的时候,才能执行条件判断内部代码。

后者(||),这玩意叫逻辑或
在编程里,,意思就是条件满足只要有一个满足就行,全满足当然也无所谓,但是这个判断符号也有短路作用。拿上面的例子来说

if(i == 1 || j == 2)

如果i==1满足了,那么它就会出现短路作用,不会去判断j的值是多少,直接进入if内部的代码去执行。

用||就能解决问题了

因为你其中的 i: "1",不为空呀。
而 if (key.i === "" && key.j ==="" && key.k ===""),在 key.i === "" 这里短路了(具体为什么见上面回答),自然而然就不会判断后面的 key.j 和 key.k 了。
if 就为 false,所以也就不会执行 console.log 了。

分享一个&&和||的记忆法:
&&:并且,而且
||:或者
这里key.i === "" && key.j==="" && key.k===""意思是i为空而且j为空而且k为空,显然这不符合逻辑的
换成i为空或者j为空或者k为空才提示,才是符合逻辑的
所以应该换成key.i === "" || key.j==="" || key.k===""

let key = {

i:"1",
j:"",
k:""
}

if(key.i === "" || key.j==="" || key.k===""){

console.log("不能为空");

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题